Messages in this thread | | | Subject | Re: [RFC, WIP, v6 00/10] media: vidtv: implement a virtual DVB driver | From | Shuah Khan <> | Date | Thu, 28 May 2020 17:57:06 -0600 |
| |
On 5/20/20 1:03 AM, Daniel W. S. Almeida wrote: > From: "Daniel W. S. Almeida" <dwlsalmeida@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
| |