[FFmpeg-devel] [PATCH] avformat/matroskaenc: use display aspect ratio for DisplayWidth and DisplayHeight when possible
James Almer
jamrial at gmail.com
Fri Oct 28 06:03:19 EEST 2016
On 10/22/2016 5:33 PM, James Almer wrote:
> This avoids potential rounding errors and guarantees the source aspect
> ratio is preserved.
> Keep writing pixel values when Stereo 3D Mode is enabled and for WebM,
> as the format doesn't support anything else.
>
> This fixes ticket #5743, implementing the suggestion from ticket #5903.
>
> Signed-off-by: James Almer <jamrial at gmail.com>
> ---
> libavformat/matroskaenc.c | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
>
> diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
> index 03d5326..5790fe1 100644
> --- a/libavformat/matroskaenc.c
> +++ b/libavformat/matroskaenc.c
> @@ -1193,8 +1193,19 @@ static int mkv_write_track(AVFormatContext *s, MatroskaMuxContext *mkv,
> return AVERROR(EINVAL);
> }
> if (d_width != par->width || display_width_div != 1 || display_height_div != 1) {
> - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , d_width / display_width_div);
> - put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, par->height / display_height_div);
> + if (mkv->mode == MODE_WEBM || display_width_div != 1 || display_height_div != 1) {
> + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , d_width / display_width_div);
> + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, par->height / display_height_div);
> + } else {
> + AVRational display_aspect_ratio;
> + av_reduce(&display_aspect_ratio.num, &display_aspect_ratio.den,
> + par->width * (int64_t)st->sample_aspect_ratio.num,
> + par->height * (int64_t)st->sample_aspect_ratio.den,
> + 1024 * 1024);
> + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH, display_aspect_ratio.num);
> + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYHEIGHT, display_aspect_ratio.den);
> + put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYUNIT, MATROSKA_VIDEO_DISPLAYUNIT_DAR);
> + }
> }
> } else if (display_width_div != 1 || display_height_div != 1) {
> put_ebml_uint(pb, MATROSKA_ID_VIDEODISPLAYWIDTH , par->width / display_width_div);
Ping.
More information about the ffmpeg-devel
mailing list