From 47a3fb977dd5f8e744d904285d0d6045bd315955 Mon Sep 17 00:00:00 2001 From: Kongqun Yang Date: Wed, 15 Jun 2016 17:55:38 -0700 Subject: [PATCH] Fix 'senc' bug when encrypting mp4:vp9 with superframe Although superframe index is not encrypted, it should still be inserted into subsamples list (with cipher_bytes as 0). Change-Id: I06b38f8333a22a31a71cd67e0412218dd3aaa5c3 --- packager/media/formats/mp4/encrypting_fragmenter.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packager/media/formats/mp4/encrypting_fragmenter.cc b/packager/media/formats/mp4/encrypting_fragmenter.cc index d54dcced06..7300586bf8 100644 --- a/packager/media/formats/mp4/encrypting_fragmenter.cc +++ b/packager/media/formats/mp4/encrypting_fragmenter.cc @@ -285,6 +285,16 @@ Status EncryptingFragmenter::EncryptSample(scoped_refptr sample) { EncryptBytes(data + subsample.clear_bytes, subsample.cipher_bytes); data += frame.frame_size; } + // Add subsample for the superframe index if exists. + if (is_superframe) { + size_t index_size = sample->data() + sample->data_size() - data; + DCHECK_LE(index_size, 2 + vpx_frames.size() * 4); + DCHECK_GE(index_size, 2 + vpx_frames.size() * 1); + SubsampleEntry subsample; + subsample.clear_bytes = index_size; + subsample.cipher_bytes = 0; + sample_encryption_entry.subsamples.push_back(subsample); + } } else { const Nalu::CodecType nalu_type = (video_codec_ == kCodecHVC1 || video_codec_ == kCodecHEV1) @@ -341,6 +351,8 @@ Status EncryptingFragmenter::EncryptSample(scoped_refptr sample) { AddSubsamples(accumulated_clear_bytes, 0, &sample_encryption_entry.subsamples); } + DCHECK_EQ(sample_encryption_entry.GetTotalSizeOfSubsamples(), + sample->data_size()); // The length of per-sample auxiliary datum, defined in CENC ch. 7. traf()->auxiliary_size.sample_info_sizes.push_back(