aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorprasanth kamuju <prasanth.kamuju@linaro.org>2015-01-22 14:27:06 +0530
committerprasanth kamuju <prasanth.kamuju@linaro.org>2015-01-22 14:27:06 +0530
commit8beb4e6e6171b03520576eeafd3055c80daa7465 (patch)
tree14857a96cb0a8380125daa2fff26608ec2ae7911
parentbd0eaa1149d8a0c6252b05fff3cbd2005f0efe60 (diff)
gstqcvideodec: Redundant code moved under common function.
-rw-r--r--src/gstqcvideodec.c104
1 files changed, 45 insertions, 59 deletions
diff --git a/src/gstqcvideodec.c b/src/gstqcvideodec.c
index c346f94..6db7438 100644
--- a/src/gstqcvideodec.c
+++ b/src/gstqcvideodec.c
@@ -139,10 +139,11 @@ static gboolean gst_qcvideodec_create_buf_pool(Gstqcvideodec * decoder);
static void* video_thread (void *);
static void* async_thread (void *);
-static gboolean gst_qcvideodec_set_buffers (Gstqcvideodec * decoder);
+static gboolean gst_qcvideodec_start_decoder (Gstqcvideodec * decoder);
static GstFlowReturn gst_qcvideodec_decode_buffer(Gstqcvideodec *decode_context, GstBuffer * buf,GstVideoCodecFrame * frame);
static int ion_allocate_buffer (enum vdec_buffer buffer_dir,Gstqcvideodec *decoder_cxt);
int free_buffer ( enum vdec_buffer buffer_dir,Gstqcvideodec *decoder_context);
+static gboolean gst_qcvideodec_set_output_buffers (Gstqcvideodec * decoder);
int reconfig =0;
static struct vdec_bufferpayload *temp_input_buffer = NULL;
@@ -489,7 +490,7 @@ static gboolean gst_qcvideodec_set_format (GstVideoDecoder * decoder,GstVideoCod
gst_buffer_pool_set_active(dec->bufpool,TRUE);
} //if(pool == NULL)
/* Create the pool End */
- gst_qcvideodec_set_buffers (dec);
+ gst_qcvideodec_start_decoder(dec);
/* send the header info */
memcpy(dec->ptr_inputbuffer [0].bufferaddr,minfo.data,minfo.size);
frameinfo.bufferaddr = dec->ptr_inputbuffer [0].bufferaddr;
@@ -533,45 +534,28 @@ static gboolean gst_qcvideodec_create_buf_pool(Gstqcvideodec * decoder)
return TRUE;
}
-static gboolean gst_qcvideodec_set_buffers (Gstqcvideodec * decoder)
+
+static gboolean gst_qcvideodec_set_output_buffers (Gstqcvideodec * decoder)
{
struct vdec_ioctl_msg ioctl_msg = {NULL,NULL};
- struct vdec_input_frameinfo frameinfo;
struct vdec_fillbuffer_cmd fillbuffer;
- unsigned int i = 0;
+ unsigned int index = 0;
Gstqcvideodec *dec = GST_QCVIDEODEC (decoder);
- memset ((unsigned char*)&frameinfo,0,sizeof (struct vdec_input_frameinfo));
memset ((unsigned char*)&fillbuffer,0,sizeof (struct vdec_fillbuffer_cmd));
- if (dec == NULL)
- {
- return -1;
- }
-
- if (ioctl (dec->video_driver_fd,VDEC_IOCTL_CMD_START,NULL) < 0)
- {
- GST_ERROR("\n Start failed");
- return FALSE;
- }
-
- GST_DEBUG("\n Start Issued successfully waiting for Start Done");
- /*Wait for Start command response*/
- sem_wait (&dec->sem_synchronize);
-
- /*Push output Buffers*/
- i = 0;
- while (i < dec->output_buffer.actualcount)
+ /*Push output Buffers*/
+ while (index < dec->output_buffer.actualcount)
{
fillbuffer.buffer.buffer_len =
- dec->ptr_outputbuffer [i].buffer_len;
+ dec->ptr_outputbuffer [index].buffer_len;
fillbuffer.buffer.bufferaddr =
- dec->ptr_outputbuffer [i].bufferaddr;
+ dec->ptr_outputbuffer [index].bufferaddr;
fillbuffer.buffer.offset =
- dec->ptr_outputbuffer [i].offset;
+ dec->ptr_outputbuffer [index].offset;
fillbuffer.buffer.pmem_fd =
- dec->ptr_outputbuffer [i].pmem_fd;
- fillbuffer.client_data = (void *)&dec->ptr_respbuffer[i];
+ dec->ptr_outputbuffer [index].pmem_fd;
+ fillbuffer.client_data = (void *)&dec->ptr_respbuffer[index];
ioctl_msg.in = &fillbuffer;
ioctl_msg.out = NULL;
@@ -582,11 +566,36 @@ static gboolean gst_qcvideodec_set_buffers (Gstqcvideodec * decoder)
GST_ERROR("\n Decoder frame failed");
return FALSE;
}
- i++;
+ index++;
}
GST_DEBUG("\n output buffers set properly");
return TRUE;
}
+static gboolean gst_qcvideodec_start_decoder(Gstqcvideodec * decoder)
+{
+ struct vdec_fillbuffer_cmd fillbuffer;
+ Gstqcvideodec *dec = GST_QCVIDEODEC (decoder);
+
+ memset ((unsigned char*)&fillbuffer,0,sizeof (struct vdec_fillbuffer_cmd));
+
+ if (dec == NULL)
+ {
+ return -1;
+ }
+
+ if (ioctl (dec->video_driver_fd,VDEC_IOCTL_CMD_START,NULL) < 0)
+ {
+ GST_ERROR("\n Start failed");
+ return FALSE;
+ }
+
+ GST_DEBUG("\n Start Issued successfully waiting for Start Done");
+ /*Wait for Start command response*/
+ sem_wait (&dec->sem_synchronize);
+ gst_qcvideodec_set_output_buffers (dec);
+
+ return TRUE;
+}
static gboolean gst_qcvideodec_close (GstVideoDecoder *decoder)
{
Gstqcvideodec *dec = GST_QCVIDEODEC (decoder);
@@ -1113,7 +1122,6 @@ int allocate_reconfig_buff(Gstqcvideodec *dec)
// struct video_decoder_context *decode_context = NULL;
struct vdec_input_frameinfo frameinfo;
struct vdec_fillbuffer_cmd fillbuffer;
- unsigned int i = 0;
Gstqcvideodec *decode_context = GST_QCVIDEODEC (dec);
memset ((unsigned char*)&frameinfo,0,sizeof (struct vdec_input_frameinfo));
@@ -1139,6 +1147,7 @@ int allocate_reconfig_buff(Gstqcvideodec *dec)
decode_context->output_buffer.alignment,\
decode_context->output_buffer.buf_poolid,\
decode_context->output_buffer.meta_buffer_size);
+
vdec_alloc_h264_mv(decode_context);
if ((ion_allocate_buffer(VDEC_BUFFER_TYPE_OUTPUT,
decode_context)== -1))
@@ -1146,35 +1155,12 @@ int allocate_reconfig_buff(Gstqcvideodec *dec)
GST_ERROR("\n Error in output Buffer allocation");
return -1;
}
- i = 0;
- while (i < decode_context->output_buffer.actualcount)
- {
- fillbuffer.buffer.buffer_len =
- decode_context->ptr_outputbuffer [i].buffer_len;
- fillbuffer.buffer.bufferaddr =
- decode_context->ptr_outputbuffer [i].bufferaddr;
- fillbuffer.buffer.offset =
- decode_context->ptr_outputbuffer [i].offset;
- fillbuffer.buffer.pmem_fd =
- decode_context->ptr_outputbuffer [i].pmem_fd;
- fillbuffer.client_data = (void *)&decode_context->ptr_respbuffer[i];
- GST_DEBUG("\n Client Data on output = %p and bufferaddr = %p",fillbuffer.client_data,decode_context->ptr_outputbuffer [i].bufferaddr);
- ioctl_msg.in = &fillbuffer;
- ioctl_msg.out = NULL;
-
- if (ioctl (decode_context->video_driver_fd,
- VDEC_IOCTL_FILL_OUTPUT_BUFFER,&ioctl_msg) < 0)
- {
- GST_ERROR("\n Decoder frame failed");
- return -1;
- }
- i++;
- }
- gst_buffer_pool_set_active(decode_context->bufpool,FALSE);
- gst_object_unref(decode_context->bufpool);
+ gst_qcvideodec_set_output_buffers(decode_context);
+ gst_buffer_pool_set_active(decode_context->bufpool,FALSE);
+ gst_object_unref(decode_context->bufpool);
- gst_qcvideodec_create_buf_pool(decode_context);
- gst_buffer_pool_set_active(decode_context->bufpool,TRUE);
+ gst_qcvideodec_create_buf_pool(decode_context);
+ gst_buffer_pool_set_active(decode_context->bufpool,TRUE);
return 1;
}