Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(121)

Issue 877393003: [Cast] Software encoder support for varying video frame sizes. (Closed)

Created:
5 years, 10 months ago by miu
Modified:
5 years, 10 months ago
Reviewers:
hubbe
CC:
chromium-reviews, hclam+watch_chromium.org, imcheng+watch_chromium.org, hguihot+watch_chromium.org, jasonroberts+watch_google.com, avayvod+watch_chromium.org, pwestin+watch_google.com, feature-media-reviews_chromium.org, miu+watch_chromium.org, hubbe+watch_chromium.org, mikhal+watch_chromium.org
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

[Cast] Software encoder support for varying video frame sizes. Adds support for automatic on-line reconfiguration of the VP8 software encoder whenever the video frame size changes. libvpx supports shrinking frame sizes without tearing down the encoder, but growing frames sizes still requires a full tear-down and re-creation. Most of this change involves adding extensive unit testing to confirm media/cast is now capable of handling variable frames sizes end-to-end. In addition, the cast_sender_app and cast_receiver_app diagnostic tools have been updated. An upcoming change will eliminate the width and height properties from media::cast::VideoSenderConfig, which are both being ignored now. BUG=451277 Committed: https://crrev.com/dbba1332d2d3c6d03d0e86f5dd72164b38b11442 Cr-Commit-Position: refs/heads/master@{#314196}

Patch Set 1 : #

Total comments: 8

Patch Set 2 : Addressed hubbe's comments, plus rebase. #

Patch Set 3 : Add build dependency for gfx::Size::GetArea(). #

Unified diffs Side-by-side diffs Delta from patch set Stats (+566 lines, -351 lines) Patch
M media/cast/BUILD.gn View 1 2 1 chunk +1 line, -0 lines 0 comments Download
M media/cast/cast.gyp View 1 2 1 chunk +1 line, -0 lines 0 comments Download
M media/cast/receiver/video_decoder_unittest.cc View 6 chunks +50 lines, -13 lines 0 comments Download
M media/cast/sender/external_video_encoder.h View 1 1 chunk +1 line, -0 lines 0 comments Download
M media/cast/sender/external_video_encoder.cc View 1 1 chunk +4 lines, -0 lines 0 comments Download
M media/cast/sender/fake_software_video_encoder.h View 2 chunks +2 lines, -0 lines 0 comments Download
M media/cast/sender/fake_software_video_encoder.cc View 1 chunk +5 lines, -0 lines 0 comments Download
M media/cast/sender/h264_vt_encoder.h View 1 1 chunk +1 line, -0 lines 0 comments Download
M media/cast/sender/h264_vt_encoder.cc View 1 1 chunk +4 lines, -0 lines 0 comments Download
M media/cast/sender/video_encoder.h View 1 1 chunk +4 lines, -0 lines 0 comments Download
M media/cast/sender/video_encoder_impl.h View 1 chunk +3 lines, -1 line 0 comments Download
M media/cast/sender/video_encoder_impl.cc View 3 chunks +20 lines, -1 line 0 comments Download
M media/cast/sender/video_encoder_impl_unittest.cc View 1 1 chunk +239 lines, -152 lines 0 comments Download
M media/cast/sender/video_sender.cc View 1 1 chunk +2 lines, -8 lines 0 comments Download
M media/cast/sender/vp8_encoder.h View 3 chunks +13 lines, -5 lines 0 comments Download
M media/cast/sender/vp8_encoder.cc View 10 chunks +69 lines, -38 lines 0 comments Download
M media/cast/test/fake_media_source.h View 3 chunks +9 lines, -0 lines 0 comments Download
M media/cast/test/fake_media_source.cc View 9 chunks +54 lines, -38 lines 0 comments Download
M media/cast/test/linux_output_window.cc View 3 chunks +25 lines, -14 lines 0 comments Download
M media/cast/test/sender.cc View 7 chunks +37 lines, -70 lines 0 comments Download
M media/cast/test/simulator.cc View 2 chunks +6 lines, -6 lines 0 comments Download
M media/cast/test/utility/video_utility.h View 1 chunk +2 lines, -1 line 0 comments Download
M media/cast/test/utility/video_utility.cc View 2 chunks +14 lines, -4 lines 0 comments Download

Messages

