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 <jamr...@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.

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to