mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-28 20:53:54 +02:00
avformat/matroskaenc: use display aspect ratio for DisplayWidth and DisplayHeight when possible
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@gmail.com>
This commit is contained in:
parent
bab6b60675
commit
5cb57131d3
@ -1204,8 +1204,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);
|
||||
|
Loading…
Reference in New Issue
Block a user