Total messages: 15 (5 generated)
miu
hubbe: PTAL
5 years, 10 months ago (2015-01-29 02:46:35 UTC) #3
hubbe
lgtm https://codereview.chromium.org/877393003/diff/20001/media/cast/sender/video_encoder.h File media/cast/sender/video_encoder.h (right): https://codereview.chromium.org/877393003/diff/20001/media/cast/sender/video_encoder.h#newcode31 media/cast/sender/video_encoder.h:31: virtual bool CanEncodeVariedFrameSizes() const; I think it would ...
5 years, 10 months ago (2015-01-31 00:55:51 UTC) #4
miu
Thanks for the review. Addressed all comments: https://codereview.chromium.org/877393003/diff/20001/media/cast/sender/video_encoder.h File media/cast/sender/video_encoder.h (right): https://codereview.chromium.org/877393003/diff/20001/media/cast/sender/video_encoder.h#newcode31 media/cast/sender/video_encoder.h:31: virtual bool ...
5 years, 10 months ago (2015-01-31 04:53:04 UTC) #5
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/877393003/40001
5 years, 10 months ago (2015-01-31 04:54:20 UTC) #7
commit-bot: I haz the power
Try jobs failed on following builders: linux_chromium_gn_dbg on tryserver.chromium.linux (http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_gn_dbg/builds/38153)
5 years, 10 months ago (2015-01-31 05:06:47 UTC) #9
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/877393003/60001
5 years, 10 months ago (2015-02-02 20:04:52 UTC) #11
commit-bot: I haz the power
Committed patchset #3 (id:60001)
5 years, 10 months ago (2015-02-02 21:56:59 UTC) #12
commit-bot: I haz the power
Patchset 3 (id:??) landed as https://crrev.com/dbba1332d2d3c6d03d0e86f5dd72164b38b11442 Cr-Commit-Position: refs/heads/master@{#314196}
5 years, 10 months ago (2015-02-02 21:57:57 UTC) #13
Lei Zhang
A revert of this CL (patchset #3 id:60001) has been created in https://codereview.chromium.org/899583002/ by thestig@chromium.org. ...
5 years, 10 months ago (2015-02-03 02:13:24 UTC) #14
Lei Zhang
5 years, 10 months ago (2015-02-03 02:14:32 UTC) #15
Message was sent while issue was closed.
http://build.chromium.org/p/chromium.memory.fyi/builders/Linux%20MSan%20Tests...
http://build.chromium.org/p/chromium.memory.fyi/builders/Linux%20MSan%20Tests...

[ RUN      ] End2EndTest.DropEveryOtherFrame3Buffers
[14225:14225:0202/144214:561095917:WARNING:cast_transport_sender_impl.cc(165)]
Unsafe to send audio with encryption DISABLED.
[14225:14225:0202/144214:561096233:WARNING:cast_transport_sender_impl.cc(204)]
Unsafe to send video with encryption DISABLED.
==14225== WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x7f610bdad9a3 in
media::cast::Vp8Encoder::LatestFrameIdToReference(unsigned int)
media/cast/sender/vp8_encoder.cc:453:9
    #1 0x7f610bda0bba in media::cast::(anonymous
namespace)::EncodeVideoFrameOnEncoderThread(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::SoftwareVideoEncoder*, scoped_refptr\u003Cmedia::VideoFrame>
const&, base::TimeTicks const&,
media::cast::VideoEncoderImpl::CodecDynamicConfig const&,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)> const&)
media/cast/sender/video_encoder_impl.cc:42:3
    #2 0x7f610bda1597 in Run base/bind_internal.h:166:12
    #3 0x7f610bda1597 in base::internal::InvokeHelper\u003Cfalse, void,
base::internal::RunnableAdapter\u003Cvoid
(*)(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::SoftwareVideoEncoder*, scoped_refptr\u003Cmedia::VideoFrame>
const&, base::TimeTicks const&,
media::cast::VideoEncoderImpl::CodecDynamicConfig const&,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)> const&)>, void
(media::cast::CastEnvironment*, media::cast::SoftwareVideoEncoder* const&,
media::VideoFrame*, base::TimeTicks const&,
media::cast::VideoEncoderImpl::CodecDynamicConfig const&,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)>
const&)>::MakeItSo(base::internal::RunnableAdapter\u003Cvoid
(*)(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::SoftwareVideoEncoder*, scoped_refptr\u003Cmedia::VideoFrame>
const&, base::TimeTicks const&,
media::cast::VideoEncoderImpl::CodecDynamicConfig const&,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)> const&)>,
media::cast::CastEnvironment*, media::cast::SoftwareVideoEncoder* const&,
media::VideoFrame*, base::TimeTicks const&,
media::cast::VideoEncoderImpl::CodecDynamicConfig const&,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)> const&)
base/bind_internal.h:381:0
    #4 0x7f610bda12c0 in base::internal::Invoker\u003C6,
