[FFmpeg-devel] [PATCH 3/4] avformat/movenc: set XDCAM codec tag correctly

Timothy Gu timothygu99 at gmail.com
Mon Oct 7 22:24:39 CEST 2013


On Monday, October 7, 2013, Michael Niedermayer wrote:

> Signed-off-by: Michael Niedermayer <michaelni at gmx.at <javascript:;>>
> ---
>  libavformat/movenc.c |   63
> ++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 63 insertions(+)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index f3058bd..cc8800b 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -897,6 +897,66 @@ static AVRational find_fps(AVFormatContext *s,
> AVStream *st)
>      return rate;
>  }
>
> +static int mov_get_mpeg2_xdcam_codec_tag(AVFormatContext *s, MOVTrack
> *track)
> +{
> +    int tag = MKTAG('m', '2', 'v', '1'); //fallback tag
> +    int interlaced = track->enc->field_order != AV_FIELD_UNKNOWN
> +                  && track->enc->field_order != AV_FIELD_PROGRESSIVE;
> +    AVStream *st = track->st;
> +    int rate = av_q2d(find_fps(s, st));
> +
> +    if (track->enc->pix_fmt == AV_PIX_FMT_YUV420P) {
> +        if (track->enc->width == 1280 && track->enc->height == 720) {
> +            if (!interlaced) {



> +                if      (rate == 24) tag = MKTAG('x','d','v','4');
> +                else if (rate == 25) tag = MKTAG('x','d','v','5');
> +                else if (rate == 30) tag = MKTAG('x','d','v','1');
> +                else if (rate == 50) tag = MKTAG('x','d','v','a');
> +                else if (rate == 60) tag = MKTAG('x','d','v','9');
> +            }
> +        } else if (track->enc->width == 1440 && track->enc->height ==
> 1080) {
> +            if (!interlaced) {
> +                if      (rate == 24) tag = MKTAG('x','d','v','6');
> +                else if (rate == 25) tag = MKTAG('x','d','v','7');
> +                else if (rate == 30) tag = MKTAG('x','d','v','8');
> +            } else {
> +                if      (rate == 25) tag = MKTAG('x','d','v','3');
> +                else if (rate == 30) tag = MKTAG('x','d','v','2');
> +            }
> +        } else if (track->enc->width == 1920 && track->enc->height ==
> 1080) {
> +            if (!interlaced) {
> +                if      (rate == 24) tag = MKTAG('x','d','v','d');
> +                else if (rate == 25) tag = MKTAG('x','d','v','e');
> +                else if (rate == 30) tag = MKTAG('x','d','v','f');
> +            } else {
> +                if      (rate == 25) tag = MKTAG('x','d','v','c');
> +                else if (rate == 30) tag = MKTAG('x','d','v','b');
> +            }
> +        }
> +    } else if (track->enc->pix_fmt == AV_PIX_FMT_YUV422P) {
> +        if (track->enc->width == 1280 && track->enc->height == 720) {
> +            if (!interlaced) {
> +                if      (rate == 24) tag = MKTAG('x','d','5','4');
> +                else if (rate == 25) tag = MKTAG('x','d','5','5');
> +                else if (rate == 30) tag = MKTAG('x','d','5','1');
> +                else if (rate == 50) tag = MKTAG('x','d','5','a');
> +                else if (rate == 60) tag = MKTAG('x','d','5','9');
> +            }
> +        } else if (track->enc->width == 1920 && track->enc->height ==
> 1080) {
> +            if (!interlaced) {
> +                if      (rate == 24) tag = MKTAG('x','d','5','d');
> +                else if (rate == 25) tag = MKTAG('x','d','5','e');
> +                else if (rate == 30) tag = MKTAG('x','d','5','f');
> +            } else {
> +                if      (rate == 25) tag = MKTAG('x','d','5','c');
> +                else if (rate == 30) tag = MKTAG('x','d','5','b');
> +            }
> +        }
> +    }


Feel free to ignore: shouldn't switch case be simpler here?

[...]

Timothy


More information about the ffmpeg-devel mailing list