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

Commit f95b9423 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: Change mpq_streambuffer_pkt_write() to return packet index"

parents 7c6e6a2b 1e119436
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -286,7 +286,7 @@ int mpq_streambuffer_pkt_write(
	spin_unlock(&sbuff->packet_data.lock);
	wake_up_all(&sbuff->packet_data.queue);

	return 0;
	return idx;
}
EXPORT_SYMBOL(mpq_streambuffer_pkt_write);

+82 −87
Original line number Diff line number Diff line
@@ -1477,7 +1477,6 @@ int mpq_dmx_init_video_feed(struct mpq_feed *mpq_feed)
	feed_data->continuity_errs = 0;
	feed_data->ts_packets_num = 0;
	feed_data->ts_dropped_bytes = 0;
	feed_data->last_pkt_index = -1;

	mpq_demux->decoder_stat[feed_data->stream_interface].drop_count = 0;
	mpq_demux->decoder_stat[feed_data->stream_interface].out_count = 0;
@@ -2199,9 +2198,9 @@ static inline void mpq_dmx_prepare_es_event_data(
			struct mpq_adapter_video_meta_data *meta_data,
			struct mpq_video_feed_info *feed_data,
			struct mpq_streambuffer *stream_buffer,
			struct dmx_data_ready *data)
			struct dmx_data_ready *data,
			int cookie)
{
	size_t len = 0;
	struct dmx_pts_dts_info *pts_dts;

	if (meta_data->packet_type == DMX_PES_PACKET) {
@@ -2218,15 +2217,7 @@ static inline void mpq_dmx_prepare_es_event_data(

	data->data_length = 0;
	data->buf.handle = packet->raw_data_handle;

	/* this has to succeed when called here, after packet was written */
	data->buf.cookie = mpq_streambuffer_pkt_next(stream_buffer,
				feed_data->last_pkt_index, &len);
	if (data->buf.cookie < 0)
		MPQ_DVB_DBG_PRINT(
			"%s: received invalid packet index %d\n",
			__func__, data->buf.cookie);

	data->buf.cookie = cookie;
	data->buf.offset = packet->raw_data_offset;
	data->buf.len = packet->raw_data_len;
	data->buf.pts_exists = pts_dts->pts_exist;
@@ -2239,9 +2230,6 @@ static inline void mpq_dmx_prepare_es_event_data(
	data->buf.ts_dropped_bytes = feed_data->ts_dropped_bytes;
	data->status = DMX_OK_DECODER_BUF;

	/* save for next time: */
	feed_data->last_pkt_index = data->buf.cookie;

	MPQ_DVB_DBG_PRINT("%s: cookie=%d\n", __func__, data->buf.cookie);

	/* reset counters */
@@ -2301,6 +2289,7 @@ static void mpq_dmx_decoder_frame_closure(struct mpq_demux *mpq_demux,
	struct mpq_video_feed_info *feed_data;
	struct dvb_demux_feed *feed = mpq_feed->dvb_demux_feed;
	struct dmx_data_ready data;
	int cookie;

	feed_data = &mpq_feed->video_info;

@@ -2349,14 +2338,17 @@ static void mpq_dmx_decoder_frame_closure(struct mpq_demux *mpq_demux,
		mpq_dmx_update_decoder_stat(mpq_feed);

		/* Writing meta-data that includes the framing information */
		if (mpq_streambuffer_pkt_write(stream_buffer, &packet,
			(u8 *)&meta_data) < 0)
			MPQ_DVB_ERR_PRINT("%s: Couldn't write packet\n",
				__func__);

		mpq_dmx_prepare_es_event_data(&packet, &meta_data, feed_data,
			stream_buffer, &data);
		cookie = mpq_streambuffer_pkt_write(stream_buffer, &packet,
			(u8 *)&meta_data);
		if (cookie >= 0) {
			mpq_dmx_prepare_es_event_data(&packet, &meta_data,
				feed_data, stream_buffer, &data, cookie);
			feed->data_ready_cb.ts(&feed->feed.ts, &data);
		} else {
			MPQ_DVB_ERR_PRINT(
				"%s: mpq_streambuffer_pkt_write failed, ret=%d\n",
				__func__, cookie);
		}
	}

	spin_unlock(&feed_data->video_buffer_lock);
@@ -2378,6 +2370,7 @@ static void mpq_dmx_decoder_pes_closure(struct mpq_demux *mpq_demux,
	struct mpq_video_feed_info *feed_data;
	struct dvb_demux_feed *feed = mpq_feed->dvb_demux_feed;
	struct dmx_data_ready data;
	int cookie;

	feed_data = &mpq_feed->video_info;

@@ -2416,18 +2409,20 @@ static void mpq_dmx_decoder_pes_closure(struct mpq_demux *mpq_demux,

		mpq_dmx_update_decoder_stat(mpq_feed);

		if (mpq_streambuffer_pkt_write(stream_buffer, &packet,
			(u8 *)&meta_data) < 0)
			MPQ_DVB_ERR_PRINT("%s: Couldn't write packet\n",
				__func__);

		cookie = mpq_streambuffer_pkt_write(stream_buffer, &packet,
			(u8 *)&meta_data);
		if (cookie >= 0) {
			/* Save write offset where new PES will begin */
			mpq_streambuffer_get_data_rw_offset(stream_buffer, NULL,
				&feed_data->frame_offset);

		mpq_dmx_prepare_es_event_data(&packet, &meta_data, feed_data,
			stream_buffer, &data);
			mpq_dmx_prepare_es_event_data(&packet, &meta_data,
				feed_data, stream_buffer, &data, cookie);
			feed->data_ready_cb.ts(&feed->feed.ts, &data);
		} else {
			MPQ_DVB_ERR_PRINT(
				"%s: mpq_streambuffer_pkt_write failed, ret=%d\n",
				__func__, cookie);
		}
	}
	/* Reset PES info */
	feed->peslen = 0;
@@ -2809,19 +2804,16 @@ static int mpq_dmx_process_video_packet_framing(
			 * writing meta-data that includes
			 * the framing information
			 */
			if (mpq_streambuffer_pkt_write(stream_buffer,
				&packet,
				(u8 *)&meta_data) < 0) {
			ret = mpq_streambuffer_pkt_write(stream_buffer, &packet,
				(u8 *)&meta_data);
			if (ret < 0) {
				MPQ_DVB_ERR_PRINT(
					"%s: "
					"Couldn't write packet. "
					"Should never happen\n",
					__func__);
			}

					"%s: mpq_streambuffer_pkt_write failed, ret=%d\n",
					__func__, ret);
			} else {
				mpq_dmx_prepare_es_event_data(
					&packet, &meta_data, feed_data,
				stream_buffer, &data);
					stream_buffer, &data, ret);

				feed->data_ready_cb.ts(&feed->feed.ts, &data);

@@ -2829,6 +2821,7 @@ static int mpq_dmx_process_video_packet_framing(
					feed_data->video_buffer,
					NULL,
					&feed_data->frame_offset);
			}

			/*
			 * In linear buffers, after writing the packet
@@ -2936,6 +2929,7 @@ static int mpq_dmx_process_video_packet_no_framing(
	struct mpq_feed *mpq_feed;
	int discontinuity_indicator = 0;
	struct dmx_data_ready data;
	int cookie;

	mpq_demux = feed->demux->priv;
	mpq_feed = feed->priv;
@@ -3006,17 +3000,18 @@ static int mpq_dmx_process_video_packet_no_framing(

				mpq_dmx_update_decoder_stat(mpq_feed);

				if (mpq_streambuffer_pkt_write(
						stream_buffer,
						&packet,
						(u8 *)&meta_data) < 0)
				cookie = mpq_streambuffer_pkt_write(
					stream_buffer, &packet,
					(u8 *)&meta_data);
				if (cookie < 0) {
					MPQ_DVB_ERR_PRINT(
						"%s: "
						"Couldn't write packet. "
						"Should never happen\n",
						__func__);

				/* Save write offset where new PES will begin */
						"%s: mpq_streambuffer_pkt_write failed, ret=%d\n",
						__func__, cookie);
				} else {
					/*
					 * Save write offset where new PES
					 * will begin
					 */
					mpq_streambuffer_get_data_rw_offset(
						stream_buffer,
						NULL,
@@ -3025,15 +3020,14 @@ static int mpq_dmx_process_video_packet_no_framing(
					mpq_dmx_prepare_es_event_data(
						&packet, &meta_data,
						feed_data,
					stream_buffer, &data);
						stream_buffer, &data, cookie);

				feed->data_ready_cb.ts(
					&feed->feed.ts, &data);
					feed->data_ready_cb.ts(&feed->feed.ts,
						&data);
				}
			} else {
				MPQ_DVB_ERR_PRINT(
					"%s: received PUSI"
					"while handling PES header"
					"of previous PES\n",
					"%s: received PUSI while handling PES header of previous PES\n",
					__func__);
			}

@@ -3318,7 +3312,7 @@ int mpq_dmx_decoder_eos_cmd(struct mpq_feed *mpq_feed)
					(u8 *)&oob_meta_data);

	spin_unlock(&feed_data->video_buffer_lock);
	return ret;
	return (ret < 0) ? ret : 0;
}

void mpq_dmx_convert_tts(struct dvb_demux_feed *feed,
@@ -4577,18 +4571,19 @@ static void mpq_sdmx_decoder_filter_results(struct mpq_demux *mpq_demux,
				__func__, ret);
		}
		mpq_dmx_update_decoder_stat(mpq_feed);
		if (mpq_streambuffer_pkt_write(sbuf,
				&packet,
				(u8 *)&meta_data) < 0)
		ret = mpq_streambuffer_pkt_write(sbuf, &packet,
			(u8 *)&meta_data);
		if (ret < 0) {
			MPQ_DVB_ERR_PRINT(
				"%s: Couldn't write packet. Should never happen\n",
				__func__);

				"%s: mpq_streambuffer_pkt_write failed, ret=%d\n",
				__func__, ret);
		} else {
			mpq_dmx_prepare_es_event_data(
				&packet, &meta_data, &mpq_feed->video_info,
			sbuf, &data);
				sbuf, &data, ret);
			MPQ_DVB_DBG_PRINT("%s: Notify ES Event\n", __func__);
			feed->data_ready_cb.ts(&feed->feed.ts, &data);
		}

		spin_unlock(&mpq_feed->video_info.video_buffer_lock);
	}
