summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorKacper Michajłow <kasper93@gmail.com>2023-09-01 22:34:12 +0200
committerDudemanguy <random342@airmail.cc>2023-09-17 16:48:42 +0000
commit338f31e0b694eec2f250b62cf7707ec9bdf71daf (patch)
tree0a8c00553e78224c8052df88e8c752784630d10b /demux
parent008e7db843add5bf26ba487174b057cc2166f912 (diff)
downloadmpv-338f31e0b694eec2f250b62cf7707ec9bdf71daf.tar.bz2
mpv-338f31e0b694eec2f250b62cf7707ec9bdf71daf.tar.xz
demux_mkv: support PixelCrop* elements
Fixes #6017
Diffstat (limited to 'demux')
-rw-r--r--demux/demux_mkv.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 0d20a08ccd..59ee8e29fc 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -108,6 +108,8 @@ typedef struct mkv_track {
uint32_t colorspace;
int stereo_mode;
struct mp_colorspace color;
+ uint32_t v_crop_top, v_crop_left, v_crop_right, v_crop_bottom;
+ bool v_crop_top_set, v_crop_left_set, v_crop_right_set, v_crop_bottom_set;
uint32_t a_channels, a_bps;
float a_sfreq;
@@ -643,6 +645,26 @@ static void parse_trackvideo(struct demuxer *demuxer, struct mkv_track *track,
video->stereo_mode);
}
}
+ if (video->n_pixel_crop_top) {
+ track->v_crop_top = video->pixel_crop_top;
+ track->v_crop_top_set = true;
+ MP_DBG(demuxer, "| + Crop top: %"PRIu32"\n", track->v_crop_top);
+ }
+ if (video->n_pixel_crop_left) {
+ track->v_crop_left = video->pixel_crop_left;
+ track->v_crop_left_set = true;
+ MP_DBG(demuxer, "| + Crop left: %"PRIu32"\n", track->v_crop_left);
+ }
+ if (video->n_pixel_crop_right) {
+ track->v_crop_right = video->pixel_crop_right;
+ track->v_crop_right_set = true;
+ MP_DBG(demuxer, "| + Crop right: %"PRIu32"\n", track->v_crop_right);
+ }
+ if (video->n_pixel_crop_bottom) {
+ track->v_crop_bottom = video->pixel_crop_bottom;
+ track->v_crop_bottom_set = true;
+ MP_DBG(demuxer, "| + Crop bottom: %"PRIu32"\n", track->v_crop_bottom);
+ }
if (video->n_colour)
parse_trackcolour(demuxer, track, &video->colour);
}
@@ -1480,6 +1502,13 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track)
sh_v->stereo_mode = track->stereo_mode;
sh_v->color = track->color;
+ sh_v->crop.x0 = track->v_crop_left_set ? track->v_crop_left : 0;
+ sh_v->crop.y0 = track->v_crop_top_set ? track->v_crop_top : 0;
+ sh_v->crop.x1 = track->v_width -
+ (track->v_crop_right_set ? track->v_crop_right : 0);
+ sh_v->crop.y1 = track->v_height -
+ (track->v_crop_bottom_set ? track->v_crop_bottom : 0);
+
done:
demux_add_sh_stream(demuxer, sh);