static int mpq_sw_dmx_init(struct dvb_adapter *mpq_adapter, struct mpq_demux *mpq_demux) { int ret; struct dvb_demux *dvb_demux = &mpq_demux->demux; /* Set the kernel-demux object capabilities */ mpq_demux->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_PES_FILTERING | DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING | DMX_CRC_CHECKING | DMX_TS_DESCRAMBLING; mpq_demux->decoder_alloc_flags = ION_FLAG_CACHED; /* Set dvb-demux "virtual" function pointers */ dvb_demux->priv = (void *)mpq_demux; dvb_demux->filternum = MPQ_MAX_DMX_FILES; dvb_demux->feednum = MPQ_MAX_DMX_FILES; dvb_demux->start_feed = mpq_sw_dmx_start_filtering; dvb_demux->stop_feed = mpq_sw_dmx_stop_filtering; dvb_demux->write_to_decoder = mpq_sw_dmx_write_to_decoder; dvb_demux->decoder_fullness_init = mpq_dmx_decoder_fullness_init; dvb_demux->decoder_fullness_wait = mpq_dmx_decoder_fullness_wait; dvb_demux->decoder_fullness_abort = mpq_dmx_decoder_fullness_abort; dvb_demux->decoder_buffer_status = mpq_dmx_decoder_buffer_status; dvb_demux->reuse_decoder_buffer = mpq_dmx_reuse_decoder_buffer; dvb_demux->set_cipher_op = mpq_dmx_set_cipher_ops; dvb_demux->oob_command = mpq_dmx_oob_command; dvb_demux->convert_ts = mpq_dmx_convert_tts; dvb_demux->flush_decoder_buffer = NULL; /* Initialize dvb_demux object */ ret = dvb_dmx_init(dvb_demux); if (ret) { MPQ_DVB_ERR_PRINT("%s: dvb_dmx_init failed, ret=%d\n", __func__, ret); goto init_failed; } /* Now initialize the dmx-dev object */ mpq_demux->dmxdev.filternum = MPQ_MAX_DMX_FILES; mpq_demux->dmxdev.demux = &mpq_demux->demux.dmx; mpq_demux->dmxdev.capabilities = DMXDEV_CAP_DUPLEX; mpq_demux->dmxdev.demux->set_source = mpq_sw_dmx_set_source; mpq_demux->dmxdev.demux->get_stc = NULL; mpq_demux->dmxdev.demux->get_caps = mpq_sw_dmx_get_caps; mpq_demux->dmxdev.demux->map_buffer = mpq_dmx_map_buffer; mpq_demux->dmxdev.demux->unmap_buffer = mpq_dmx_unmap_buffer; mpq_demux->dmxdev.demux->write = mpq_dmx_write; ret = dvb_dmxdev_init(&mpq_demux->dmxdev, mpq_adapter); if (ret) { MPQ_DVB_ERR_PRINT("%s: dvb_dmxdev_init failed, ret=%d\n", __func__, ret); goto init_failed_dmx_release; } /* Extend dvb-demux debugfs with mpq demux statistics. */ mpq_dmx_init_debugfs_entries(mpq_demux); return 0; init_failed_dmx_release: dvb_dmx_release(dvb_demux); init_failed: return ret; }
static int mpq_tsif_dmx_init( struct dvb_adapter *mpq_adapter, struct mpq_demux *mpq_demux) { int result; MPQ_DVB_DBG_PRINT("%s executed\n", __func__); mpq_demux->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_PES_FILTERING | DMX_SECTION_FILTERING | DMX_MEMORY_BASED_FILTERING | DMX_CRC_CHECKING | DMX_TS_DESCRAMBLING; mpq_demux->demux.priv = (void *)mpq_demux; mpq_demux->demux.filternum = DMX_TSIF_MAX_SECTION_FILTER_NUM; mpq_demux->demux.feednum = MPQ_MAX_DMX_FILES; mpq_demux->demux.start_feed = mpq_tsif_dmx_start_filtering; mpq_demux->demux.stop_feed = mpq_tsif_dmx_stop_filtering; mpq_demux->demux.write_to_decoder = mpq_tsif_dmx_write_to_decoder; mpq_demux->demux.decoder_fullness_init = mpq_dmx_decoder_fullness_init; mpq_demux->demux.decoder_fullness_wait = mpq_dmx_decoder_fullness_wait; mpq_demux->demux.decoder_fullness_abort = mpq_dmx_decoder_fullness_abort; mpq_demux->demux.decoder_buffer_status = mpq_dmx_decoder_buffer_status; mpq_demux->demux.reuse_decoder_buffer = mpq_dmx_reuse_decoder_buffer; mpq_demux->demux.set_secure_mode = NULL; mpq_demux->demux.oob_command = mpq_dmx_oob_command; mpq_demux->demux.convert_ts = mpq_dmx_convert_tts; result = dvb_dmx_init(&mpq_demux->demux); if (result < 0) { MPQ_DVB_ERR_PRINT("%s: dvb_dmx_init failed\n", __func__); goto init_failed; } mpq_demux->dmxdev.filternum = MPQ_MAX_DMX_FILES; mpq_demux->dmxdev.demux = &mpq_demux->demux.dmx; mpq_demux->dmxdev.capabilities = DMXDEV_CAP_DUPLEX; mpq_demux->dmxdev.demux->set_source = mpq_dmx_set_source; mpq_demux->dmxdev.demux->get_stc = mpq_tsif_dmx_get_stc; mpq_demux->dmxdev.demux->get_caps = mpq_tsif_dmx_get_caps; mpq_demux->dmxdev.demux->map_buffer = mpq_dmx_map_buffer; mpq_demux->dmxdev.demux->unmap_buffer = mpq_dmx_unmap_buffer; result = dvb_dmxdev_init(&mpq_demux->dmxdev, mpq_adapter); if (result < 0) { MPQ_DVB_ERR_PRINT("%s: dvb_dmxdev_init failed (errno=%d)\n", __func__, result); goto init_failed_dmx_release; } mpq_dmx_init_debugfs_entries(mpq_demux); return 0; init_failed_dmx_release: dvb_dmx_release(&mpq_demux->demux); init_failed: return result; }