summaryrefslogtreecommitdiff
path: root/chromium/third_party/webrtc
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-02-01 15:42:22 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-02-01 15:55:43 +0000
commit98a0061b881063a62c1941ccb67af6660ca89062 (patch)
tree5e77cc6ad4735e53db0d7a8766ed26ca726f9373 /chromium/third_party/webrtc
parent6c91641271e536ffaa88a1dff5127e42ee99a91e (diff)
downloadqtwebengine-chromium-98a0061b881063a62c1941ccb67af6660ca89062.tar.gz
BASELINE: Update Chromium to 49.0.2623.34
Change-Id: I89af6c0074347d4415cc1ce35a6d54a3760e6ad2 Reviewed-by: Michael BrĂ¼ning <michael.bruning@theqtcompany.com>
Diffstat (limited to 'chromium/third_party/webrtc')
-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
-rw-r--r--chromium/third_party/webrtc/video/video_send_stream_tests.cc27
5 files changed, 69 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);
diff --git a/chromium/third_party/webrtc/video/video_send_stream_tests.cc b/chromium/third_party/webrtc/video/video_send_stream_tests.cc
index 4cf92748a8d..f0f1ca4d2c1 100644
--- a/chromium/third_party/webrtc/video/video_send_stream_tests.cc
+++ b/chromium/third_party/webrtc/video/video_send_stream_tests.cc
@@ -2208,6 +2208,33 @@ void VideoSendStreamTest::TestVp9NonFlexMode(uint8_t num_temporal_layers,
RunBaseTest(&test);
}
+TEST_F(VideoSendStreamTest, Vp9NonFlexModeSmallResolution) {
+ static const size_t kNumFramesToSend = 50;
+ static const int kWidth = 4;
+ static const int kHeight = 4;
+ class NonFlexibleModeResolution : public Vp9HeaderObserver {
+ void ModifyVideoConfigsHook(
+ VideoSendStream::Config* send_config,
+ std::vector<VideoReceiveStream::Config>* receive_configs,
+ VideoEncoderConfig* encoder_config) override {
+ vp9_settings_.flexibleMode = false;
+ vp9_settings_.numberOfTemporalLayers = 1;
+ vp9_settings_.numberOfSpatialLayers = 1;
+
+ EXPECT_EQ(1u, encoder_config->streams.size());
+ encoder_config->streams[0].width = kWidth;
+ encoder_config->streams[0].height = kHeight;
+ }
+
+ void InspectHeader(const RTPVideoHeaderVP9& vp9_header) override {
+ if (frames_sent_ > kNumFramesToSend)
+ observation_complete_.Set();
+ }
+ } test;
+
+ RunBaseTest(&test);
+}
+
#if !defined(MEMORY_SANITIZER)
// Fails under MemorySanitizer:
// See https://code.google.com/p/webrtc/issues/detail?id=5402.