summaryrefslogtreecommitdiffstats
path: root/libavcodec/decode.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2017-07-01 12:09:58 +0200
committerAnton Khirnov <anton@khirnov.net>2017-07-26 23:24:07 +0200
commitbadf0951f54c1332e77455dc40398f3512540c1b (patch)
tree091044be61b9fa9c1d57a5e9764fb6fea35c99b1 /libavcodec/decode.c
parent359a8a3e2d1194b52b6c386f94fd0929567dfb67 (diff)
downloadffmpeg-streaming-badf0951f54c1332e77455dc40398f3512540c1b.zip
ffmpeg-streaming-badf0951f54c1332e77455dc40398f3512540c1b.tar.gz
decode: add a mechanism for performing delayed processing on the decoded frames
This will be useful in the CUVID hwaccel.
Diffstat (limited to 'libavcodec/decode.c')
-rw-r--r--libavcodec/decode.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/libavcodec/decode.c b/libavcodec/decode.c
index bcc119c..9050b57 100644
--- a/libavcodec/decode.c
+++ b/libavcodec/decode.c
@@ -419,6 +419,14 @@ static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
fdd = (FrameDecodeData*)frame->opaque_ref->data;
+ if (fdd->post_process) {
+ ret = fdd->post_process(avctx, frame);
+ if (ret < 0) {
+ av_frame_unref(frame);
+ return ret;
+ }
+ }
+
user_opaque_ref = fdd->user_opaque_ref;
fdd->user_opaque_ref = NULL;
av_buffer_unref(&frame->opaque_ref);
@@ -1014,6 +1022,9 @@ static void decode_data_free(void *opaque, uint8_t *data)
av_buffer_unref(&fdd->user_opaque_ref);
+ if (fdd->post_process_opaque_free)
+ fdd->post_process_opaque_free(fdd->post_process_opaque);
+
av_freep(&fdd);
}
OpenPOWER on IntegriCloud