summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Thompson <sw@jkqxz.net>2019-03-31 15:39:44 +0100
committerMark Thompson <sw@jkqxz.net>2019-06-02 17:30:41 +0100
commit909bcedc581aa03dd5e22ecb1d0cc3b52eba8c26 (patch)
tree7cb9f3e25f64642d99365e56d84ca033ceb35cda
parentef2f89bbccc973fbde0926bfedef6e1eb3604674 (diff)
downloadffmpeg-streaming-909bcedc581aa03dd5e22ecb1d0cc3b52eba8c26.zip
ffmpeg-streaming-909bcedc581aa03dd5e22ecb1d0cc3b52eba8c26.tar.gz
vaapi_encode: Warn if input has cropping information
Cropping is not supported by VAAPI encode.
-rw-r--r--libavcodec/vaapi_encode.c19
-rw-r--r--libavcodec/vaapi_encode.h4
2 files changed, 23 insertions, 0 deletions
diff --git a/libavcodec/vaapi_encode.c b/libavcodec/vaapi_encode.c
index 2dda451..c3d8944 100644
--- a/libavcodec/vaapi_encode.c
+++ b/libavcodec/vaapi_encode.c
@@ -913,6 +913,21 @@ static int vaapi_encode_clear_old(AVCodecContext *avctx)
return 0;
}
+static int vaapi_encode_check_frame(AVCodecContext *avctx,
+ const AVFrame *frame)
+{
+ VAAPIEncodeContext *ctx = avctx->priv_data;
+
+ if ((frame->crop_top || frame->crop_bottom ||
+ frame->crop_left || frame->crop_right) && !ctx->crop_warned) {
+ av_log(avctx, AV_LOG_WARNING, "Cropping information on input "
+ "frames ignored due to lack of API support.\n");
+ ctx->crop_warned = 1;
+ }
+
+ return 0;
+}
+
int ff_vaapi_encode_send_frame(AVCodecContext *avctx, const AVFrame *frame)
{
VAAPIEncodeContext *ctx = avctx->priv_data;
@@ -923,6 +938,10 @@ int ff_vaapi_encode_send_frame(AVCodecContext *avctx, const AVFrame *frame)
av_log(avctx, AV_LOG_DEBUG, "Input frame: %ux%u (%"PRId64").\n",
frame->width, frame->height, frame->pts);
+ err = vaapi_encode_check_frame(avctx, frame);
+ if (err < 0)
+ return err;
+
pic = vaapi_encode_alloc(avctx);
if (!pic)
return AVERROR(ENOMEM);
diff --git a/libavcodec/vaapi_encode.h b/libavcodec/vaapi_encode.h
index 44a8db5..12efee2 100644
--- a/libavcodec/vaapi_encode.h
+++ b/libavcodec/vaapi_encode.h
@@ -314,6 +314,10 @@ typedef struct VAAPIEncodeContext {
int idr_counter;
int gop_counter;
int end_of_stream;
+
+ // The encoder does not support cropping information, so warn about
+ // it the first time we encounter any nonzero crop fields.
+ int crop_warned;
} VAAPIEncodeContext;
enum {
OpenPOWER on IntegriCloud