[FFmpeg-devel] [PATCH]Read aspect ratio from mxf

Michael Niedermayer michaelni at gmx.at
Sat Nov 15 23:57:00 CET 2014


On Sat, Nov 15, 2014 at 02:50:38AM +0100, Carl Eugen Hoyos wrote:
> Hi!
> 
> Attached patch fixes ticket #4107 for me.
> An alternative would be to force the sar to 4:3 
> if h264 10bit 1440x1080 video has sar 3:4.
> 
> Please review, Carl Eugen

>  mxfdec.c |    4 ++++
>  utils.c  |   15 +++++++++++++++
>  2 files changed, 19 insertions(+)
> e669a2a2f5050b9fc4165c818b97e6d11ead87a5  patchmxfdar.diff
> diff --git a/libavformat/mxfdec.c b/libavformat/mxfdec.c
> index b533e2a..3ac5e68 100644
> --- a/libavformat/mxfdec.c
> +++ b/libavformat/mxfdec.c
> @@ -1771,6 +1771,10 @@ static int mxf_parse_structural_metadata(MXFContext *mxf)
>              if (source_track->sequence->origin) {
>                  av_dict_set_int(&st->metadata, "source_track_origin", source_track->sequence->origin, 0);
>              }
> +            if (descriptor->aspect_ratio.num && descriptor->aspect_ratio.den) {
> +                av_dict_set_int(&st->metadata, "display_aspect_ratio_num", descriptor->aspect_ratio.num, 0);
> +                av_dict_set_int(&st->metadata, "display_aspect_ratio_den", descriptor->aspect_ratio.den, 0);
> +            }
>          } else if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
>              container_ul = mxf_get_codec_ul(mxf_sound_essence_container_uls, essence_container_ul);
>              /* Only overwrite existing codec ID if it is unset or A-law, which is the default according to SMPTE RP 224. */
> diff --git a/libavformat/utils.c b/libavformat/utils.c
> index 8da8db4..d90541c 100644
> --- a/libavformat/utils.c
> +++ b/libavformat/utils.c
> @@ -3298,6 +3298,8 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
>      for (i = 0; i < ic->nb_streams; i++) {
>          st = ic->streams[i];
>          if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
> +            AVDictionaryEntry *dar;
> +            int darnum = 0, darden = 0;
>              if (st->codec->codec_id == AV_CODEC_ID_RAWVIDEO && !st->codec->codec_tag && !st->codec->bits_per_coded_sample) {
>                  uint32_t tag= avcodec_pix_fmt_to_codec_tag(st->codec->pix_fmt);
>                  if (avpriv_find_pix_fmt(avpriv_get_raw_pix_fmt_tags(), tag) == st->codec->pix_fmt)
> @@ -3346,6 +3348,19 @@ int avformat_find_stream_info(AVFormatContext *ic, AVDictionary **options)
>                      st->r_frame_rate.den = st->time_base.num;
>                  }
>              }
> +            dar = av_dict_get(st->metadata, "display_aspect_ratio_num", NULL, 0);
> +            if (dar)
> +                darnum = strtol(dar->value, NULL, 0);
> +            dar = av_dict_get(st->metadata, "display_aspect_ratio_den", NULL, 0);
> +            if (dar)
> +                darden = strtol(dar->value, NULL, 0);
> +            if (darnum && darden) {
> +                av_reduce(&st->sample_aspect_ratio.num, &st->sample_aspect_ratio.den,
> +                          st->codec->height * darnum, st->codec->width * darden,
> +                          INT32_MAX);
> +                av_dict_set(&st->metadata, "display_aspect_ratio_num", NULL, 0);
> +                av_dict_set(&st->metadata, "display_aspect_ratio_den", NULL, 0);
> +            }

I suggest you add a documented as private/internal
display_aspect_ratio to AVStream instead of metadata
also av_reduce can be replaced by av_mul_q which is probably simpler

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

DNS cache poisoning attacks, popular search engine, Google internet authority
dont be evil, please
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141115/fda48e34/attachment.asc>


More information about the ffmpeg-devel mailing list