[Ffmpeg-devel] [PATCH] mov fourcc, mj2 format support, time scale fix

Michael Niedermayer michaelni
Mon Mar 6 19:04:07 CET 2006


Hi

On Thu, Mar 02, 2006 at 09:21:13PM +0100, Baptiste COUDURIER wrote:
> Hi,
> 
> Thanks Michael for recent commits, I will remember to update regression
> tests.
> 
> 3 patches :
> 
> motion_jpeg2000.patch
> 
> which add support for Motion JPEG 2000 file format.
> No decoder available yet, any plan for that btw ?
> 
> mov_fourcc_update.patch
> 
> referencing more FCP fourccs.
> 
> time_scale_fix.patch
> 
> which set track timescale to mov timescale if 0, an example here:
> 
> ftp.smartjog.net ffmpeg/ffmpeg MJPEG2000.mj2 (Motion JPEG2000 file format)
> 
> I got a few questions regarding muxing of DV, DVCPRO50 (now available)i
> in MOV.
> 
> FCP/Quicktime Player need correct fourcc to decode them. Unfortunately
> those fourccs are based on PAL/NTSC. How to detect PAL/NTSC the best way
> ? Resolution ? Fps ? Something else ?

resolution is a better choice then fps for detection


[...]
> +static int mov_read_jp2h(MOVContext *c, ByteIOContext *pb, MOV_atom_t atom)
> +{
> +    AVStream *st = c->fc->streams[c->fc->nb_streams-1];
> +
> +    av_free(st->codec->extradata);
> +

a 
if(atom.size > (1<<30)) return -1;
should be added here for saftey


> +    st->codec->extradata_size = atom.size + 8;
> +    st->codec->extradata = (uint8_t*) av_mallocz(st->codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
> +
> +    /* pass all jp2h atom to codec */
> +    if (st->codec->extradata) {
> +        strcpy(st->codec->extradata + 4, "jp2h");
> +        get_buffer(pb, st->codec->extradata + 8, atom.size);

[...]

> Index: libavformat/mov.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/mov.c,v
> retrieving revision 1.117
> diff -u -p -r1.117 mov.c
> --- libavformat/mov.c	22 Feb 2006 23:46:20 -0000	1.117
> +++ libavformat/mov.c	2 Mar 2006 20:11:08 -0000
> @@ -144,13 +144,17 @@ static const CodecTag mov_video_tags[] =
>      { CODEC_ID_QDRAW, MKTAG('q', 'd', 'r', 'w') }, /* QuickDraw */
>      { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, /* AVC-1/H.264 */
>      { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '2') }, /* MPEG2 produced by Sony HD camera */
> -    { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '5', 'p') }, /* MPEG2 IMX 635/50 50mb/s produced by FCP */
> -    { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'n') }, /* MPEG2 IMX 635/50 30mb/s produced by FCP */
> -    { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'p', 'p') }, /* DVCPRO PAL produced by FCP */
> -    //{ CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '5') }, /* DVCPRO HD produced by FCP */
> -    { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'p') }, /* DVCPRO50 produced by FCP */
>      { CODEC_ID_MPEG2VIDEO, MKTAG('h', 'd', 'v', '3') }, /* HDV produced by FCP */
> -    //{ CODEC_ID_MJPEG, MKTAG('m', 'j', 'p', '2') }, /* JPEG 2000 produced by FCP */
> +    { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '5', 'n') }, /* MPEG2 IMX NTSC 525/60 50mb/s produced by FCP */
> +    { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '5', 'p') }, /* MPEG2 IMX PAL 625/50 50mb/s produced by FCP */
> +    { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'n') }, /* MPEG2 IMX NTSC 525/60 30mb/s produced by FCP */
> +    { CODEC_ID_MPEG2VIDEO, MKTAG('m', 'x', '3', 'p') }, /* MPEG2 IMX PAL 625/50 30mb/s produced by FCP */
> +    { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'p', 'p') }, /* DVCPRO PAL produced by FCP */
> +    //{ CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '5') }, /* DVCPRO HD 50i produced by FCP */
> +    //{ CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'h', '6') }, /* DVCPRO HD 60i produced by FCP */
> +    { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'p') }, /* DVCPRO50 PAL produced by FCP */
> +    { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'n') }, /* DVCPRO50 NTSC produced by FCP */
> +    //{ CODEC_ID_JPEG2000, MKTAG('m', 'j', 'p', '2') }, /* JPEG 2000 produced by FCP */
>      { CODEC_ID_NONE, 0 },
>  };

ok, can be applied


> Index: libavformat/mov.c
> ===================================================================
> RCS file: /cvsroot/ffmpeg/ffmpeg/libavformat/mov.c,v
> retrieving revision 1.117
> diff -u -p -r1.117 mov.c
> --- libavformat/mov.c	22 Feb 2006 23:46:20 -0000	1.117
> +++ libavformat/mov.c	2 Mar 2006 20:04:34 -0000
> @@ -1597,6 +1624,8 @@ static int mov_read_header(AVFormatConte
>  
>          if(!sc->time_rate)
>              sc->time_rate=1;
> +        if(!sc->time_scale)
> +            sc->time_scale= mov->time_scale;
>          av_set_pts_info(s->streams[i], 64, sc->time_rate, sc->time_scale);

ok, can be applied

[...]

-- 
Michael





More information about the ffmpeg-devel mailing list