summaryrefslogtreecommitdiff
path: root/chromium/third_party/webrtc/modules/video_coding
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/third_party/webrtc/modules/video_coding')
-rw-r--r--chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc15
-rw-r--r--chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h2
-rw-r--r--chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc24
-rw-r--r--chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc6
4 files changed, 42 insertions, 5 deletions
diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc
index 40e438f7e42..3dfcde048b0 100644
--- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc
+++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.cc
@@ -137,7 +137,9 @@ class AdapterEncodedImageCallback : public webrtc::EncodedImageCallback {
namespace webrtc {
SimulcastEncoderAdapter::SimulcastEncoderAdapter(VideoEncoderFactory* factory)
- : factory_(factory), encoded_complete_callback_(NULL) {
+ : factory_(factory),
+ encoded_complete_callback_(NULL),
+ implementation_name_("SimulcastEncoderAdapter") {
memset(&codec_, 0, sizeof(webrtc::VideoCodec));
}
@@ -195,6 +197,7 @@ int SimulcastEncoderAdapter::InitEncode(const VideoCodec* inst,
codec_.extra_options = screensharing_extra_options_.get();
}
+ std::string implementation_name;
// Create |number_of_streams| of encoder instances and init them.
for (int i = 0; i < number_of_streams; ++i) {
VideoCodec stream_codec;
@@ -224,7 +227,12 @@ int SimulcastEncoderAdapter::InitEncode(const VideoCodec* inst,
encoder->RegisterEncodeCompleteCallback(callback);
streaminfos_.push_back(StreamInfo(encoder, callback, stream_codec.width,
stream_codec.height, send_stream));
+ if (i != 0)
+ implementation_name += ", ";
+ implementation_name += streaminfos_[i].encoder->ImplementationName();
}
+ implementation_name_ =
+ "SimulcastEncoderAdapter (" + implementation_name + ")";
return WEBRTC_VIDEO_CODEC_OK;
}
@@ -497,10 +505,7 @@ bool SimulcastEncoderAdapter::SupportsNativeHandle() const {
}
const char* SimulcastEncoderAdapter::ImplementationName() const {
- // We should not be calling this method before streaminfos_ are configured.
- RTC_DCHECK(!streaminfos_.empty());
- // TODO(pbos): Support multiple implementation names for different encoders.
- return streaminfos_[0].encoder->ImplementationName();
+ return implementation_name_.c_str();
}
} // namespace webrtc
diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h
index 05a96c7336a..2b8f80a8bc0 100644
--- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h
+++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter.h
@@ -12,6 +12,7 @@
#ifndef WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_ENCODER_ADAPTER_H_
#define WEBRTC_MODULES_VIDEO_CODING_CODECS_VP8_SIMULCAST_ENCODER_ADAPTER_H_
+#include <string>
#include <vector>
#include "webrtc/base/scoped_ptr.h"
@@ -114,6 +115,7 @@ class SimulcastEncoderAdapter : public VP8Encoder {
VideoCodec codec_;
std::vector<StreamInfo> streaminfos_;
EncodedImageCallback* encoded_complete_callback_;
+ std::string implementation_name_;
};
} // namespace webrtc
diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc
index 86b8e0b3450..6f0cd5ba773 100644
--- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc
+++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp8/simulcast_encoder_adapter_unittest.cc
@@ -152,6 +152,8 @@ class MockVideoEncoder : public VideoEncoder {
supports_native_handle_ = enabled;
}
+ MOCK_CONST_METHOD0(ImplementationName, const char*());
+
private:
bool supports_native_handle_ = false;
VideoCodec codec_;
@@ -162,6 +164,10 @@ class MockVideoEncoderFactory : public VideoEncoderFactory {
public:
VideoEncoder* Create() override {
MockVideoEncoder* encoder = new MockVideoEncoder();
+ const char* encoder_name = encoder_names_.empty()
+ ? "codec_implementation_name"
+ : encoder_names_[encoders_.size()];
+ ON_CALL(*encoder, ImplementationName()).WillByDefault(Return(encoder_name));
encoders_.push_back(encoder);
return encoder;
}
@@ -171,9 +177,13 @@ class MockVideoEncoderFactory : public VideoEncoderFactory {
virtual ~MockVideoEncoderFactory() {}
const std::vector<MockVideoEncoder*>& encoders() const { return encoders_; }
+ void SetEncoderNames(const std::vector<const char*>& encoder_names) {
+ encoder_names_ = encoder_names;
+ }
private:
std::vector<MockVideoEncoder*> encoders_;
+ std::vector<const char*> encoder_names_;
};
class TestSimulcastEncoderAdapterFakeHelper {
@@ -396,6 +406,20 @@ TEST_F(TestSimulcastEncoderAdapterFake, SupportsNativeHandleForSingleStreams) {
EXPECT_FALSE(adapter_->SupportsNativeHandle());
}
+TEST_F(TestSimulcastEncoderAdapterFake, SupportsImplementationName) {
+ EXPECT_STREQ("SimulcastEncoderAdapter", adapter_->ImplementationName());
+ TestVp8Simulcast::DefaultSettings(
+ &codec_, static_cast<const int*>(kTestTemporalLayerProfile));
+ std::vector<const char*> encoder_names;
+ encoder_names.push_back("codec1");
+ encoder_names.push_back("codec2");
+ encoder_names.push_back("codec3");
+ helper_->factory()->SetEncoderNames(encoder_names);
+ EXPECT_EQ(0, adapter_->InitEncode(&codec_, 1, 1200));
+ EXPECT_STREQ("SimulcastEncoderAdapter (codec1, codec2, codec3)",
+ adapter_->ImplementationName());
+}
+
TEST_F(TestSimulcastEncoderAdapterFake,
SupportsNativeHandleDisabledForMultipleStreams) {
// TODO(pbos): Implement actual test (verify that it works) when implemented
diff --git a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
index e5547955197..106d14b986e 100644
--- a/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
+++ b/chromium/third_party/webrtc/modules/video_coding/codecs/vp9/vp9_impl.cc
@@ -660,6 +660,12 @@ int VP9EncoderImpl::GetEncodedLayerFrame(const vpx_codec_cx_pkt* pkt) {
int part_idx = 0;
CodecSpecificInfo codec_specific;
+ if (pkt->data.frame.sz > encoded_image_._size) {
+ delete[] encoded_image_._buffer;
+ encoded_image_._size = pkt->data.frame.sz;
+ encoded_image_._buffer = new uint8_t[encoded_image_._size];
+ }
+
assert(pkt->kind == VPX_CODEC_CX_FRAME_PKT);
memcpy(&encoded_image_._buffer[encoded_image_._length], pkt->data.frame.buf,
pkt->data.frame.sz);