MSE: Populate WebM missing duration with DefaultDuration, derived, or default
commitcde6f1bcc13489c18f123c6c3541fb96aef8cb79
authorwolenetz@chromium.org <wolenetz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Fri, 28 Mar 2014 20:03:57 +0000 (28 20:03 +0000)
committerwolenetz@chromium.org <wolenetz@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>
Fri, 28 Mar 2014 20:03:57 +0000 (28 20:03 +0000)
tree57e456bf5523bef897f449a87a596104856093ec
parentcb71bf9e465a4376707f4bdef75d648c53b0527d
MSE: Populate WebM missing duration with DefaultDuration, derived, or default

This change modifes WebM stream parser to estimate missing WebM frame
durations using the following logic:
1) If the frame was a BlockGroup, it should already have a duration. Use
it. (This is previous behavior; no other WebM frames previously had
duration.)
2) If the frame was a SimpleBlock, derive its duration as follows:
2a) If the frame's TrackEntry had a DefaultDuration, use that value
capped at a precision no greater than TimeCodes with TimeCodeScale
applied.
2b) Otherwise, if there is a subsequent frame in the cluster, set the
duration to the difference in timestamps.
2c) Otherwise, use the maximum frame duration for the track encountered
so far, if any.
2d) Otherwise, use a hardcoded value.
Note, 2b-2c, for WebM audio, ideally would be calculated based on the
track's codebook. This is left for a future CL.

Adds related WebM track parser unit tests. Adjusts
existing ChunkDemuxerTests, PipelineIntegrationTests, and
WebMClusterParserTests based on new duration logic.

R=acolwell@chromium.org
TEST=All media_unittests and http/tests/media layout tests pass locally on Linux
BUG=351166

Review URL: https://codereview.chromium.org/213253006

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260247 0039d316-1c4b-4281-b951-d872f2087c98
media/filters/chunk_demuxer_unittest.cc
media/filters/pipeline_integration_test.cc
media/formats/webm/webm_cluster_parser.cc
media/formats/webm/webm_cluster_parser.h
media/formats/webm/webm_cluster_parser_unittest.cc
media/formats/webm/webm_stream_parser.cc