lavc/videotoolbox: Fix cropping with HEVC and H264 videos

videotoolbox returns an already cropped stream which led to double
cropping. this issue was introduced with the refactor of the cropping
mechanism in commit 07596e4 for h264 and 000fb61 for HEVC.

to fix this we set the cropping of the frame and the output frame to 0.

Tested-by: ponpon
Fixes ticket #7544.
This commit is contained in:
Akemi 2018-11-10 16:09:05 +01:00 committed by Carl Eugen Hoyos
parent 991cd79155
commit 233cd89056
1 changed files with 11 additions and 0 deletions

View File

@ -903,6 +903,11 @@ static int videotoolbox_common_end_frame(AVCodecContext *avctx, AVFrame *frame)
AVVideotoolboxContext *videotoolbox = videotoolbox_get_context(avctx); AVVideotoolboxContext *videotoolbox = videotoolbox_get_context(avctx);
VTContext *vtctx = avctx->internal->hwaccel_priv_data; VTContext *vtctx = avctx->internal->hwaccel_priv_data;
frame->crop_right = 0;
frame->crop_left = 0;
frame->crop_top = 0;
frame->crop_bottom = 0;
if (vtctx->reconfig_needed == true) { if (vtctx->reconfig_needed == true) {
vtctx->reconfig_needed = false; vtctx->reconfig_needed = false;
av_log(avctx, AV_LOG_VERBOSE, "VideoToolbox decoder needs reconfig, restarting..\n"); av_log(avctx, AV_LOG_VERBOSE, "VideoToolbox decoder needs reconfig, restarting..\n");
@ -969,6 +974,12 @@ static int videotoolbox_hevc_end_frame(AVCodecContext *avctx)
HEVCContext *h = avctx->priv_data; HEVCContext *h = avctx->priv_data;
AVFrame *frame = h->ref->frame; AVFrame *frame = h->ref->frame;
VTContext *vtctx = avctx->internal->hwaccel_priv_data; VTContext *vtctx = avctx->internal->hwaccel_priv_data;
h->output_frame->crop_right = 0;
h->output_frame->crop_left = 0;
h->output_frame->crop_top = 0;
h->output_frame->crop_bottom = 0;
int ret = videotoolbox_common_end_frame(avctx, frame); int ret = videotoolbox_common_end_frame(avctx, frame);
vtctx->bitstream_size = 0; vtctx->bitstream_size = 0;
return ret; return ret;