On Fri, Sep 30, 2022 at 7:08 AM Richard Ayres
<[email protected]> wrote:
>
> We had an issue where ffmpeg was unable to unpack the EKLV of an encrypted 3D
> SMPTE DC MXF.
>
> The patch adds the SMPTE UL for EKLV packets
> (060e2b34.02040101.0d010301.027e0100), to mxfdec.c in order to unpack an EKLV
> packet found within an Encrypted SMPTE Digital Cinema MXF.
>
> Signed-off-by: Richard Ayres <[email protected]>
> ---
> libavformat/mxfdec.c | 5 ++++-
> 1 file changed, 4 insertions(+), 1 deletion(-)
>
> diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
> index badd2be224..ebd64b1c68 100644
> --- a/libavformat/mxfdec.c
> +++ b/libavformat/mxfdec.c
> @@ -343,6 +343,7 @@ static const uint8_t mxf_apple_coll_prefix[]
> = { 0x06,0x0e,0x2b,0x
> /* complete keys to match */
> static const uint8_t mxf_crypto_source_container_ul[] = {
> 0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x09,0x06,0x01,0x01,0x02,0x02,0x00,0x00,0x00
> };
> static const uint8_t mxf_encrypted_triplet_key[] = {
> 0x06,0x0e,0x2b,0x34,0x02,0x04,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x7e,0x01,0x00
> };
> +static const uint8_t mxf_encrypted_triplet_smpte_key[] = {
> 0x06,0x0e,0x2b,0x34,0x02,0x04,0x01,0x01,0x0d,0x01,0x03,0x01,0x02,0x7e,0x01,0x00
> };
> static const uint8_t mxf_encrypted_essence_container[] = {
> 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x07,0x0d,0x01,0x03,0x01,0x02,0x0b,0x01,0x00
> };
> static const uint8_t mxf_sony_mpeg4_extradata[] = {
> 0x06,0x0e,0x2b,0x34,0x04,0x01,0x01,0x01,0x0e,0x06,0x06,0x02,0x02,0x01,0x00,0x00
> };
> static const uint8_t mxf_ffv1_extradata[] = {
> 0x06,0x0e,0x2b,0x34,0x01,0x01,0x01,0x0e,0x04,0x01,0x06,0x0c,0x01,0x00,0x00,0x00
> }; // FFV1InitializationMetadata
> @@ -3738,6 +3739,7 @@ static int mxf_read_header(AVFormatContext *s)
> PRINT_KEY(s, "read header", klv.key);
> av_log(s, AV_LOG_TRACE, "size %"PRIu64" offset %#"PRIx64"\n",
> klv.length, klv.offset);
> if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key) ||
> + IS_KLV_KEY(klv.key, mxf_encrypted_triplet_smpte_key) ||
Calling one UL "mxf_encrypted_triplet_key" and the other
"mxf_encrypted_triplet_smpte_key" is misleading IMHO.
The only difference is the version byte, which should be ignored in
most, if not all, SMPTE UL comparisons.
I would instead use mxf_match_uid(), which ignores the version byte,
to compare the UL keys.
> IS_KLV_KEY(klv.key, mxf_essence_element_key) ||
> IS_KLV_KEY(klv.key, mxf_canopus_essence_element_key) ||
> IS_KLV_KEY(klv.key, mxf_avid_essence_element_key) ||
> @@ -3983,7 +3985,8 @@ static int mxf_read_packet(AVFormatContext *s, AVPacket
> *pkt)
> pos = klv.next_klv - klv.length;
> PRINT_KEY(s, "read packet", klv.key);
> av_log(s, AV_LOG_TRACE, "size %"PRIu64" offset %#"PRIx64"\n",
> klv.length, klv.offset);
> - if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key)) {
> + if (IS_KLV_KEY(klv.key, mxf_encrypted_triplet_key) ||
> + IS_KLV_KEY(klv.key, mxf_encrypted_triplet_smpte_key)) {
> ret = mxf_decrypt_triplet(s, pkt, &klv);
> if (ret < 0) {
> av_log(s, AV_LOG_ERROR, "invalid encoded triplet\n");
> --
> 2.25.1
>
> This e-mail and any attachments are intended only for use by the addressee(s)
> named herein and may contain confidential information. If you are not the
> intended recipient of this e-mail, you are hereby notified any dissemination,
> distribution or copying of this email and any attachments is strictly
> prohibited. If you receive this email in error, please immediately notify the
> sender by return email and permanently delete the original, any copy and any
> printout thereof. The integrity and security of e-mail cannot be guaranteed.
> _______________________________________________
> ffmpeg-devel mailing list
> [email protected]
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> [email protected] with subject "unsubscribe".
_______________________________________________
ffmpeg-devel mailing list
[email protected]
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
[email protected] with subject "unsubscribe".