summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim@centricular.net>2013-08-21 13:40:03 +0100
committerTim-Philipp Müller <tim@centricular.net>2013-08-21 13:47:15 +0100
commitffe85cb0ef0c18162f9baa098c991e227d98c926 (patch)
tree03d6ecb7b8f91081c952e13c4cf15f99316f7925
parent15a9e62abdf7b36b1f3aa342d2d2c094994658e4 (diff)
avvidenc: propagate flow return values upstream in finish()
-rw-r--r--ext/libav/gstavvidenc.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/ext/libav/gstavvidenc.c b/ext/libav/gstavvidenc.c
index b1ecb7e..ca89156 100644
--- a/ext/libav/gstavvidenc.c
+++ b/ext/libav/gstavvidenc.c
@@ -644,10 +644,11 @@ alloc_fail:
}
}
-static void
+static GstFlowReturn
gst_ffmpegvidenc_flush_buffers (GstFFMpegVidEnc * ffmpegenc, gboolean send)
{
GstVideoCodecFrame *frame;
+ GstFlowReturn flow_ret = GST_FLOW_OK;
GstBuffer *outbuf;
gint ret_size;
@@ -655,7 +656,7 @@ gst_ffmpegvidenc_flush_buffers (GstFFMpegVidEnc * ffmpegenc, gboolean send)
/* no need to empty codec if there is none */
if (!ffmpegenc->opened)
- return;
+ goto done;
while ((frame =
gst_video_encoder_get_oldest_frame (GST_VIDEO_ENCODER (ffmpegenc)))) {
@@ -701,11 +702,16 @@ gst_ffmpegvidenc_flush_buffers (GstFFMpegVidEnc * ffmpegenc, gboolean send)
if (ffmpegenc->context->coded_frame->key_frame)
GST_VIDEO_CODEC_FRAME_SET_SYNC_POINT (frame);
- gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (ffmpegenc), frame);
+ flow_ret =
+ gst_video_encoder_finish_frame (GST_VIDEO_ENCODER (ffmpegenc), frame);
} else {
gst_video_codec_frame_unref (frame);
}
}
+
+done:
+
+ return flow_ret;
}
@@ -817,9 +823,7 @@ gst_ffmpegvidenc_finish (GstVideoEncoder * encoder)
{
GstFFMpegVidEnc *ffmpegenc = (GstFFMpegVidEnc *) encoder;
- gst_ffmpegvidenc_flush_buffers (ffmpegenc, TRUE);
-
- return GST_FLOW_OK;
+ return gst_ffmpegvidenc_flush_buffers (ffmpegenc, TRUE);
}
gboolean