From: Baptiste Coudurier Date: Wed, 8 Mar 2006 00:39:23 +0000 (+0000) Subject: correct computing of DV fourcc in mov muxer X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=8e32161943efb0486bf83134dc6f695b46ff743c;p=ffmpeg correct computing of DV fourcc in mov muxer Patch by Baptiste COUDURIER, baptiste <> coudurier <> smartjog <> com Originally committed as revision 5124 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 8dfe04c04a3..e097cec314c 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -268,7 +268,7 @@ static const CodecTag codec_movaudio_tags[] = { { CODEC_ID_PCM_S16BE, MKTAG('t', 'w', 'o', 's') }, { CODEC_ID_PCM_S16LE, MKTAG('s', 'o', 'w', 't') }, { CODEC_ID_MP3, MKTAG('.', 'm', 'p', '3') }, - { 0, 0 }, + { CODEC_ID_NONE, 0 }, }; static int mov_write_audio_tag(ByteIOContext *pb, MOVTrack* track) @@ -471,10 +471,46 @@ static const CodecTag codec_movvideo_tags[] = { { CODEC_ID_MPEG4, MKTAG('m', 'p', '4', 'v') }, { CODEC_ID_H263, MKTAG('s', '2', '6', '3') }, { CODEC_ID_H264, MKTAG('a', 'v', 'c', '1') }, - { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') }, - { 0, 0 }, + /* special handling in mov_find_video_codec_tag */ + { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', ' ') }, /* DV NTSC */ + { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'c', 'p') }, /* DV PAL */ + { CODEC_ID_DVVIDEO, MKTAG('d', 'v', 'p', 'p') }, /* DVCPRO PAL */ + { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'n') }, /* DVCPRO50 NTSC */ + { CODEC_ID_DVVIDEO, MKTAG('d', 'v', '5', 'p') }, /* DVCPRO50 PAL */ + { CODEC_ID_NONE, 0 }, }; +static int mov_find_video_codec_tag(MOVTrack* track) +{ + int tag; + + tag = track->enc->codec_tag; + if (!tag) { + if (track->enc->codec_id == CODEC_ID_DVVIDEO) { + if (track->enc->height == 480) { /* NTSC */ + if (track->enc->pix_fmt == PIX_FMT_YUV422P) + tag = MKTAG('d', 'v', '5', 'n'); + else + tag = MKTAG('d', 'v', 'c', ' '); + } else { /* assume PAL */ + if (track->enc->pix_fmt == PIX_FMT_YUV422P) + tag = MKTAG('d', 'v', '5', 'p'); + else if (track->enc->pix_fmt == PIX_FMT_YUV420P) + tag = MKTAG('d', 'v', 'p', 'p'); + else + tag = MKTAG('d', 'v', 'c', 'p'); + } + } else { + tag = codec_get_tag(codec_movvideo_tags, track->enc->codec_id); + } + } + // if no mac fcc found, try with Microsoft tags + if (!tag) + tag = codec_get_tag(codec_bmp_tags, track->enc->codec_id); + assert(tag); + return tag; +} + static int mov_write_video_tag(ByteIOContext *pb, MOVTrack* track) { offset_t pos = url_ftell(pb); @@ -483,12 +519,7 @@ static int mov_write_video_tag(ByteIOContext *pb, MOVTrack* track) put_be32(pb, 0); /* size */ - tag = track->enc->codec_tag; - if (!tag) - tag = codec_get_tag(codec_movvideo_tags, track->enc->codec_id); - // if no mac fcc found, try with Microsoft tags - if (!tag) - tag = codec_get_tag(codec_bmp_tags, track->enc->codec_id); + tag = mov_find_video_codec_tag(track); put_le32(pb, tag); // store it byteswapped put_be32(pb, 0); /* Reserved */