summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian@centricular.com>2016-01-20 10:31:40 +0200
committerSebastian Dröge <sebastian@centricular.com>2016-01-20 10:31:40 +0200
commit6e18a221a052e2eb4fc98620bebb991919c8b171 (patch)
tree1697fa8287ec2f6e925f90f2f3b1294bf895956d
parent4e0b05bf7f3c8968499cb772a24919e202d4ce64 (diff)
downloadgst-libav-6e18a221a052e2eb4fc98620bebb991919c8b171.tar.gz
avviddec: Use AVFrame API instead of deprecated AVPicture API
-rw-r--r--ext/libav/gstavviddec.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/ext/libav/gstavviddec.c b/ext/libav/gstavviddec.c
index cc0cf03..0fbd83f 100644
--- a/ext/libav/gstavviddec.c
+++ b/ext/libav/gstavviddec.c
@@ -1179,7 +1179,7 @@ static GstFlowReturn
get_output_buffer (GstFFMpegVidDec * ffmpegdec, GstVideoCodecFrame * frame)
{
GstFlowReturn ret = GST_FLOW_OK;
- AVPicture pic, *outpic;
+ AVFrame pic, *outpic;
GstVideoFrame vframe;
GstVideoInfo *info;
gint c;
@@ -1203,6 +1203,10 @@ get_output_buffer (GstFFMpegVidDec * ffmpegdec, GstVideoCodecFrame * frame)
GST_MAP_READ | GST_MAP_WRITE))
goto map_failed;
+ memset (&pic, 0, sizeof (pic));
+ pic.format = ffmpegdec->pic_pix_fmt;
+ pic.width = GST_VIDEO_FRAME_WIDTH (&vframe);
+ pic.height = GST_VIDEO_FRAME_HEIGHT (&vframe);
for (c = 0; c < AV_NUM_DATA_POINTERS; c++) {
if (c < GST_VIDEO_INFO_N_PLANES (info)) {
pic.data[c] = GST_VIDEO_FRAME_PLANE_DATA (&vframe, c);
@@ -1215,10 +1219,12 @@ get_output_buffer (GstFFMpegVidDec * ffmpegdec, GstVideoCodecFrame * frame)
}
}
- outpic = (AVPicture *) ffmpegdec->picture;
+ outpic = ffmpegdec->picture;
- av_picture_copy (&pic, outpic, ffmpegdec->context->pix_fmt,
- GST_VIDEO_INFO_WIDTH (info), GST_VIDEO_INFO_HEIGHT (info));
+ if (av_frame_copy (&pic, outpic) != 0) {
+ GST_ERROR_OBJECT (ffmpegdec, "Failed to copy output frame");
+ ret = GST_FLOW_ERROR;
+ }
gst_video_frame_unmap (&vframe);