Loading drivers/media/dvb-core/dmxdev.c +25 −19 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading @@ -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: Loading Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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); } } Loading Loading @@ -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); Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } } Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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); Loading Loading
drivers/media/dvb-core/dmxdev.c +25 −19 Original line number Original line Diff line number Diff line Loading @@ -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); Loading Loading @@ -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: Loading Loading @@ -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) { Loading Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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); Loading Loading @@ -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) { Loading Loading @@ -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); } } Loading Loading @@ -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); Loading Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } } Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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); Loading