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

Issue 276573002: Add gapless playback support for AAC playback. (Closed)

Created:
6 years, 7 months ago by DaleCurtis
Modified:
6 years, 6 months ago
CC:
chromium-reviews, feature-media-reviews_chromium.org
Visibility:
Public.

Description

Add gapless playback support for AAC playback. Gapless support for AAC is similar to MP3 but unlike MP3 which only has padding in the first frame, AAC may require discarding data across multiple frames. Unfortunately this means we can't just discard the padding frames wholesale without changing what's decoded from the first non-padding frame. Testing reveals we need to decode the padding frame prior to the first non-padding frame in order to correctly decode the non-padding frame. We accomplish this by introducing the concept of a preroll buffer which is to be played out prior to the current buffer but must be entirely discarded. Luckily this is easily done with the infrastructure in place for the gapless MP3 playback! While we need to support post splice buffers with preroll for gapless playback, for simplicity, pre-splice buffers are not allowed to have preroll. In sum, this change: - Adds SetPrerollBuffer() and preroll_buffer() to the StreamParserBuffer. - Refactors splice frame handling into a new HandleNextBufferWithSpliceFrame() method, introduces HandleNextBufferWithPreroll() - Modifies the frame processor to use the frame prior to the partial append window discard as the preroll. BUG=371633 TEST=new unittests! R=wolenetz@chromium.org Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=274073

Patch Set 1 : No config change! #

Patch Set 2 : Now with tests! #

Total comments: 37

Patch Set 3 : Rebase. Comments. #

Total comments: 49

Patch Set 4 : Comments. #

Patch Set 5 : Rebase. Add config change test. #

Total comments: 2

Patch Set 6 : Rebase. Comments. #

Total comments: 20

Patch Set 7 : Comments. #

Patch Set 8 : Fix per offline comments. #

Total comments: 2

Patch Set 9 : Comments. #

Patch Set 10 : Fix msvc error. #

Unified diffs Side-by-side diffs Delta from patch set Stats (+485 lines, -143 lines) Patch
M media/base/decoder_buffer.h View 1 2 1 chunk +4 lines, -5 lines 0 comments Download
M media/base/decoder_buffer.cc View 1 2 1 chunk +5 lines, -0 lines 0 comments Download
M media/base/stream_parser_buffer.h View 1 2 4 chunks +21 lines, -3 lines 0 comments Download
M media/base/stream_parser_buffer.cc View 1 2 3 4 5 5 chunks +40 lines, -1 line 0 comments Download
M media/filters/chunk_demuxer.cc View 1 2 1 chunk +2 lines, -0 lines 0 comments Download
M media/filters/chunk_demuxer_unittest.cc View 1 2 3 4 5 6 7 8 7 chunks +88 lines, -12 lines 0 comments Download
M media/filters/frame_processor.h View 1 2 1 chunk +1 line, -1 line 0 comments Download
M media/filters/frame_processor.cc View 1 2 3 4 5 6 7 5 chunks +41 lines, -47 lines 0 comments Download
M media/filters/frame_processor_base.h View 1 2 3 4 5 6 3 chunks +30 lines, -0 lines 0 comments Download
M media/filters/frame_processor_base.cc View 1 2 3 4 5 1 chunk +66 lines, -0 lines 0 comments Download
M media/filters/legacy_frame_processor.cc View 1 2 3 4 5 6 7 2 chunks +33 lines, -37 lines 0 comments Download
M media/filters/source_buffer_stream.h View 1 2 3 chunks +22 lines, -8 lines 0 comments Download
M media/filters/source_buffer_stream.cc View 1 2 3 4 5 6 7 8 9 11 chunks +73 lines, -28 lines 0 comments Download
M media/filters/source_buffer_stream_unittest.cc View 1 2 5 chunks +59 lines, -1 line 0 comments Download

Messages

