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:
committed by
Stephen Boyd
parent
a452cd5bc4
commit
b652e718d8
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user