diff options
author | prasanth kamuju <prasanth.kamuju@linaro.org> | 2015-01-22 14:27:06 +0530 |
---|---|---|
committer | prasanth kamuju <prasanth.kamuju@linaro.org> | 2015-01-22 14:27:06 +0530 |
commit | 8beb4e6e6171b03520576eeafd3055c80daa7465 (patch) | |
tree | 14857a96cb0a8380125daa2fff26608ec2ae7911 | |
parent | bd0eaa1149d8a0c6252b05fff3cbd2005f0efe60 (diff) |
gstqcvideodec: Redundant code moved under common function.
-rw-r--r-- | src/gstqcvideodec.c | 104 |
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; } |