[FFmpeg-devel] Support MXF separate fields layout with interlaced j2k

Matthieu Bouron matthieu.bouron at gmail.com
Sat Feb 16 17:44:49 CET 2013


On Sat, Feb 16, 2013 at 09:23:05AM -0500, Dave Rice wrote:
> Hi Matthieu,
> 
> On Feb 16, 2013, at 7:52 AM, Matthieu Bouron <matthieu.bouron at gmail.com> wrote:
> 
> > This serie of patches tends to fix ticket #1102 by supporting mxf
> > separate fields layout with jpeg2000 codec (libopenjpeg only).
> > 
> > Last patch introduce the full frame reconstuction within the
> > libopenjpeg decoder if field_order is not unknown nor progressive.
> > 
> > The problem with this implementation is that the frame threading must be
> > disabled manually by the user, if not, no frame is decoded and an
> > error message is displayed to the user.
> > 
> > Afaik, the same result might be achieved with the tinterlace filter without
> > this extra code however it feels more confortable to me to have a "native"
> > support.
> 
> I'm very happy to see this support added and have tested it. I was unable to successfully apply your patches to git master and had to do it manually but got it running. I then tested the patch with your sample from Amberfin and then another sample that uses field-based jpeg2000 is MXF from the SAMMA system (sample here: https://ia601204.us.archive.org/10/items/sample_losslessj2k_mxf/test-jpeg2000-color-wsound1.mxf).
> 
> I agree with you that the adding this as native support is better than requiring the user to detect it and apply the tinterlace filter.
> 
> I note that with ntsc2.mxf and ffplay I get this:
> 
> ./ffplay -threads 1 ~/Desktop/ntsc2.mxf 
> ffplay version N-50007-gbb29ee6 Copyright (c) 2003-2013 the FFmpeg developers
>   built on Feb 16 2013 08:39:59 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
>   configuration: --enable-libopenjpeg
>   libavutil      52. 17.101 / 52. 17.101
>   libavcodec     54. 91.103 / 54. 91.103
>   libavformat    54. 63.100 / 54. 63.100
>   libavdevice    54.  3.103 / 54.  3.103
>   libavfilter     3. 38.100 /  3. 38.100
>   libswscale      2.  2.100 /  2.  2.100
>   libswresample   0. 17.102 /  0. 17.102
> [mxf @ 0x7f7f9201a600] broken or empty indexaq=    0KB vq=    0KB sq=    0B f=0/0   
> Input #0, mxf, from '/Users/davidrice/Desktop/ntsc2.mxf':=    0KB sq=    0B f=0/0   
>   Metadata:
>     timecode        : 02:57:45;02
>   Duration: 00:00:01.53, start: 0.000000, bitrate: 78647 kb/s
>     Stream #0:0: Video: jpeg2000, yuv422p10le, 720x486, 29.97 fps, 29.97 tbr, 29.97 tbn, 29.97 tbc
>    1.44 A-V:  0.000 fd=  11 aq=    0KB vq= 1919KB sq=    0B f=0/0   =    0B f=0/0
> 
> and the file plays back at 29.97 fps.
> 
> With test-jpeg2000-color-wsound1.mxf I get this:
> 
> ./ffplay -threads 1 ~/Desktop/test-jpeg2000-color-wsound1.mxf 
> ffplay version N-50007-gbb29ee6 Copyright (c) 2003-2013 the FFmpeg developers
>   built on Feb 16 2013 08:39:59 with llvm-gcc 4.2.1 (LLVM build 2336.11.00)
>   configuration: --enable-libopenjpeg
>   libavutil      52. 17.101 / 52. 17.101
>   libavcodec     54. 91.103 / 54. 91.103
>   libavformat    54. 63.100 / 54. 63.100
>   libavdevice    54.  3.103 / 54.  3.103
>   libavfilter     3. 38.100 /  3. 38.100
>   libswscale      2.  2.100 /  2.  2.100
>   libswresample   0. 17.102 /  0. 17.102
> [mxf @ 0x7fd85380f200] broken or empty indexaq=    0KB vq=    0KB sq=    0B f=0/0   
> [mxf @ 0x7fd85380f200] error getting stream index 67174400
>     Last message repeated 41 times0 fd=   0 aq=    0KB vq=    0KB sq=    0B f=0/0   
> [mxf @ 0x7fd85380f200] Estimating duration from bitrate, this may be inaccurate
> Input #0, mxf, from '/Users/davidrice/Desktop/test-jpeg2000-color-wsound1.mxf':
>   Metadata:
>     timecode        : 01:03:34:21
>   Duration: 00:35:01.75, start: 0.000000, bitrate: 3071 kb/s
>     Stream #0:0: Video: jpeg2000, yuv422p, 720x486, 59.94 fps, 59.94 tbr, 59.94 tbn, 59.94 tbc
>     Stream #0:1: Audio: pcm_s16le, 48000 Hz, 4 channels, s16, 3072 kb/s
>    0.47 A-V:  0.037 fd=   5 aq=   31KB vq= 1104KB sq=    0B f=0/0
> 
> The video plays back at 59.94 fps which is the field rate rather than playing at the frame rate 29.97. When I try to transcode test-jpeg2000-color-wsound1.mxf to another output I get a 59.94 fps output as every frame is duplicated. 
> 
> In "CDCI Essence Descriptor", if "Interlace or Progressive layout" (0x320C) is 1, then the encoding is field per field rather than frame per frame, so for a natural presentation you'd need to suppose both that:
> - Height is the height of a field, not a frame

I agree.

> - Frame rate is field rate
> 

Is this behaviour described somewhere ?
Following this logic, the file associated with ticket #1102 would play at
15000/1001 which do not feel natural to me.

Wild guess: the frame duplication occurs because i did not correct the frame
pts in the decoder.

Thanks for testing. If you have other samples with separate field layout,
it would be welcomed.

Regards,
Matthieu

[...]


More information about the ffmpeg-devel mailing list