diff mbox series

[FFmpeg-devel,2/2] avformat/mxfenc: fix DNxHD GC element_type

Message ID 20211214152743.57273-2-nicolas.gaullier@cji.paris
State Accepted
Commit dd7c0bc4f981f7113d7bef267cc1eca8d9fb10f1
Headers show
Series [FFmpeg-devel,1/2] avformat/mxfenc: fix DNxHD GC container_ul | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished
andriy/make_ppc success Make finished
andriy/make_fate_ppc success Make fate finished

Commit Message

Nicolas Gaullier Dec. 14, 2021, 3:27 p.m. UTC
The values for the essence element type were updated in the spec
from 0x05/0x06 (ST2019-4 2008) to 0x0C/0x0D (ST2019-4 2009).

Fixes ticket #6380.

Thanks-to: Philip de Nier <philip.denier@bbc.co.uk>
Thanks-to: Matthieu Bouron <matthieu.bouron@gmail.com>

Signed-off-by: Nicolas Gaullier <nicolas.gaullier@cji.paris>
---
 libavformat/mxfenc.c      | 9 ++++++++-
 tests/ref/lavf/mxf_opatom | 2 +-
 2 files changed, 9 insertions(+), 2 deletions(-)

Comments

Matthieu Bouron Dec. 14, 2021, 3:42 p.m. UTC | #1
On Tue, Dec 14, 2021 at 04:27:43PM +0100, Nicolas Gaullier wrote:
> The values for the essence element type were updated in the spec
> from 0x05/0x06 (ST2019-4 2008) to 0x0C/0x0D (ST2019-4 2009).
> 
> Fixes ticket #6380.
> 
> Thanks-to: Philip de Nier <philip.denier@bbc.co.uk>
> Thanks-to: Matthieu Bouron <matthieu.bouron@gmail.com>
> 
> Signed-off-by: Nicolas Gaullier <nicolas.gaullier@cji.paris>
> ---
>  libavformat/mxfenc.c      | 9 ++++++++-
>  tests/ref/lavf/mxf_opatom | 2 +-
>  2 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
> index 512baa45d3..bae41a774d 100644
> --- a/libavformat/mxfenc.c
> +++ b/libavformat/mxfenc.c
> @@ -32,6 +32,7 @@
>   * SMPTE 379M MXF Generic Container
>   * SMPTE 381M Mapping MPEG Streams into the MXF Generic Container
>   * SMPTE 422M Mapping JPEG 2000 Codestreams into the MXF Generic Container
> + * SMPTE ST2019-4 (2009 or later) Mapping VC-3 Coding Units into the MXF Generic Container
>   * SMPTE RP210: SMPTE Metadata Dictionary
>   * SMPTE RP224: Registry of SMPTE Universal Labels
>   */
> @@ -182,7 +183,7 @@ static const MXFContainerEssenceEntry mxf_essence_container_uls[] = {
>        mxf_write_cdci_desc },
>      // DNxHD
>      { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x0D,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
> -      { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
> +      { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x0C,0x00 },
>        { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x01,0x00,0x00 },
>        mxf_write_cdci_desc },
>      // JPEG2000
> @@ -2674,6 +2675,12 @@ static int mxf_init(AVFormatContext *s)
>  
>          memcpy(sc->track_essence_element_key, mxf_essence_container_uls[sc->index].element_ul, 15);
>          sc->track_essence_element_key[15] = present[sc->index];
> +        if (s->oformat == &ff_mxf_opatom_muxer && st->codecpar->codec_id == AV_CODEC_ID_DNXHD) {
> +            // clip-wrapping requires 0x0D per ST2019-4:2009 or 0x06 per previous version ST2019-4:2008
> +            // we choose to use 0x06 instead 0x0D to be compatible with AVID systems
> +            // and produce mxf files with the most relevant flavour for opatom
> +            sc->track_essence_element_key[14] = 0x06;
> +        }
>          PRINT_KEY(s, "track essence element key", sc->track_essence_element_key);
>  
>          if (!present[sc->index])
> diff --git a/tests/ref/lavf/mxf_opatom b/tests/ref/lavf/mxf_opatom
> index b818f26c36..e34cf2559e 100644
> --- a/tests/ref/lavf/mxf_opatom
> +++ b/tests/ref/lavf/mxf_opatom
> @@ -1,3 +1,3 @@
> -e558e50a94d88762e07ab8149aced7b9 *tests/data/lavf/lavf.mxf_opatom
> +aab6397829bd90f0c77a3f9fde53bb9c *tests/data/lavf/lavf.mxf_opatom
>  4717625 tests/data/lavf/lavf.mxf_opatom
>  tests/data/lavf/lavf.mxf_opatom CRC=0xf55aa22a
> -- 
> 2.34.0

LGTM, thanks.

Matthieu

[...]
Tomas Härdin Dec. 16, 2021, 12:07 p.m. UTC | #2
tis 2021-12-14 klockan 16:27 +0100 skrev Nicolas Gaullier:
> The values for the essence element type were updated in the spec
> from 0x05/0x06 (ST2019-4 2008) to 0x0C/0x0D (ST2019-4 2009).
> 
> Fixes ticket #6380.
> 
> Thanks-to: Philip de Nier <philip.denier@bbc.co.uk>
> Thanks-to: Matthieu Bouron <matthieu.bouron@gmail.com>
> 
> Signed-off-by: Nicolas Gaullier <nicolas.gaullier@cji.paris>
> ---
>  libavformat/mxfenc.c      | 9 ++++++++-
>  tests/ref/lavf/mxf_opatom | 2 +-
>  2 files changed, 9 insertions(+), 2 deletions(-)
> 
> diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
> index 512baa45d3..bae41a774d 100644
> --- a/libavformat/mxfenc.c
> +++ b/libavformat/mxfenc.c
> @@ -32,6 +32,7 @@
>   * SMPTE 379M MXF Generic Container
>   * SMPTE 381M Mapping MPEG Streams into the MXF Generic Container
>   * SMPTE 422M Mapping JPEG 2000 Codestreams into the MXF Generic
> Container
> + * SMPTE ST2019-4 (2009 or later) Mapping VC-3 Coding Units into the
> MXF Generic Container
>   * SMPTE RP210: SMPTE Metadata Dictionary
>   * SMPTE RP224: Registry of SMPTE Universal Labels
>   */
> @@ -182,7 +183,7 @@ static const MXFContainerEssenceEntry
> mxf_essence_container_uls[] = {
>        mxf_write_cdci_desc },
>      // DNxHD
>      { {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x0D,0x01,0x03,0x01,0x02,0x11
> ,0x01,0x00 },
> -      {
> 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01
> ,0x05,0x00 },
> +      {
> 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01
> ,0x0C,0x00 },
>        {
> 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x01
> ,0x00,0x00 },
>        mxf_write_cdci_desc },
>      // JPEG2000
> @@ -2674,6 +2675,12 @@ static int mxf_init(AVFormatContext *s)
>  
>          memcpy(sc->track_essence_element_key,
> mxf_essence_container_uls[sc->index].element_ul, 15);
>          sc->track_essence_element_key[15] = present[sc->index];
> +        if (s->oformat == &ff_mxf_opatom_muxer && st->codecpar-
> >codec_id == AV_CODEC_ID_DNXHD) {
> +            // clip-wrapping requires 0x0D per ST2019-4:2009 or 0x06
> per previous version ST2019-4:2008
> +            // we choose to use 0x06 instead 0x0D to be compatible
> with AVID systems
> +            // and produce mxf files with the most relevant flavour
> for opatom
> +            sc->track_essence_element_key[14] = 0x06;
> +        }
>          PRINT_KEY(s, "track essence element key", sc-
> >track_essence_element_key);
>  
>          if (!present[sc->index])
> diff --git a/tests/ref/lavf/mxf_opatom b/tests/ref/lavf/mxf_opatom
> index b818f26c36..e34cf2559e 100644
> --- a/tests/ref/lavf/mxf_opatom
> +++ b/tests/ref/lavf/mxf_opatom
> @@ -1,3 +1,3 @@
> -e558e50a94d88762e07ab8149aced7b9 *tests/data/lavf/lavf.mxf_opatom
> +aab6397829bd90f0c77a3f9fde53bb9c *tests/data/lavf/lavf.mxf_opatom
>  4717625 tests/data/lavf/lavf.mxf_opatom
>  tests/data/lavf/lavf.mxf_opatom CRC=0xf55aa22a

Should be fine based on previous discussion, and because Matthieu is
fine with it, being the one who added DNxHD support initially

/Tomas
diff mbox series

Patch

diff --git a/libavformat/mxfenc.c b/libavformat/mxfenc.c
index 512baa45d3..bae41a774d 100644
--- a/libavformat/mxfenc.c
+++ b/libavformat/mxfenc.c
@@ -32,6 +32,7 @@ 
  * SMPTE 379M MXF Generic Container
  * SMPTE 381M Mapping MPEG Streams into the MXF Generic Container
  * SMPTE 422M Mapping JPEG 2000 Codestreams into the MXF Generic Container
+ * SMPTE ST2019-4 (2009 or later) Mapping VC-3 Coding Units into the MXF Generic Container
  * SMPTE RP210: SMPTE Metadata Dictionary
  * SMPTE RP224: Registry of SMPTE Universal Labels
  */
@@ -182,7 +183,7 @@  static const MXFContainerEssenceEntry mxf_essence_container_uls[] = {
       mxf_write_cdci_desc },
     // DNxHD
     { { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x0D,0x01,0x03,0x01,0x02,0x11,0x01,0x00 },
-      { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x05,0x00 },
+      { 0x06,0x0E,0x2B,0x34,0x01,0x02,0x01,0x01,0x0D,0x01,0x03,0x01,0x15,0x01,0x0C,0x00 },
       { 0x06,0x0E,0x2B,0x34,0x04,0x01,0x01,0x0A,0x04,0x01,0x02,0x02,0x71,0x01,0x00,0x00 },
       mxf_write_cdci_desc },
     // JPEG2000
@@ -2674,6 +2675,12 @@  static int mxf_init(AVFormatContext *s)
 
         memcpy(sc->track_essence_element_key, mxf_essence_container_uls[sc->index].element_ul, 15);
         sc->track_essence_element_key[15] = present[sc->index];
+        if (s->oformat == &ff_mxf_opatom_muxer && st->codecpar->codec_id == AV_CODEC_ID_DNXHD) {
+            // clip-wrapping requires 0x0D per ST2019-4:2009 or 0x06 per previous version ST2019-4:2008
+            // we choose to use 0x06 instead 0x0D to be compatible with AVID systems
+            // and produce mxf files with the most relevant flavour for opatom
+            sc->track_essence_element_key[14] = 0x06;
+        }
         PRINT_KEY(s, "track essence element key", sc->track_essence_element_key);
 
         if (!present[sc->index])
diff --git a/tests/ref/lavf/mxf_opatom b/tests/ref/lavf/mxf_opatom
index b818f26c36..e34cf2559e 100644
--- a/tests/ref/lavf/mxf_opatom
+++ b/tests/ref/lavf/mxf_opatom
@@ -1,3 +1,3 @@ 
-e558e50a94d88762e07ab8149aced7b9 *tests/data/lavf/lavf.mxf_opatom
+aab6397829bd90f0c77a3f9fde53bb9c *tests/data/lavf/lavf.mxf_opatom
 4717625 tests/data/lavf/lavf.mxf_opatom
 tests/data/lavf/lavf.mxf_opatom CRC=0xf55aa22a