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

Commit 752a69d0 authored by Udaya Mallavarapu's avatar Udaya Mallavarapu
Browse files

media: dvb-core: dvb dmxdev filter callback function changes



The demux driver migration from kernel 3.18 to 4.4 added
extra parameter to dmx_ts_cb, dmx_section_cb callback functions
to send demux status to dmxdev filters. Revert back the change
to original prototype.

CRs-Fixed: 1079183
Change-Id: I4bdced9942e6524e8cc21410532fa7231049454f
Signed-off-by: default avatarUdaya Mallavarapu <udaym@codeaurora.org>
parent c6b7d967
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -407,8 +407,7 @@ typedef int (*dmx_ts_cb)(const u8 *buffer1,
			 size_t buffer1_length,
			 const u8 *buffer2,
			 size_t buffer2_length,
			 struct dmx_ts_feed *source,
			enum dmx_success success);
			 struct dmx_ts_feed *source);

/**
 * typedef dmx_section_cb - DVB demux TS filter callback function prototype
@@ -449,8 +448,7 @@ typedef int (*dmx_section_cb)(const u8 *buffer1,
			      size_t buffer1_len,
			      const u8 *buffer2,
			      size_t buffer2_len,
			      struct dmx_section_filter *source,
			enum dmx_success success);
			      struct dmx_section_filter *source);

typedef int (*dmx_ts_fullness) (
				struct dmx_ts_feed *source,
+8 −43
Original line number Diff line number Diff line
@@ -2603,15 +2603,15 @@ static void dvb_dmxdev_filter_timer(struct dmxdev_filter *dmxdevfilter)

static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
				       const u8 *buffer2, size_t buffer2_len,
				       struct dmx_section_filter *filter,
				       enum dmx_success success)
				       struct dmx_section_filter *filter)
{
	struct dmxdev_filter *dmxdevfilter = filter->priv;
	struct dmx_filter_event event;
	ssize_t free;


	if (!dmxdevfilter) {
		pr_err("%s: null filter. status=%d\n", __func__, success);
		pr_err("%s: null filter.\n", __func__);
		return -EINVAL;
	}

@@ -2633,7 +2633,7 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
	}

	if ((buffer1_len + buffer2_len) == 0) {
		if (success == DMX_CRC_ERROR) {
		if (buffer1 == NULL && buffer2 == NULL) {
			/* Section was dropped due to CRC error */
			event.type = DMX_EVENT_SECTION_CRC_ERROR;
			dvb_dmxdev_add_event(&dmxdevfilter->events, &event);
@@ -2671,11 +2671,6 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,
	event.params.section.actual_length =
		event.params.section.total_length;

	if (success == DMX_MISSED_ERROR)
		event.params.section.flags = DMX_FILTER_CC_ERROR;
	else
		event.params.section.flags = 0;

	dvb_dmxdev_add_event(&dmxdevfilter->events, &event);

	if (dmxdevfilter->params.sec.flags & DMX_ONESHOT)
@@ -2687,8 +2682,7 @@ static int dvb_dmxdev_section_callback(const u8 *buffer1, size_t buffer1_len,

static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
				  const u8 *buffer2, size_t buffer2_len,
				  struct dmx_ts_feed *feed,
				enum dmx_success success)
				  struct dmx_ts_feed *feed)
{
	struct dmxdev_filter *dmxdevfilter = feed->priv;
	struct dvb_ringbuffer *buffer;
@@ -2697,11 +2691,10 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
	ssize_t free;

	if (!dmxdevfilter) {
		pr_err("%s: null filter (feed->is_filtering=%d) status=%d\n",
			__func__, feed->is_filtering, success);
		pr_err("%s: null filter (feed->is_filtering=%d)\n",
			__func__, feed->is_filtering);
		return -EINVAL;
	}

	spin_lock(&dmxdevfilter->dev->lock);

