summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2011-06-15 12:35:30 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2011-06-15 12:35:35 +0200
commit91fc66f9c89f786f2f13c6905d540f0ab276307a (patch)
tree2fa6456add90f9d608b9743bf0023a5822b368c0
parent269d88ca6b42e23fddba1dbb553aab2dcdc069f1 (diff)
downloadgst-plugins-fsl-vpu-91fc66f9c89f786f2f13c6905d540f0ab276307a.tar.gz
gst-plugins-fsl-vpu-91fc66f9c89f786f2f13c6905d540f0ab276307a.tar.xz
vpu decoder: factor out unref bufs
To ease later implementation of v4l2 userptr support. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rwxr-xr-xsrc/mfw_gst_vpu_decoder.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/mfw_gst_vpu_decoder.c b/src/mfw_gst_vpu_decoder.c
index cb5ff43..8a6090a 100755
--- a/src/mfw_gst_vpu_decoder.c
+++ b/src/mfw_gst_vpu_decoder.c
@@ -233,6 +233,18 @@ mfw_gst_vpudec_get_property(GObject * object, guint prop_id,
return;
}
+static void mfw_gst_vpudec_buffers_unref(GstVPU_Dec *vpu_dec)
+{
+ int i;
+
+ if (vpu_dec->streamtype == V4L2_MEMORY_MMAP) {
+ for (i = 0; i < NUM_BUFFERS; ++i){
+ struct v4l2_buffer *buf = &vpu_dec->buf_v4l2[i];
+ munmap(vpu_dec->buf_data[i], buf->length);
+ }
+ }
+}
+
static struct v4l2_requestbuffers reqs = {
.count = NUM_BUFFERS,
.type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
@@ -600,7 +612,7 @@ mfw_gst_vpudec_change_state(GstElement * element, GstStateChange transition)
GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS;
GstVPU_Dec *vpu_dec = MFW_GST_VPU_DEC(element);
GstState state, next;
- int retval, i;
+ int retval;
state = (GstState) GST_STATE_TRANSITION_CURRENT (transition);
next = GST_STATE_TRANSITION_NEXT (transition);
@@ -636,14 +648,7 @@ mfw_gst_vpudec_change_state(GstElement * element, GstStateChange transition)
vpu_dec->decoded_frames=0;
break;
case GST_STATE_CHANGE_READY_TO_NULL:
- for (i = 0; i < NUM_BUFFERS; ++i){
- struct v4l2_buffer *buf = &vpu_dec->buf_v4l2[i];
- retval = munmap(vpu_dec->buf_data[i], buf->length);
- if (retval) {
- GST_ERROR("VIDIOC_QBUF munmap failed: %s\n", strerror(errno));
- return -errno;
- }
- }
+ mfw_gst_vpudec_buffers_unref(vpu_dec);
retval = close(vpu_dec->vpu_fd);
if(retval)
GST_ERROR("closing filedesriptor error: %d\n", errno);