Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 879c4dca authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "media: dvb: Add offset to mpq_streambuffer data disposal callback"

parents d5070650 21d21c09
Loading
Loading
Loading
Loading
+26 −7
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ int mpq_streambuffer_init(
	sbuff->buffers = data_buffers;
	sbuff->pending_buffers_count = 0;
	sbuff->buffers_num = data_buff_num;
	sbuff->cb = NULL;
	dvb_ringbuffer_init(&sbuff->packet_data, packet_buff, packet_buff_size);

	return 0;
@@ -222,9 +223,6 @@ int mpq_streambuffer_pkt_dispose(
	spin_unlock(&sbuff->raw_data.lock);
	spin_unlock(&sbuff->packet_data.lock);

	if (sbuff->cb)
		sbuff->cb(sbuff, &packet, sbuff->cb_user_data);

	return 0;
}
EXPORT_SYMBOL(mpq_streambuffer_pkt_dispose);
@@ -414,6 +412,7 @@ ssize_t mpq_streambuffer_data_read(
				u8 *buf, size_t len)
{
	ssize_t actual_len = 0;
	u32 offset;

	if ((NULL == sbuff) || (NULL == buf))
		return -EINVAL;
@@ -436,6 +435,7 @@ ssize_t mpq_streambuffer_data_read(
			return -EPERM;
		}

		offset = sbuff->raw_data.pread;
		actual_len = dvb_ringbuffer_avail(&sbuff->raw_data);
		if (actual_len < len)
			len = actual_len;
@@ -463,10 +463,15 @@ ssize_t mpq_streambuffer_data_read(
		if (actual_len < len)
			len = actual_len;
		memcpy(buf, desc->base + desc->read_ptr, len);
		offset = desc->read_ptr;
		desc->read_ptr += len;
	}

	spin_unlock(&sbuff->raw_data.lock);

	if (sbuff->cb)
		sbuff->cb(sbuff, offset, len, sbuff->cb_user_data);

	return len;
}
EXPORT_SYMBOL(mpq_streambuffer_data_read);
@@ -477,6 +482,7 @@ ssize_t mpq_streambuffer_data_read_user(
		u8 __user *buf, size_t len)
{
	ssize_t actual_len = 0;
	u32 offset;

	if ((NULL == sbuff) || (NULL == buf))
		return -EINVAL;
@@ -493,6 +499,7 @@ ssize_t mpq_streambuffer_data_read_user(
		if (NULL == sbuff->raw_data.data)
			return -EPERM;

		offset = sbuff->raw_data.pread;
		actual_len = dvb_ringbuffer_avail(&sbuff->raw_data);
		if (actual_len < len)
			len = actual_len;
@@ -519,9 +526,13 @@ ssize_t mpq_streambuffer_data_read_user(
		if (copy_to_user(buf, desc->base + desc->read_ptr, len))
			return -EFAULT;

		offset = desc->read_ptr;
		desc->read_ptr += len;
	}

	if (sbuff->cb)
		sbuff->cb(sbuff, offset, len, sbuff->cb_user_data);

	return len;
}
EXPORT_SYMBOL(mpq_streambuffer_data_read_user);
@@ -530,6 +541,8 @@ int mpq_streambuffer_data_read_dispose(
			struct mpq_streambuffer *sbuff,
			size_t len)
{
	u32 offset;

	if (NULL == sbuff)
		return -EINVAL;

@@ -547,6 +560,7 @@ int mpq_streambuffer_data_read_dispose(
			return -EINVAL;
		}

		offset = sbuff->raw_data.pread;
		DVB_RINGBUFFER_SKIP(&sbuff->raw_data, len);
		wake_up_all(&sbuff->raw_data.queue);
	} else {
@@ -554,6 +568,8 @@ int mpq_streambuffer_data_read_dispose(

		desc = (struct mpq_streambuffer_buffer_desc *)
				&sbuff->raw_data.data[sbuff->raw_data.pread];
		offset = desc->read_ptr;

		if ((desc->read_ptr + len) > desc->size)
			desc->read_ptr = desc->size;
		else
@@ -562,6 +578,9 @@ int mpq_streambuffer_data_read_dispose(

	spin_unlock(&sbuff->raw_data.lock);

	if (sbuff->cb)
		sbuff->cb(sbuff, offset, len, sbuff->cb_user_data);

	return 0;
}
EXPORT_SYMBOL(mpq_streambuffer_data_read_dispose);
@@ -604,9 +623,9 @@ int mpq_streambuffer_get_buffer_handle(
EXPORT_SYMBOL(mpq_streambuffer_get_buffer_handle);


int mpq_streambuffer_register_pkt_dispose(
int mpq_streambuffer_register_data_dispose(
	struct mpq_streambuffer *sbuff,
	mpq_streambuffer_pkt_dispose_cb cb_func,
	mpq_streambuffer_dispose_cb cb_func,
	void *user_data)
{
	if ((NULL == sbuff) || (NULL == cb_func))
@@ -617,7 +636,7 @@ int mpq_streambuffer_register_pkt_dispose(

	return 0;
}
EXPORT_SYMBOL(mpq_streambuffer_register_pkt_dispose);
EXPORT_SYMBOL(mpq_streambuffer_register_data_dispose);


ssize_t mpq_streambuffer_data_free(
+3 −4
Original line number Diff line number Diff line
@@ -4639,8 +4639,7 @@ static int mpq_dmx_tspp2_notify_data_read(struct dmx_ts_feed *ts_feed,
}

static void mpq_dmx_tspp2_streambuffer_cb(struct mpq_streambuffer *sbuff,
	struct mpq_streambuffer_packet_header *packet,
	void *user_data)
	u32 offset, size_t len, void *user_data)
{
	int ret;
	struct pipe_info *pipe_info = user_data;
@@ -4654,7 +4653,7 @@ static void mpq_dmx_tspp2_streambuffer_cb(struct mpq_streambuffer *sbuff,
		return;
	}

	ret = mpq_dmx_release_data(pipe_info, packet->raw_data_len);
	ret = mpq_dmx_release_data(pipe_info, len);
	if (ret)
		MPQ_DVB_ERR_PRINT("%s: mpq_dmx_release_data failed, ret=%d\n",
			__func__, ret);
@@ -5449,7 +5448,7 @@ static int mpq_dmx_tspp2_start_filtering(struct dvb_demux_feed *feed)
	}

	if (dvb_dmx_is_video_feed(feed)) {
		ret = mpq_streambuffer_register_pkt_dispose(
		ret = mpq_streambuffer_register_data_dispose(
			mpq_feed->video_info.video_buffer,
			mpq_dmx_tspp2_streambuffer_cb,
			tspp2_feed->main_pipe);
+11 −11
Original line number Diff line number Diff line
@@ -103,19 +103,19 @@
 * - Disposal of packets:
 *      mpq_streambuffer_pkt_dispose(...)
 *
 *   For linear buffer mode, disposing of a packet with data size > 0, causes
 *   the current buffer to be marked as free for writing, and triggers moving to
 *   For linear buffer mode, disposing of a packet with data size > 0,
 *   regardless of the 'dispose_data' parameter, causes the current buffer's
 *   data to be disposed and marked as free for writing, and triggers moving to
 *   the next available buffer, that shall now be the current read buffer.

 *
 */

struct mpq_streambuffer;
struct mpq_streambuffer_packet_header;

typedef void (*mpq_streambuffer_pkt_dispose_cb) (
typedef void (*mpq_streambuffer_dispose_cb) (
	struct mpq_streambuffer *sbuff,
	struct mpq_streambuffer_packet_header *packet,
	u32 offset,
	size_t len,
	void *user_data);

enum mpq_streambuffer_mode {
@@ -143,7 +143,7 @@ struct mpq_streambuffer {
	enum mpq_streambuffer_mode mode;
	u32 buffers_num;
	u32 pending_buffers_count;
	mpq_streambuffer_pkt_dispose_cb cb;
	mpq_streambuffer_dispose_cb cb;
	void *cb_user_data;
};

@@ -422,9 +422,9 @@ ssize_t mpq_streambuffer_data_avail(
 * Returns error status
 * -EINVAL if arguments are invalid
 */
int mpq_streambuffer_register_pkt_dispose(
int mpq_streambuffer_register_data_dispose(
	struct mpq_streambuffer *sbuff,
	mpq_streambuffer_pkt_dispose_cb cb_func,
	mpq_streambuffer_dispose_cb cb_func,
	void *user_data);

/**