Total messages: 28 (0 generated)
DaleCurtis
Please take a look when you have time, but don't worry about looking at this ...
6 years, 7 months ago (2014-05-08 22:42:42 UTC) #1
acolwell GONE FROM CHROMIUM
https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc#newcode184 media/base/stream_parser_buffer.cc:184: preroll_buffer_->set_timestamp(timestamp()); This seems hacky to do all this setting ...
6 years, 7 months ago (2014-05-16 17:01:10 UTC) #2
DaleCurtis
https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc#newcode184 media/base/stream_parser_buffer.cc:184: preroll_buffer_->set_timestamp(timestamp()); On 2014/05/16 17:01:11, acolwell wrote: > This seems ...
6 years, 7 months ago (2014-05-16 17:48:59 UTC) #3
acolwell GONE FROM CHROMIUM
https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc#newcode184 media/base/stream_parser_buffer.cc:184: preroll_buffer_->set_timestamp(timestamp()); On 2014/05/16 17:48:59, DaleCurtis wrote: > On 2014/05/16 ...
6 years, 7 months ago (2014-05-16 20:26:05 UTC) #4
DaleCurtis
https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc#newcode184 media/base/stream_parser_buffer.cc:184: preroll_buffer_->set_timestamp(timestamp()); On 2014/05/16 20:26:05, acolwell wrote: > On 2014/05/16 ...
6 years, 7 months ago (2014-05-17 00:14:10 UTC) #5
wolenetz
https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc#newcode167 media/base/stream_parser_buffer.cc:167: DCHECK(preroll_buffer->timestamp() < timestamp()); nit: Is this strictly always true, ...
6 years, 7 months ago (2014-05-17 00:41:18 UTC) #6
wolenetz
On 2014/05/17 00:41:18, wolenetz wrote: > https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc > File media/base/stream_parser_buffer.cc (right): > > https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc#newcode167 > ...
6 years, 7 months ago (2014-05-17 00:42:41 UTC) #7
DaleCurtis
https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc#newcode167 media/base/stream_parser_buffer.cc:167: DCHECK(preroll_buffer->timestamp() < timestamp()); On 2014/05/17 00:41:17, wolenetz wrote: > ...
6 years, 7 months ago (2014-05-17 00:55:41 UTC) #8
DaleCurtis
PTAL. All comments addressed. https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/60001/media/base/stream_parser_buffer.cc#newcode167 media/base/stream_parser_buffer.cc:167: DCHECK(preroll_buffer->timestamp() < timestamp()); On 2014/05/17 ...
6 years, 7 months ago (2014-05-22 23:58:57 UTC) #9
acolwell GONE FROM CHROMIUM
looks pretty good. Just a few comments https://codereview.chromium.org/276573002/diff/80001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/80001/media/base/stream_parser_buffer.cc#newcode176 media/base/stream_parser_buffer.cc:176: preroll_buffer_->track_id_ = ...
6 years, 7 months ago (2014-05-23 17:27:30 UTC) #10
wolenetz
looking pretty good: https://codereview.chromium.org/276573002/diff/60001/media/filters/source_buffer_stream.cc File media/filters/source_buffer_stream.cc (right): https://codereview.chromium.org/276573002/diff/60001/media/filters/source_buffer_stream.cc#newcode1227 media/filters/source_buffer_stream.cc:1227: DCHECK(pending_buffer_->get_splice_buffers().empty()); On 2014/05/22 23:58:57, DaleCurtis wrote: ...
6 years, 7 months ago (2014-05-23 19:59:44 UTC) #11
DaleCurtis
https://codereview.chromium.org/276573002/diff/80001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): https://codereview.chromium.org/276573002/diff/80001/media/base/stream_parser_buffer.cc#newcode171 media/base/stream_parser_buffer.cc:171: DCHECK(preroll_buffer->timestamp() <= timestamp()); On 2014/05/23 19:59:45, wolenetz wrote: > ...
6 years, 7 months ago (2014-05-23 21:46:26 UTC) #12
wolenetz
just a comment reply for now: https://codereview.chromium.org/276573002/diff/80001/media/filters/frame_processor_base.h File media/filters/frame_processor_base.h (right): https://codereview.chromium.org/276573002/diff/80001/media/filters/frame_processor_base.h#newcode181 media/filters/frame_processor_base.h:181: // the extents ...
6 years, 7 months ago (2014-05-23 22:03:47 UTC) #13
DaleCurtis
https://codereview.chromium.org/276573002/diff/80001/media/filters/frame_processor_base.h File media/filters/frame_processor_base.h (right): https://codereview.chromium.org/276573002/diff/80001/media/filters/frame_processor_base.h#newcode181 media/filters/frame_processor_base.h:181: // the extents of |buffer|. On 2014/05/23 22:03:48, wolenetz ...
6 years, 7 months ago (2014-05-23 22:11:38 UTC) #14
DaleCurtis
https://codereview.chromium.org/276573002/diff/80001/media/filters/chunk_demuxer.cc File media/filters/chunk_demuxer.cc (right): https://codereview.chromium.org/276573002/diff/80001/media/filters/chunk_demuxer.cc#newcode571 media/filters/chunk_demuxer.cc:571: frame_processor_->clear_audio_preroll_buffer(); On 2014/05/23 21:46:26, DaleCurtis wrote: > On 2014/05/23 ...
6 years, 7 months ago (2014-05-24 00:43:33 UTC) #15
acolwell GONE FROM CHROMIUM
looks pretty good to me. Will leave final approval for Matt. https://codereview.chromium.org/276573002/diff/80001/media/base/stream_parser_buffer.cc File media/base/stream_parser_buffer.cc (right): ...
6 years, 7 months ago (2014-05-24 00:58:20 UTC) #16
DaleCurtis
Comments addressed. I also fixed the config change + append window test so that it ...
6 years, 7 months ago (2014-05-27 23:59:31 UTC) #17
wolenetz
looking pretty good. Just a couple comments and some nits: https://codereview.chromium.org/276573002/diff/180001/media/filters/chunk_demuxer_unittest.cc File media/filters/chunk_demuxer_unittest.cc (right): https://codereview.chromium.org/276573002/diff/180001/media/filters/chunk_demuxer_unittest.cc#newcode3089 ...
6 years, 6 months ago (2014-05-30 19:58:44 UTC) #18
wolenetz
Some further comments from offline chats. acolwell@, am I correct that sequence mode append window ...
6 years, 6 months ago (2014-05-30 20:45:12 UTC) #19
DaleCurtis
https://codereview.chromium.org/276573002/diff/180001/media/filters/chunk_demuxer_unittest.cc File media/filters/chunk_demuxer_unittest.cc (right): https://codereview.chromium.org/276573002/diff/180001/media/filters/chunk_demuxer_unittest.cc#newcode3089 media/filters/chunk_demuxer_unittest.cc:3089: // The first 50ms of the first buffer should ...
6 years, 6 months ago (2014-05-30 20:54:30 UTC) #20
wolenetz
lgtm % nit https://codereview.chromium.org/276573002/diff/180001/media/filters/frame_processor.cc File media/filters/frame_processor.cc (right): https://codereview.chromium.org/276573002/diff/180001/media/filters/frame_processor.cc#newcode287 media/filters/frame_processor.cc:287: if (!sequence_mode_) { On 2014/05/30 20:54:30, ...
6 years, 6 months ago (2014-05-30 22:31:41 UTC) #21
DaleCurtis
Thanks for review! https://codereview.chromium.org/276573002/diff/210001/media/filters/chunk_demuxer_unittest.cc File media/filters/chunk_demuxer_unittest.cc (right): https://codereview.chromium.org/276573002/diff/210001/media/filters/chunk_demuxer_unittest.cc#newcode3155 media/filters/chunk_demuxer_unittest.cc:3155: // TODO(wolenetz/acolwell): Remove this extra SetDuration ...
6 years, 6 months ago (2014-05-30 22:34:51 UTC) #22
DaleCurtis
The CQ bit was checked by dalecurtis@chromium.org
6 years, 6 months ago (2014-05-30 22:35:00 UTC) #23
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-status.appspot.com/cq/dalecurtis@chromium.org/276573002/230001
6 years, 6 months ago (2014-05-30 22:39:20 UTC) #24
wolenetz
https://codereview.chromium.org/276573002/diff/180001/media/filters/frame_processor.cc File media/filters/frame_processor.cc (right): https://codereview.chromium.org/276573002/diff/180001/media/filters/frame_processor.cc#newcode287 media/filters/frame_processor.cc:287: if (!sequence_mode_) { On 2014/05/30 22:31:42, wolenetz wrote: > ...
6 years, 6 months ago (2014-05-31 01:22:04 UTC) #25
DaleCurtis
The CQ bit was checked by dalecurtis@chromium.org
6 years, 6 months ago (2014-05-31 03:46:02 UTC) #26
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-status.appspot.com/cq/dalecurtis@chromium.org/276573002/250001
6 years, 6 months ago (2014-05-31 03:47:02 UTC) #27
DaleCurtis
6 years, 6 months ago (2014-05-31 22:27:27 UTC) #28
Message was sent while issue was closed.
Committed patchset #10 manually as r274073 (presubmit successful).

Powered by Google App Engine
This is Rietveld 408576698