dvb: mpq: Add sharing of video buffer with dvb-video

When video data is tunneled internally between demux and dvb-video,
the ION buffer holding the video data needs to be shared with
dvb-video driver.

Change-Id: Ia6517bd9cbf284e1314d5275eccc6813dc8d3096
Signed-off-by: Hamad Kadmany <hkadmany@codeaurora.org>
This commit is contained in:
Hamad Kadmany
2012-12-25 15:51:00 +02:00
committed by Stephen Boyd
parent a452cd5bc4
commit b652e718d8

View File

@@ -1072,11 +1072,21 @@ static int mpq_dmx_init_internal_buffers(
feed_data->buffer_desc.desc[0].size = actual_buffer_size;
feed_data->buffer_desc.desc[0].read_ptr = 0;
feed_data->buffer_desc.desc[0].write_ptr = 0;
/* TODO: share handle using ion_share_dma_buf */
feed_data->buffer_desc.desc[0].handle = -1;
feed_data->buffer_desc.desc[0].handle =
ion_share_dma_buf(client, temp_handle);
if (IS_ERR_VALUE(feed_data->buffer_desc.desc[0].handle)) {
MPQ_DVB_ERR_PRINT(
"%s: FAILED to share payload buffer %d\n",
__func__, ret);
ret = -ENOMEM;
goto init_failed_unmap_payload_buffer;
}
return 0;
init_failed_unmap_payload_buffer:
ion_unmap_kernel(client, temp_handle);
feed_data->buffer_desc.desc[0].base = NULL;
init_failed_free_payload_buffer:
ion_free(client, temp_handle);
feed_data->buffer_desc.ion_handle[0] = NULL;
@@ -1254,6 +1264,7 @@ static void mpq_dmx_release_streambuffer(
{
int buf_num = 0;
int i;
struct dmx_decoder_buffers *dec_buffs = feed->feed.ts.decoder_buffers;
mpq_adapter_unregister_stream_if(feed_data->stream_interface);
@@ -1268,7 +1279,23 @@ static void mpq_dmx_release_streambuffer(
feed_data->buffer_desc.ion_handle[i]);
feed_data->buffer_desc.desc[i].base = NULL;
}
/* TODO: un-share kernel buffer handle */
/*
* Un-share the buffer if kernel it the one that
* shared it.
*/
if (0 == dec_buffs->buffers_num) {
struct file *shared_file = fget(
feed_data->buffer_desc.desc[i].handle);
if (shared_file)
fput(shared_file);
else
MPQ_DVB_ERR_PRINT(
"%s: failed to get shared-file handle\n",
__func__);
}
ion_free(client, feed_data->buffer_desc.ion_handle[i]);
feed_data->buffer_desc.ion_handle[i] = NULL;
feed_data->buffer_desc.desc[i].size = 0;