| Index: media/formats/mp4/mp4_stream_parser.cc
|
| diff --git a/media/formats/mp4/mp4_stream_parser.cc b/media/formats/mp4/mp4_stream_parser.cc
|
| index 0c550f76da49da8d9c954745c35d648d488a0550..d4f63cbd3b76b4d01c8144e564a7bee685791409 100644
|
| --- a/media/formats/mp4/mp4_stream_parser.cc
|
| +++ b/media/formats/mp4/mp4_stream_parser.cc
|
| @@ -42,27 +42,28 @@ MP4StreamParser::MP4StreamParser(const std::set<int>& audio_object_types,
|
|
|
| MP4StreamParser::~MP4StreamParser() {}
|
|
|
| -void MP4StreamParser::Init(const InitCB& init_cb,
|
| - const NewConfigCB& config_cb,
|
| - const NewBuffersCB& new_buffers_cb,
|
| - bool /* ignore_text_tracks */ ,
|
| - const NeedKeyCB& need_key_cb,
|
| - const NewMediaSegmentCB& new_segment_cb,
|
| - const base::Closure& end_of_segment_cb,
|
| - const LogCB& log_cb) {
|
| +void MP4StreamParser::Init(
|
| + const InitCB& init_cb,
|
| + const NewConfigCB& config_cb,
|
| + const NewBuffersCB& new_buffers_cb,
|
| + bool /* ignore_text_tracks */,
|
| + const EncryptedMediaInitDataCB& encrypted_media_init_data_cb,
|
| + const NewMediaSegmentCB& new_segment_cb,
|
| + const base::Closure& end_of_segment_cb,
|
| + const LogCB& log_cb) {
|
| DCHECK_EQ(state_, kWaitingForInit);
|
| DCHECK(init_cb_.is_null());
|
| DCHECK(!init_cb.is_null());
|
| DCHECK(!config_cb.is_null());
|
| DCHECK(!new_buffers_cb.is_null());
|
| - DCHECK(!need_key_cb.is_null());
|
| + DCHECK(!encrypted_media_init_data_cb.is_null());
|
| DCHECK(!end_of_segment_cb.is_null());
|
|
|
| ChangeState(kParsingBoxes);
|
| init_cb_ = init_cb;
|
| config_cb_ = config_cb;
|
| new_buffers_cb_ = new_buffers_cb;
|
| - need_key_cb_ = need_key_cb;
|
| + encrypted_media_init_data_cb_ = encrypted_media_init_data_cb;
|
| new_segment_cb_ = new_segment_cb;
|
| end_of_segment_cb_ = end_of_segment_cb;
|
| log_cb_ = log_cb;
|
| @@ -316,7 +317,9 @@ bool MP4StreamParser::ParseMoov(BoxReader* reader) {
|
| if (!init_cb_.is_null())
|
| base::ResetAndReturn(&init_cb_).Run(true, params);
|
|
|
| - EmitNeedKeyIfNecessary(moov_->pssh);
|
| + if (!moov_->pssh.empty())
|
| + OnEncryptedMediaInitData(moov_->pssh);
|
| +
|
| return true;
|
| }
|
|
|
| @@ -328,20 +331,20 @@ bool MP4StreamParser::ParseMoof(BoxReader* reader) {
|
| runs_.reset(new TrackRunIterator(moov_.get(), log_cb_));
|
| RCHECK(runs_->Init(moof));
|
| RCHECK(ComputeHighestEndOffset(moof));
|
| - EmitNeedKeyIfNecessary(moof.pssh);
|
| +
|
| + if (!moof.pssh.empty())
|
| + OnEncryptedMediaInitData(moof.pssh);
|
| +
|
| new_segment_cb_.Run();
|
| ChangeState(kWaitingForSampleData);
|
| return true;
|
| }
|
|
|
| -void MP4StreamParser::EmitNeedKeyIfNecessary(
|
| +void MP4StreamParser::OnEncryptedMediaInitData(
|
| const std::vector<ProtectionSystemSpecificHeader>& headers) {
|
| // TODO(strobe): ensure that the value of init_data (all PSSH headers
|
| // concatenated in arbitrary order) matches the EME spec.
|
| // See https://www.w3.org/Bugs/Public/show_bug.cgi?id=17673.
|
| - if (headers.empty())
|
| - return;
|
| -
|
| size_t total_size = 0;
|
| for (size_t i = 0; i < headers.size(); i++)
|
| total_size += headers[i].raw_box.size();
|
| @@ -353,7 +356,7 @@ void MP4StreamParser::EmitNeedKeyIfNecessary(
|
| headers[i].raw_box.size());
|
| pos += headers[i].raw_box.size();
|
| }
|
| - need_key_cb_.Run(kCencInitDataType, init_data);
|
| + encrypted_media_init_data_cb_.Run(kCencInitDataType, init_data);
|
| }
|
|
|
| bool MP4StreamParser::PrepareAVCBuffer(
|
|
|