Fixed subsample size adjustment in AVC AnnexB conversion
commita9fabb65b68a36a034b3aa5386f897a6d0a1e602
authorservolk <servolk@chromium.org>
Thu, 13 Aug 2015 22:15:24 +0000 (13 15:15 -0700)
committerCommit bot <commit-bot@chromium.org>
Thu, 13 Aug 2015 22:16:03 +0000 (13 22:16 +0000)
treeff6b34b37dc7d960a79963a844374e94b972ca35
parentce0fbef478ffe95f41e76bf6e85ff6b0072002ba
Fixed subsample size adjustment in AVC AnnexB conversion

This is a bugfix for crbug.com/519955: The code that updates subsample
sizes in MP4StreamParser::PrepareAVCBuffer is incorrect. It works
correctly only for cases when avc_config.length_size is 4 (which is
actually almost all real-life uses of this code) and when there is only
one NALU per subsample for cases when avc_config.length_size is 1 or 2.
For cases when avc_config.length_size is 1 or 2 and there are multiple
NALUs in some subsample, the calculations are incorrect, we actually
need to update subsample sizes based on how many NALUs were encountered
in each subsample (since AVC::ConvertFrameToAnnexB replaces NALU size
values read from mp4 container with 4-bytes AnnexB codes for each NALU).

BUG=519955

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

Cr-Commit-Position: refs/heads/master@{#343287}
media/formats/mp4/avc.cc
media/formats/mp4/avc.h
media/formats/mp4/avc_unittest.cc
media/formats/mp4/mp4_stream_parser.cc