Index: webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h |
diff --git a/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h b/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h |
index 744c66a69e718c025b6187e5aa32afdbebc8cb3c..2be8779d62a9615fe3d5a8079645101638f9e870 100644 |
--- a/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h |
+++ b/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h |
@@ -13,21 +13,15 @@ |
#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_ENCODER_ADAPTER_H_ |
#include <memory> |
-#include <stack> |
#include <string> |
-#include <utility> |
#include <vector> |
-#include "webrtc/base/atomicops.h" |
-#include "webrtc/base/sequenced_task_checker.h" |
#include "webrtc/modules/video_coding/codecs/vp8/include/vp8.h" |
namespace webrtc { |
class SimulcastRateAllocator; |
-// TODO(brandtr): Remove this class and replace its use with a |
-// WebRtcVideoEncoderFactory. |
class VideoEncoderFactory { |
public: |
virtual VideoEncoder* Create() = 0; |
@@ -37,16 +31,14 @@ |
// SimulcastEncoderAdapter implements simulcast support by creating multiple |
// webrtc::VideoEncoder instances with the given VideoEncoderFactory. |
-// The object is created and destroyed on the worker thread, but all public |
-// interfaces should be called from the encoder task queue. |
+// All the public interfaces are expected to be called from the same thread, |
+// e.g the encoder thread. |
class SimulcastEncoderAdapter : public VP8Encoder { |
public: |
- // TODO(brandtr): Make it clear that the ownership of |factory| is transferred |
- // by only accepting a std::unique_ptr<VideoEncoderFactory> here. |
explicit SimulcastEncoderAdapter(VideoEncoderFactory* factory); |
virtual ~SimulcastEncoderAdapter(); |
- // Implements VideoEncoder. |
+ // Implements VideoEncoder |
int Release() override; |
int InitEncode(const VideoCodec* inst, |
int number_of_cores, |
@@ -75,50 +67,47 @@ |
private: |
struct StreamInfo { |
+ StreamInfo() |
+ : encoder(NULL), |
+ callback(NULL), |
+ width(0), |
+ height(0), |
+ key_frame_request(false), |
+ send_stream(true) {} |
StreamInfo(VideoEncoder* encoder, |
- std::unique_ptr<EncodedImageCallback> callback, |
+ EncodedImageCallback* callback, |
uint16_t width, |
uint16_t height, |
bool send_stream) |
: encoder(encoder), |
- callback(std::move(callback)), |
+ callback(callback), |
width(width), |
height(height), |
key_frame_request(false), |
send_stream(send_stream) {} |
- // Deleted by SimulcastEncoderAdapter::DestroyStoredEncoders(). |
+ // Deleted by SimulcastEncoderAdapter::Release(). |
VideoEncoder* encoder; |
- std::unique_ptr<EncodedImageCallback> callback; |
+ EncodedImageCallback* callback; |
uint16_t width; |
uint16_t height; |
bool key_frame_request; |
bool send_stream; |
}; |
- // Populate the codec settings for each simulcast stream. |
- static void PopulateStreamCodec(const webrtc::VideoCodec& inst, |
- int stream_index, |
- uint32_t start_bitrate_kbps, |
- bool highest_resolution_stream, |
- webrtc::VideoCodec* stream_codec); |
+ // Populate the codec settings for each stream. |
+ void PopulateStreamCodec(const webrtc::VideoCodec* inst, |
+ int stream_index, |
+ uint32_t start_bitrate_kbps, |
+ bool highest_resolution_stream, |
+ webrtc::VideoCodec* stream_codec); |
bool Initialized() const; |
- void DestroyStoredEncoders(); |
- |
- volatile int inited_; // Accessed atomically. |
- const std::unique_ptr<VideoEncoderFactory> factory_; |
+ std::unique_ptr<VideoEncoderFactory> factory_; |
VideoCodec codec_; |
std::vector<StreamInfo> streaminfos_; |
EncodedImageCallback* encoded_complete_callback_; |
std::string implementation_name_; |
- |
- // Used for checking the single-threaded access of the encoder interface. |
- rtc::SequencedTaskChecker encoder_queue_; |
- |
- // Store encoders in between calls to Release and InitEncode, so they don't |
- // have to be recreated. Remaining encoders are destroyed by the destructor. |
- std::stack<VideoEncoder*> stored_encoders_; |
}; |
} // namespace webrtc |