+0 −3
Original line number Diff line number Diff line
@@ -297,8 +297,6 @@ struct mpq_decoder_buffers_desc {
 * @ts_packets_num: TS packets counter.
 * @ts_dropped_bytes: counts the number of bytes dropped due to insufficient
 * buffer space.
 * @last_pkt_index: used to save the last streambuffer packet index reported in
 * a new elementary stream data event.
 * @prev_stc: STC attached to the previous video TS packet
 */
struct mpq_video_feed_info {
@@ -332,7 +330,6 @@ struct mpq_video_feed_info {
	u32 continuity_errs;
	u32 ts_packets_num;
	u32 ts_dropped_bytes;
	int last_pkt_index;
	u64 prev_stc;
};

+19 −31
Original line number Diff line number Diff line
@@ -3162,13 +3162,12 @@ static int mpq_dmx_tspp2_process_video_headers(struct mpq_feed *mpq_feed,

	ret = mpq_streambuffer_pkt_write(stream_buffer, &packet,
		(u8 *)&meta_data);
	if (ret) {
	if (ret < 0) {
		MPQ_DVB_ERR_PRINT(
			"%s: mpq_streambuffer_pkt_write failed, ret=%d\n",
			__func__, ret);
	} else {
		struct dmx_data_ready data;
		size_t len = 0;

		mpq_dmx_update_decoder_stat(mpq_feed);

@@ -3179,13 +3178,7 @@ static int mpq_dmx_tspp2_process_video_headers(struct mpq_feed *mpq_feed,
		 * The following has to succeed when called here,
		 * after packet was written
		 */
		data.buf.cookie = mpq_streambuffer_pkt_next(stream_buffer,
					feed_data->last_pkt_index, &len);
		if (data.buf.cookie < 0) {
			MPQ_DVB_ERR_PRINT(
				"%s: received invalid packet index %d\n",
				__func__, data.buf.cookie);
		} else {
		data.buf.cookie = ret;
		data.buf.offset = packet.raw_data_offset;
		data.buf.len = packet.raw_data_len;
		data.buf.pts_exists = pts_dts_info->pts_exist;
@@ -3198,17 +3191,12 @@ static int mpq_dmx_tspp2_process_video_headers(struct mpq_feed *mpq_feed,
		data.buf.ts_dropped_bytes = 0;
		data.status = DMX_OK_DECODER_BUF;

			/* save for next time: */
			feed_data->last_pkt_index = data.buf.cookie;

			MPQ_DVB_DBG_PRINT("%s: cookie=%d\n",
				__func__, data.buf.cookie);
		MPQ_DVB_DBG_PRINT("%s: cookie=%d\n", __func__, data.buf.cookie);

		ret = mpq_dmx_tspp2_ts_event_check(feed, header_pipe);
		if (!ret)
			feed->data_ready_cb.ts(&feed->feed.ts, &data);
	}
	}

	return ret ? ret : 1;
}