[Linux-kernel-mentees] [RFC, WIP, v6 00/10] media: vidtv: implement a virtual DVB driver

Shuah Khan skhan at linuxfoundation.org
Thu May 28 23:57:06 UTC 2020


On 5/20/20 1:03 AM, Daniel W. S. Almeida wrote:
> From: "Daniel W. S. Almeida" <dwlsalmeida at gmail.com>
> 
> This series is work in progress. It represents the current work done on a
> virtual DVB driver for the Linux media subsystem. I am new to the media
> subsystem and to kernel development in general.
> 
> This driver aims to:
> 	- Serve as template for new DVB driver writers
> 	- Help userspace application writers in general
> 	- Push fake audio/video to userspace for testing
> 		purposes
> 	- Push debug information to userspace via debugfs
> 
> This should currently be able to feed PSI and PCM audio data to
> userspace.
> 
> I appreciate any feedback!
> 
> Changes in v6:
> 	Addressed the following issues:
> 	- Makefile was not actually compiling everything;
> 	- The bridge driver should be a platform driver;
> 	- There are lots of warnings and other errors produced
> 	by the driver.
> 
> Changes in v5:
> 
> Removed all calls to WARN_ON in favor of pr_warn_ratelimited
> Add a #define for pr_fmt
> Reworked the byte swapping logic for big/little endian support:
> 	big endian fields now prepended with __beXX for 'sparse' checks
> 	bitfields now laid in reverse order if LITTLE_ENDIAN_BITFIELD
> 		is set
> 
> media: vidtv: implement a tuner driver
> 	Return -EINVAL instead of -1 in vidtv_tuner_check_frequency_shift
> media: vidtv: implement a demodulator driver
> 	Add POLL_THRD_TIME #define
> 	Implement dvb_frontend_ops as a single struct instead of three
> media: vidtv: move config structs into a separate header
> 	Removed this commit, configs are now in vidtv_tuner.h and vidtv_demod.h
> media: vidtv: add a bridge driver
> 	module_param: all fs permissions set to 0
> 	removed param 'chosen_delsys'
> 	module_param: removed "optional" string: all module_params are optional
> 	renamed vidtv_bridge -> vidtv_bridg: so the source code and module names
> 		are different
> media: vidtv: add wrappers for memcpy and memset
> 	Added kernel-docs
> 	write address is now computed internally
> media: vidtv: add MPEG TS common code
> 	Drop packets if the buffer is full
> media: vidtv: implement a PSI generator
> 	Removed vidtv_psi_ts_psi_write_stuffing()
> 	Forcibly align misaligned buffers
> 	Drop packets if buffer is full
> media: vidtv: implement a PES packetizer
> 	Remove vidtv_extract_bits() in favor of GENMASK() and bitwise &
> 	Forcibly align misaligned buffers
> media: vidtv: Implement a SMPTE 302M encoder
> 	Added kernel-docs for struct vidtv_encoder
> media: vidtv: Add a MPEG Transport Stream Multiplexer
> 	Added check for minimum and maximum buffer size.
> 	Drop packets if buffer is full
> 
> 
> Changes in v4:
> Added a PES packetizer
> Implemented a minimum version of the SMPTE 302m encoder for AES3 audio
> Fixed endianness in the PSI generator, converting fields to big endian where applicable
> Added a minimal TS mux abstraction
> 
> Changes in v3:
> Added a bridge driver
> Renamed the driver to vidtv
> Renamed/reworked commits into smaller pieces
> Moved the driver into its own directory
> Fixed the code for the signal strength in the tuner
> Removed useless enums in the tuner driver (e.g. lock_status, power_status...)
> Reworked the logic for the poll_snr thread in the demodulator driver
> Moved MPEG related code to the bridge driver, as it controls the demux logic
> Changed literals to #defines, used sizeof in place of integer literals when
> computing the size of PSI structs
> Moved the MPEG PSI tables to the heap to reduce stack space usage
> Now using usleep_range in place of msleep_interruptible in the MPEG TS thread
> Wrapped memcpy and memset to protect against buffer overflow when writing to the
> MPEG TS buffer.
> 
> Changes in v2:
> Attempted not to break assignments into multiple lines as much as possible.
> Code now passes checkpatch strict mode
> 
> media: dvb_dummy_tuner: implement driver skeleton	
> Changed snr values to mili db
> Return value from 0-100 to indicate how far off the requested
> frequency is from a valid one
> 
> Use the frequency shift to interpolate between 34dB and 10dB if
> we can not match against the SNR lookup table
> Remove sleep calls for suspend/resume
> 
> Fix memcpy call for the config struct
> 
> media: dvb_dummy_fe.c: lose TS lock on bad snr
> Randomly recover the TS lock if the signal quality improves
> 
> media: dvb_dummy_fe.c: write PSI information into DMX buffer
> Split the patch into multiple header/source files
> 
> Hexadecimal literals are now lower case
> 
> Prefer short function names / reduce function signatures
> 
> Add #defines for constants when computing section lengths
> 
> Change signature for functions that take a dummy channel as
> argument (i.e. channels* is now channels[NUM_CHANNELS])
> 
> Daniel W. S. Almeida (10):
>    media: vidtv: add Kconfig entry
>    media: vidtv: implement a tuner driver