	if (dmxdevfilter->params.pes.output == DMX_OUT_DECODER ||
@@ -2725,36 +2718,8 @@ static int dvb_dmxdev_ts_callback(const u8 *buffer1, size_t buffer1_len,
		return buffer->error;
	}

	if (dmxdevfilter->params.pes.output == DMX_OUT_TAP) {
		if (success == DMX_OK && !events->current_event_data_size) {
			events->current_event_start_offset = buffer->pwrite;
		} else if (success == DMX_OK_PES_END) {
			event.type = DMX_EVENT_NEW_PES;

			event.params.pes.actual_length =
				events->current_event_data_size;
			event.params.pes.total_length =
				events->current_event_data_size;

			event.params.pes.base_offset =
				events->current_event_start_offset;
			event.params.pes.start_offset =
				events->current_event_start_offset;

			event.params.pes.flags = 0;
			event.params.pes.stc = 0;
			event.params.pes.transport_error_indicator_counter = 0;
			event.params.pes.continuity_error_counter = 0;
			event.params.pes.ts_packets_num = 0;

			/* Do not report zero length PES */
			if (event.params.pes.total_length)
				dvb_dmxdev_add_event(events, &event);
			events->current_event_data_size = 0;
		}
	} else if (!events->current_event_data_size) {
	if (!events->current_event_data_size)
		events->current_event_start_offset = buffer->pwrite;
	}

	/* Verify output buffer has sufficient space, or report overflow */
	free = dvb_ringbuffer_free(buffer);
+8 −8
Original line number Diff line number Diff line
@@ -550,7 +550,7 @@ static inline int dvb_dmx_swfilter_payload(struct dvb_demux_feed *feed,
	if (feed->pusi_seen == 0)
		return 0;

	ret = feed->cb.ts(&buf[p], count, NULL, 0, &feed->feed.ts, DMX_OK);
	ret = feed->cb.ts(&buf[p], count, NULL, 0, &feed->feed.ts);

	/* Verify TS packet was copied successfully */
	if (!ret) {
@@ -582,7 +582,7 @@ static int dvb_dmx_swfilter_sectionfilter(struct dvb_demux_feed *feed,
		return 0;

	return feed->cb.sec(feed->feed.sec.secbuf, feed->feed.sec.seclen,
			    NULL, 0, &f->filter, DMX_OK);
			    NULL, 0, &f->filter);
}

static inline int dvb_dmx_swfilter_section_feed(struct dvb_demux_feed *feed)
@@ -613,7 +613,7 @@ static inline int dvb_dmx_swfilter_section_feed(struct dvb_demux_feed *feed)

			/* Notify on CRC error */
			feed->cb.sec(NULL, 0, NULL, 0,
				&f->filter, DMX_CRC_ERROR);
				&f->filter);

			return -1;
		}
@@ -1256,9 +1256,9 @@ static inline void dvb_dmx_swfilter_output_packet(
	 */
	if (feed->tsp_out_format == DMX_TSP_FORMAT_192_HEAD)
		feed->cb.ts(timestamp, TIMESTAMP_LEN, NULL,
			0, &feed->feed.ts, DMX_OK);
			0, &feed->feed.ts);

	feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts, DMX_OK);
	feed->cb.ts(buf, 188, NULL, 0, &feed->feed.ts);

	/*
	 * if we output 192 packet with timestamp at tail of packet,
@@ -1266,7 +1266,7 @@ static inline void dvb_dmx_swfilter_output_packet(
	 */
	if (feed->tsp_out_format == DMX_TSP_FORMAT_192_TAIL)
		feed->cb.ts(timestamp, TIMESTAMP_LEN, NULL,
			0, &feed->feed.ts, DMX_OK);
			0, &feed->feed.ts);

	if (feed->idx_params.enable)
		dvb_dmx_index(feed, buf, timestamp);
@@ -1749,7 +1749,7 @@ void dvb_dmx_swfilter_raw(struct dvb_demux *demux, const u8 *buf, size_t count)
{
	spin_lock(&demux->lock);

	demux->feed->cb.ts(buf, count, NULL, 0, &demux->feed->feed.ts, DMX_OK);
	demux->feed->cb.ts(buf, count, NULL, 0, &demux->feed->feed.ts);

	spin_unlock(&demux->lock);
}
@@ -2520,7 +2520,7 @@ static int dvbdmx_ts_insertion_insert_buffer(struct dmx_ts_feed *ts_feed,
		return 0;
	}

	feed->cb.ts(data, size, NULL, 0, ts_feed, DMX_OK);
	feed->cb.ts(data, size, NULL, 0, ts_feed);

	spin_unlock(&demux->lock);

+2 −4
Original line number Diff line number Diff line
@@ -761,8 +761,7 @@ static void dvb_net_ule( struct net_device *dev, const u8 *buf, size_t buf_len )

static int dvb_net_ts_callback(const u8 *buffer1, size_t buffer1_len,
			       const u8 *buffer2, size_t buffer2_len,
			       struct dmx_ts_feed *feed,
			       enum dmx_success success)
			       struct dmx_ts_feed *feed)
{
	struct net_device *dev = feed->priv;

@@ -871,8 +870,7 @@ static void dvb_net_sec(struct net_device *dev,

static int dvb_net_sec_callback(const u8 *buffer1, size_t buffer1_len,
		 const u8 *buffer2, size_t buffer2_len,
		 struct dmx_section_filter *filter,
		 enum dmx_success success)
		 struct dmx_section_filter *filter)
{
	struct net_device *dev = filter->priv;

+2 −2
Original line number Diff line number Diff line
@@ -4186,7 +4186,7 @@ static int mpq_sdmx_section_filtering(struct mpq_feed *mpq_feed,
		mpq_feed->sdmx_buf.size) {
		feed->cb.sec(&mpq_feed->sdmx_buf.data[mpq_feed->sdmx_buf.pread],
			header->payload_length,
			NULL, 0, &f->filter, DMX_OK);
			NULL, 0, &f->filter);
	} else {
		int split = mpq_feed->sdmx_buf.size - mpq_feed->sdmx_buf.pread;

@@ -4194,7 +4194,7 @@ static int mpq_sdmx_section_filtering(struct mpq_feed *mpq_feed,
			split,
			&mpq_feed->sdmx_buf.data[0],
			header->payload_length - split,
			&f->filter, DMX_OK);
			&f->filter);
	}

	return 0;