vd_lavc: disable cropping by decoder

Cropping by decoder has limitations with regards to aligment and hwdec.
It doesn't work to offset top left corner with hwdec and even with
software decoding it don't crop fully when resulting data would not be
aligned.

VO cropping is way more robust.
This commit is contained in:
Kacper Michajłow 2023-09-01 12:26:38 +02:00 committed by Dudemanguy
parent 4d853c5545
commit 826ce82cad
2 changed files with 11 additions and 0 deletions

View File

@ -1834,6 +1834,14 @@ Video
this can break on streams not encoded by x264, or if a stream encoded by a
newer x264 version contains no version info.
``--vd-apply-cropping``
Certain video codecs support cropping, meaning that only a sub-rectangle of
the decoded frame is intended for display. This option controls how cropping
is handled by libavcodec. Cropping during decoding has certain limitations
with regards to alignment and hardware decoding. If this option is enabled,
decoder will apply the crop. Disabled by default, VO will apply the crop in
a more robust way.
``--swapchain-depth=<N>``
Allow up to N in-flight frames. This essentially controls the frame
latency. Increasing the swapchain depth can improve pipelining and prevent

View File

@ -80,6 +80,7 @@ struct vd_lavc_params {
int threads;
bool bitexact;
bool old_x264;
bool apply_cropping;
bool check_hw_profile;
int software_fallback;
char **avopts;
@ -120,6 +121,7 @@ const struct m_sub_options vd_lavc_conf = {
{"vd-lavc-o", OPT_KEYVALUELIST(avopts)},
{"vd-lavc-dr", OPT_CHOICE(dr,
{"auto", -1}, {"no", 0}, {"yes", 1})},
{"vd-apply-cropping", OPT_BOOL(apply_cropping)},
{"hwdec", OPT_STRINGLIST(hwdec_api),
.help = hwdec_opt_help,
.flags = M_OPT_OPTIONAL_PARAM | UPDATE_HWDEC},
@ -772,6 +774,7 @@ static void init_avctx(struct mp_filter *vd)
avctx->skip_loop_filter = lavc_param->skip_loop_filter;
avctx->skip_idct = lavc_param->skip_idct;
avctx->skip_frame = lavc_param->skip_frame;
avctx->apply_cropping = lavc_param->apply_cropping;
if (lavc_codec->id == AV_CODEC_ID_H264 && lavc_param->old_x264)
av_opt_set(avctx, "x264_build", "150", AV_OPT_SEARCH_CHILDREN);