You can collapse patch 1 and 2. I don't see why you need two
separate patches.

>    media: vidtv: implement a demodulator driver
>    media: vidtv: add a bridge driver
>    media: vidtv: add wrappers for memcpy and memset
>    media: vidtv: add MPEG TS common code
>    media: vidtv: implement a PSI generator
>    media: vidtv: implement a PES packetizer
>    media: vidtv: Implement a SMPTE 302M encoder
>    media: vidtv: Add a MPEG Transport Stream Multiplexer
> 
>   arch/Kconfig                                  |    2 +-

Why do you need this change. It is part of patch 04 with no
explanation on why this change is necessary.


>   drivers/media/dvb-core/dvbdev.c               |    1 +

Same here.

>   drivers/media/test-drivers/Kconfig            |   10 +
>   drivers/media/test-drivers/Makefile           |    1 +
>   drivers/media/test-drivers/vidtv/Kconfig      |   11 +
>   drivers/media/test-drivers/vidtv/Makefile     |    9 +
>   .../media/test-drivers/vidtv/vidtv_bridge.c   |  511 ++++++++
>   .../media/test-drivers/vidtv/vidtv_bridge.h   |   41 +
>   .../media/test-drivers/vidtv/vidtv_channel.c  |  339 ++++++
>   .../media/test-drivers/vidtv/vidtv_channel.h  |   66 ++
>   .../media/test-drivers/vidtv/vidtv_common.c   |   86 ++
>   .../media/test-drivers/vidtv/vidtv_common.h   |   34 +
>   .../media/test-drivers/vidtv/vidtv_demod.c    |  444 +++++++
>   .../media/test-drivers/vidtv/vidtv_demod.h    |   41 +
>   .../media/test-drivers/vidtv/vidtv_encoder.h  |  103 ++
>   drivers/media/test-drivers/vidtv/vidtv_mux.c  |  434 +++++++
>   drivers/media/test-drivers/vidtv/vidtv_mux.h  |  105 ++
>   drivers/media/test-drivers/vidtv/vidtv_pes.c  |  450 +++++++
>   drivers/media/test-drivers/vidtv/vidtv_pes.h  |  186 +++
>   drivers/media/test-drivers/vidtv/vidtv_psi.c  | 1055 +++++++++++++++++
>   drivers/media/test-drivers/vidtv/vidtv_psi.h  |  420 +++++++
>   .../media/test-drivers/vidtv/vidtv_s302m.c    |  636 ++++++++++
>   .../media/test-drivers/vidtv/vidtv_s302m.h    |  119 ++
>   drivers/media/test-drivers/vidtv/vidtv_ts.c   |  157 +++
>   drivers/media/test-drivers/vidtv/vidtv_ts.h   |  120 ++
>   .../media/test-drivers/vidtv/vidtv_tuner.c    |  408 +++++++
>   .../media/test-drivers/vidtv/vidtv_tuner.h    |   26 +
>   27 files changed, 5814 insertions(+), 1 deletion(-)
>   create mode 100644 drivers/media/test-drivers/vidtv/Kconfig
>   create mode 100644 drivers/media/test-drivers/vidtv/Makefile
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_bridge.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_bridge.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_channel.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_channel.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_common.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_common.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_demod.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_demod.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_encoder.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_mux.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_mux.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_pes.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_pes.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_psi.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_psi.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_s302m.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_s302m.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_ts.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_ts.h
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_tuner.c
>   create mode 100644 drivers/media/test-drivers/vidtv/vidtv_tuner.h
> 

thanks,
-- Shuah


More information about the Linux-kernel-mentees mailing list