base::internal::BindState\u003Cbase::internal::RunnableAdapter\u003Cvoid
(*)(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::SoftwareVideoEncoder*, scoped_refptr\u003Cmedia::VideoFrame>
const&, base::TimeTicks const&,
media::cast::VideoEncoderImpl::CodecDynamicConfig const&,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)> const&)>, void
(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::SoftwareVideoEncoder*, scoped_refptr\u003Cmedia::VideoFrame>
const&, base::TimeTicks const&,
media::cast::VideoEncoderImpl::CodecDynamicConfig const&,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)> const&), void
(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::SoftwareVideoEncoder*, scoped_refptr\u003Cmedia::VideoFrame>,
base::TimeTicks, media::cast::VideoEncoderImpl::CodecDynamicConfig,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)>)>, void
(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::SoftwareVideoEncoder*, scoped_refptr\u003Cmedia::VideoFrame>
const&, base::TimeTicks const&,
media::cast::VideoEncoderImpl::CodecDynamicConfig const&,
base::Callback\u003Cvoid (scoped_ptr\u003Cmedia::cast::EncodedFrame,
base::DefaultDeleter\u003Cmedia::cast::EncodedFrame> >)>
const&)>::Run(base::internal::BindStateBase*) base/bind_internal.h:1424:12
    #5 0x7f610bc6d883 in Run base/callback.h:396:12
    #6 0x7f610bc6d883 in
media::cast::test::FakeSingleThreadTaskRunner::Sleep(base::TimeDelta)
media/cast/test/fake_single_thread_task_runner.cc:85:0
    #7 0x7f610bc3bf2a in RunTasks media/cast/test/end2end_unittest.cc:694:5
    #8 0x7f610bc3bf2a in
media::cast::End2EndTest_DropEveryOtherFrame3Buffers_Test::TestBody()
media/cast/test/end2end_unittest.cc:1056:0
    #9 0x7f610be6e55f in HandleExceptionsInMethodIfSupported\u003Ctesting::Test,
void> testing/gtest/src/gtest.cc:2420:12
    #10 0x7f610be6e55f in testing::Test::Run() testing/gtest/src/gtest.cc:2436:0
    #11 0x7f610be72de0 in testing::TestInfo::Run()
testing/gtest/src/gtest.cc:2612:5
    #12 0x7f610be74845 in testing::TestCase::Run()
testing/gtest/src/gtest.cc:2730:5
    #13 0x7f610be96cfb in testing::internal::UnitTestImpl::RunAllTests()
testing/gtest/src/gtest.cc:4602:11
    #14 0x7f610be95bfe in
HandleExceptionsInMethodIfSupported\u003Ctesting::internal::UnitTestImpl, bool>
testing/gtest/src/gtest.cc:2420:12
    #15 0x7f610be95bfe in testing::UnitTest::Run()
testing/gtest/src/gtest.cc:4220:0
    #16 0x7f610bdefa16 in RUN_ALL_TESTS
testing/gtest/include/gtest/gtest.h:2326:10
    #17 0x7f610bdefa16 in base::TestSuite::Run() base/test/test_suite.cc:222:0
    #18 0x7f610bddf0aa in Run base/callback.h:396:12
    #19 0x7f610bddf0aa in base::(anonymous
namespace)::LaunchUnitTestsInternal(base::Callback\u003Cint ()> const&, int,
bool, base::Callback\u003Cvoid ()> const&)
base/test/launcher/unit_test_launcher.cc:181:0
    #20 0x7f610bdde663 in base::LaunchUnitTests(int, char**,
base::Callback\u003Cint ()> const&)
base/test/launcher/unit_test_launcher.cc:423:10
    #21 0x7f610b9675da in main media/base/run_all_unittests.cc:51:10

  Uninitialized value was created by a heap allocation
    #0 0x7f610b966019 in operator new(unsigned long) ??:0:0
    #1 0x7f610bd9ee58 in
