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

Commit b0e27e3d authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "media/dvb: Add checks if transport stream is existing"

parents 9b699e0a 4857bb9c
Loading
Loading
Loading
Loading
+25 −19
Original line number Original line Diff line number Diff line
@@ -135,7 +135,7 @@ static inline void dvb_dmxdev_notify_data_read(
		feed = list_first_entry(&filter->feed.ts,
		feed = list_first_entry(&filter->feed.ts,
					struct dmxdev_feed, next);
					struct dmxdev_feed, next);


		if (feed->ts->notify_data_read)
		if (feed->ts && feed->ts->notify_data_read)
			feed->ts->notify_data_read(
			feed->ts->notify_data_read(
						feed->ts,
						feed->ts,
						bytes_read);
						bytes_read);
@@ -599,6 +599,7 @@ static void dvb_dvr_oob_cmd(struct dmxdev *dmxdev, struct dmx_oob_command *cmd)
		case DMXDEV_TYPE_PES:
		case DMXDEV_TYPE_PES:
			feed = list_first_entry(&filter->feed.ts,
			feed = list_first_entry(&filter->feed.ts,
						struct dmxdev_feed, next);
						struct dmxdev_feed, next);
			if (feed->ts && feed->ts->oob_command)
				feed->ts->oob_command(feed->ts, cmd);
				feed->ts->oob_command(feed->ts, cmd);
			break;
			break;
		case DMXDEV_TYPE_NONE:
		case DMXDEV_TYPE_NONE:
@@ -1351,7 +1352,7 @@ static int dvb_dmxdev_flush_data(struct dmxdev_filter *filter,
		feed = list_first_entry(&filter->feed.ts,
		feed = list_first_entry(&filter->feed.ts,
			struct dmxdev_feed, next);
			struct dmxdev_feed, next);


		if (feed->ts->flush_buffer)
		if (feed->ts && feed->ts->flush_buffer)
			return feed->ts->flush_buffer(feed->ts, length);
			return feed->ts->flush_buffer(feed->ts, length);
	} else if (filter->type == DMXDEV_TYPE_SEC &&
	} else if (filter->type == DMXDEV_TYPE_SEC &&
		filter->feed.sec.feed->flush_buffer) {
		filter->feed.sec.feed->flush_buffer) {
@@ -2064,7 +2065,7 @@ static int dvb_dmxdev_set_indexing_params(
			ts_feed = feed;
			ts_feed = feed;
			ts_feed->idx_params = *idx_params;
			ts_feed->idx_params = *idx_params;
			if ((dmxdevfilter->state == DMXDEV_STATE_GO) &&
			if ((dmxdevfilter->state == DMXDEV_STATE_GO) &&
				ts_feed->ts->set_idx_params)
				ts_feed->ts && ts_feed->ts->set_idx_params)
				ret = ts_feed->ts->set_idx_params(
				ret = ts_feed->ts->set_idx_params(
						ts_feed->ts, idx_params);
						ts_feed->ts, idx_params);
			break;
			break;
@@ -2096,7 +2097,7 @@ static int dvb_dmxdev_get_scrambling_bits(struct dmxdev_filter *filter,


	list_for_each_entry(feed, &filter->feed.ts, next) {
	list_for_each_entry(feed, &filter->feed.ts, next) {
		if (feed->pid == scrambling_bits->pid) {
		if (feed->pid == scrambling_bits->pid) {
			if (feed->ts->get_scrambling_bits)
			if (feed->ts && feed->ts->get_scrambling_bits)
				return feed->ts->get_scrambling_bits(feed->ts,
				return feed->ts->get_scrambling_bits(feed->ts,
						&scrambling_bits->value);
						&scrambling_bits->value);
			return -EINVAL;
			return -EINVAL;
@@ -2131,6 +2132,7 @@ static void dvb_dmxdev_ts_insertion_work(struct work_struct *worker)
	mutex_unlock(&ts_buffer->dmxdevfilter->mutex);
	mutex_unlock(&ts_buffer->dmxdevfilter->mutex);


	if (ts_buffer->size < free_bytes)
	if (ts_buffer->size < free_bytes)
		if (ts && ts->ts_insertion_insert_buffer)
			ts->ts_insertion_insert_buffer(ts,
			ts->ts_insertion_insert_buffer(ts,
				ts_buffer->buffer, ts_buffer->size);
				ts_buffer->buffer, ts_buffer->size);


@@ -2242,7 +2244,7 @@ static int dvb_dmxdev_set_ts_insertion(
	feed = list_first_entry(&dmxdevfilter->feed.ts,
	feed = list_first_entry(&dmxdevfilter->feed.ts,
				struct dmxdev_feed, next);
				struct dmxdev_feed, next);


	if (first_buffer && feed->ts->ts_insertion_init)
	if (first_buffer && feed->ts && feed->ts->ts_insertion_init)
		ret = feed->ts->ts_insertion_init(feed->ts);
		ret = feed->ts->ts_insertion_init(feed->ts);


	if (!ret) {
	if (!ret) {
@@ -2296,7 +2298,7 @@ static int dvb_dmxdev_abort_ts_insertion(struct dmxdev_filter *dmxdevfilter,
		if (list_empty(&dmxdevfilter->insertion_buffers)) {
		if (list_empty(&dmxdevfilter->insertion_buffers)) {
			feed = list_first_entry(&dmxdevfilter->feed.ts,
			feed = list_first_entry(&dmxdevfilter->feed.ts,
						struct dmxdev_feed, next);
						struct dmxdev_feed, next);
			if (feed->ts->ts_insertion_terminate)
			if (feed->ts && feed->ts->ts_insertion_terminate)
				ret = feed->ts->ts_insertion_terminate(
				ret = feed->ts->ts_insertion_terminate(
							feed->ts);
							feed->ts);
		}
		}
@@ -2503,7 +2505,7 @@ static int dvb_dmxdev_get_buffer_status(
					struct dmxdev_feed, next);
					struct dmxdev_feed, next);


		/* Ask for status of decoder's buffer from underlying HW */
		/* Ask for status of decoder's buffer from underlying HW */
		if (feed->ts->get_decoder_buff_status)
		if (feed->ts && feed->ts->get_decoder_buff_status)
			ret = feed->ts->get_decoder_buff_status(
			ret = feed->ts->get_decoder_buff_status(
					feed->ts,
					feed->ts,
					dmx_buffer_status);
					dmx_buffer_status);
@@ -3196,6 +3198,7 @@ static int dvb_dmxdev_feed_stop(struct dmxdev_filter *dmxdevfilter)
				if (!dmxdevfilter->dev->dvr_feeds_count)
				if (!dmxdevfilter->dev->dvr_feeds_count)
					dmxdevfilter->dev->dvr_feed = NULL;
					dmxdevfilter->dev->dvr_feed = NULL;
			}
			}
			if (feed->ts && feed->ts->stop_filtering)
				feed->ts->stop_filtering(feed->ts);
				feed->ts->stop_filtering(feed->ts);
		}
		}
		break;
		break;
@@ -3219,12 +3222,14 @@ static int dvb_dmxdev_feed_start(struct dmxdev_filter *filter)
			filter->feed.sec.feed);
			filter->feed.sec.feed);
	case DMXDEV_TYPE_PES:
	case DMXDEV_TYPE_PES:
		list_for_each_entry(feed, &filter->feed.ts, next) {
		list_for_each_entry(feed, &filter->feed.ts, next) {
			if (feed->ts && feed->ts->start_filtering) {
				ret = feed->ts->start_filtering(feed->ts);
				ret = feed->ts->start_filtering(feed->ts);
				if (ret < 0) {
				if (ret < 0) {
					dvb_dmxdev_feed_stop(filter);
					dvb_dmxdev_feed_stop(filter);
					return ret;
					return ret;
				}
				}
			}
			}
		}
		break;
		break;
	default:
	default:
		return -EINVAL;
		return -EINVAL;
@@ -3289,7 +3294,7 @@ static int dvb_dmxdev_filter_stop(struct dmxdev_filter *dmxdevfilter)
			list_for_each_entry(ts_buffer,
			list_for_each_entry(ts_buffer,
					&dmxdevfilter->insertion_buffers, next)
					&dmxdevfilter->insertion_buffers, next)
				dvb_dmxdev_cancel_ts_insertion(ts_buffer);
				dvb_dmxdev_cancel_ts_insertion(ts_buffer);
			if (feed->ts->ts_insertion_terminate)
			if (feed->ts && feed->ts->ts_insertion_terminate)
				feed->ts->ts_insertion_terminate(feed->ts);
				feed->ts->ts_insertion_terminate(feed->ts);
		}
		}


@@ -3754,7 +3759,7 @@ static int dvb_dmxdev_filter_start(struct dmxdev_filter *filter)
			struct dmxdev_feed, next);
			struct dmxdev_feed, next);


		ret = 0;
		ret = 0;
		if (feed->ts->ts_insertion_init)
		if (feed->ts && feed->ts->ts_insertion_init)
			ret = feed->ts->ts_insertion_init(feed->ts);
			ret = feed->ts->ts_insertion_init(feed->ts);
		if (!ret) {
		if (!ret) {
			list_for_each_entry(ts_buffer,
			list_for_each_entry(ts_buffer,
@@ -3939,7 +3944,7 @@ static int dvb_dmxdev_remove_pid(struct dmxdev *dmxdev,


	list_for_each_entry_safe(feed, tmp, &filter->feed.ts, next) {
	list_for_each_entry_safe(feed, tmp, &filter->feed.ts, next) {
		if (feed->pid == pid) {
		if (feed->pid == pid) {
			if (feed->ts != NULL) {
			if (feed->ts != NULL && feed->ts->stop_filtering) {
				feed->ts->stop_filtering(feed->ts);
				feed->ts->stop_filtering(feed->ts);
				filter->dev->demux->release_ts_feed(
				filter->dev->demux->release_ts_feed(
							filter->dev->demux,
							filter->dev->demux,
@@ -4037,6 +4042,7 @@ static int dvb_dmxdev_set_cipher(struct dmxdev *dmxdev,
				ts_feed = feed;
				ts_feed = feed;
				ts_feed->cipher_ops = *cipher_ops;
				ts_feed->cipher_ops = *cipher_ops;
				if (filter->state == DMXDEV_STATE_GO &&
				if (filter->state == DMXDEV_STATE_GO &&
						ts_feed->ts &&
						ts_feed->ts->set_cipher_ops)
						ts_feed->ts->set_cipher_ops)
					ts_feed->ts->set_cipher_ops(
					ts_feed->ts->set_cipher_ops(
						ts_feed->ts, cipher_ops);
						ts_feed->ts, cipher_ops);