mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-07-28 17:25:05 +00:00
qtdemux: also push buffers without encryption info instead of dropping them
Test "17. PlayReadyH264Video" in YouTube leanback EME conformance tests 2016 for H.264[1] uses a media file[2] with cenc encryption whose first two 'moof' boxes have no encryption information (no 'saiz' and 'saio' boxes). Those boxes are actually not encrypted and the current qtdemux implementation was just dropping them, breaking the test use case. This patch detects those kind of situations and just lets the unencrypted buffers pass. Of course, this needs some collaboration by the decryptors, which should also do the same and not to try to decrypt those clear buffers. [1] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/2016.html?test_type=encryptedmedia-test&webm=false [2] http://yt-dash-mse-test.commondatastorage.googleapis.com/unit-tests/media/oops_cenc-20121114-142.mp4 https://bugzilla.gnome.org/show_bug.cgi?id=770107
This commit is contained in:
parent
b04583d9ed
commit
844423ff99
|
@ -5783,11 +5783,9 @@ gst_qtdemux_decorate_and_push_buffer (GstQTDemux * qtdemux,
|
|||
}
|
||||
|
||||
if (info->crypto_info == NULL) {
|
||||
GST_DEBUG_OBJECT (qtdemux, "cenc metadata hasn't been parsed yet");
|
||||
gst_buffer_unref (buf);
|
||||
goto exit;
|
||||
}
|
||||
|
||||
GST_DEBUG_OBJECT (qtdemux,
|
||||
"cenc metadata hasn't been parsed yet, pushing buffer as if it wasn't encrypted");
|
||||
} else {
|
||||
/* The end of the crypto_info array matches our n_samples position,
|
||||
* so count backward from there */
|
||||
index = stream->sample_index - stream->n_samples + info->crypto_info->len;
|
||||
|
@ -5798,12 +5796,14 @@ gst_qtdemux_decorate_and_push_buffer (GstQTDemux * qtdemux,
|
|||
GST_LOG_OBJECT (qtdemux, "attaching cenc metadata [%u/%u]", index,
|
||||
info->crypto_info->len);
|
||||
if (!crypto_info || !gst_buffer_add_protection_meta (buf, crypto_info))
|
||||
GST_ERROR_OBJECT (qtdemux, "failed to attach cenc metadata to buffer");
|
||||
GST_ERROR_OBJECT (qtdemux,
|
||||
"failed to attach cenc metadata to buffer");
|
||||
} else {
|
||||
GST_INFO_OBJECT (qtdemux, "No crypto info with index %d and sample %d",
|
||||
index, stream->sample_index);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (stream->alignment > 1)
|
||||
buf = gst_qtdemux_align_buffer (qtdemux, buf, stream->alignment);
|
||||
|
|
Loading…
Reference in a new issue