media::cast::VideoEncoderImpl::VideoEncoderImpl(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::VideoSenderConfig const&, base::Callback\u003Cvoid
(media::cast::CastInitializationStatus)> const&)
media/cast/sender/video_encoder_impl.cc:62:5
    #2 0x7f610bda35f9 in
media::cast::VideoSender::VideoSender(scoped_refptr\u003Cmedia::cast::CastEnvironment>,
media::cast::VideoSenderConfig const&, base::Callback\u003Cvoid
(media::cast::CastInitializationStatus)> const&, base::Callback\u003Cvoid
(base::Callback\u003Cvoid (scoped_refptr\u003Cbase::SingleThreadTaskRunner>,
scoped_ptr\u003Cmedia::VideoEncodeAccelerator,
base::DefaultDeleter\u003Cmedia::VideoEncodeAccelerator> >)> const&)> const&,
base::Callback\u003Cvoid (unsigned long, base::Callback\u003Cvoid
(scoped_ptr\u003Cbase::SharedMemory,
base::DefaultDeleter\u003Cbase::SharedMemory> >)> const&)> const&,
media::cast::CastTransportSender*, base::Callback\u003Cvoid (base::TimeDelta)>
const&) media/cast/sender/video_sender.cc:103:5
    #3 0x7f610bd6c23f in
media::cast::CastSenderImpl::InitializeVideo(media::cast::VideoSenderConfig
const&, base::Callback\u003Cvoid (media::cast::CastInitializationStatus)>
const&, base::Callback\u003Cvoid (base::Callback\u003Cvoid
(scoped_refptr\u003Cbase::SingleThreadTaskRunner>,
scoped_ptr\u003Cmedia::VideoEncodeAccelerator,
base::DefaultDeleter\u003Cmedia::VideoEncodeAccelerator> >)> const&)> const&,
base::Callback\u003Cvoid (unsigned long, base::Callback\u003Cvoid
(scoped_ptr\u003Cbase::SharedMemory,
base::DefaultDeleter\u003Cbase::SharedMemory> >)> const&)> const&)
media/cast/cast_sender_impl.cc:141:3
    #4 0x7f610bc2d6cb in media::cast::End2EndTest::Create()
media/cast/test/end2end_unittest.cc:629:5
    #5 0x7f610bc3b75d in
media::cast::End2EndTest_DropEveryOtherFrame3Buffers_Test::TestBody()
media/cast/test/end2end_unittest.cc:1031:3
    #6 0x7f610be6e55f in HandleExceptionsInMethodIfSupported\u003Ctesting::Test,
void> testing/gtest/src/gtest.cc:2420:12
    #7 0x7f610be6e55f in testing::Test::Run() testing/gtest/src/gtest.cc:2436:0
    #8 0x7f610be72de0 in testing::TestInfo::Run()
testing/gtest/src/gtest.cc:2612:5
    #9 0x7f610be74845 in testing::TestCase::Run()
testing/gtest/src/gtest.cc:2730:5
    #10 0x7f610be96cfb in testing::internal::UnitTestImpl::RunAllTests()
testing/gtest/src/gtest.cc:4602:11
    #11 0x7f610be95bfe in
HandleExceptionsInMethodIfSupported\u003Ctesting::internal::UnitTestImpl, bool>
testing/gtest/src/gtest.cc:2420:12
    #12 0x7f610be95bfe in testing::UnitTest::Run()
testing/gtest/src/gtest.cc:4220:0
    #13 0x7f610bdefa16 in RUN_ALL_TESTS
testing/gtest/include/gtest/gtest.h:2326:10
    #14 0x7f610bdefa16 in base::TestSuite::Run() base/test/test_suite.cc:222:0
    #15 0x7f610bddf0aa in Run base/callback.h:396:12
    #16 0x7f610bddf0aa in base::(anonymous
namespace)::LaunchUnitTestsInternal(base::Callback\u003Cint ()> const&, int,
bool, base::Callback\u003Cvoid ()> const&)
base/test/launcher/unit_test_launcher.cc:181:0
    #17 0x7f610bdde663 in base::LaunchUnitTests(int, char**,
base::Callback\u003Cint ()> const&)
base/test/launcher/unit_test_launcher.cc:423:10

Powered by Google App Engine
This is Rietveld 408576698