From: "Daniel W. S. Almeida" <dwlsalmeida@gmail.com> To: mchehab+huawei@kernel.org, sean@mess.org, kstewart@linuxfoundation.org, allison@lohutok.net, tglx@linutronix.de Cc: "Daniel W. S. Almeida" <dwlsalmeida@gmail.com>, linux-media@vger.kernel.org, skhan@linuxfoundation.org, linux-kernel-mentees@lists.linuxfoundation.org, linux-kernel@vger.kernel.org Subject: [RFC, WIP, v6 00/10] media: vidtv: implement a virtual DVB driver Date: Wed, 20 May 2020 04:03:24 -0300 [thread overview] Message-ID: <20200520070334.1778751-1-dwlsalmeida@gmail.com> (raw) 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 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 +- drivers/media/dvb-core/dvbdev.c | 1 + 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 -- 2.26.2
WARNING: multiple messages have this Message-ID (diff)
From: "Daniel W. S. Almeida" <dwlsalmeida@gmail.com> To: mchehab+huawei@kernel.org, sean@mess.org, kstewart@linuxfoundation.org, allison@lohutok.net, tglx@linutronix.de Cc: linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linuxfoundation.org, "Daniel W. S. Almeida" <dwlsalmeida@gmail.com>, linux-media@vger.kernel.org Subject: [Linux-kernel-mentees] [RFC, WIP, v6 00/10] media: vidtv: implement a virtual DVB driver Date: Wed, 20 May 2020 04:03:24 -0300 [thread overview] Message-ID: <20200520070334.1778751-1-dwlsalmeida@gmail.com> (raw) 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 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 +- drivers/media/dvb-core/dvbdev.c | 1 + 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 -- 2.26.2 _______________________________________________ Linux-kernel-mentees mailing list Linux-kernel-mentees@lists.linuxfoundation.org https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
next reply other threads:[~2020-05-20 7:03 UTC|newest] Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-05-20 7:03 Daniel W. S. Almeida [this message] 2020-05-20 7:03 ` [Linux-kernel-mentees] [RFC, WIP, v6 00/10] media: vidtv: implement a virtual DVB driver Daniel W. S. Almeida 2020-05-20 7:03 ` [RFC, WIP, v6 01/10] media: vidtv: add Kconfig entry Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-28 22:50 ` Shuah Khan 2020-05-28 22:50 ` [Linux-kernel-mentees] " Shuah Khan 2020-05-20 7:03 ` [RFC, WIP, v6 02/10] media: vidtv: implement a tuner driver Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-28 23:26 ` Shuah Khan 2020-05-28 23:26 ` [Linux-kernel-mentees] " Shuah Khan 2020-06-03 17:19 ` Daniel W. S. Almeida 2020-06-03 17:19 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-20 7:03 ` [RFC, WIP, v6 03/10] media: vidtv: implement a demodulator driver Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-28 23:39 ` Shuah Khan 2020-05-28 23:39 ` [Linux-kernel-mentees] " Shuah Khan 2020-05-20 7:03 ` [RFC, WIP, v6 04/10] media: vidtv: add a bridge driver Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-20 16:32 ` kbuild test robot 2020-05-20 19:21 ` kbuild test robot 2020-06-02 23:13 ` Shuah Khan 2020-06-02 23:13 ` [Linux-kernel-mentees] " Shuah Khan 2020-05-20 7:03 ` [RFC, WIP, v6 05/10] media: vidtv: add wrappers for memcpy and memset Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-06-01 16:51 ` Shuah Khan 2020-06-01 16:51 ` [Linux-kernel-mentees] " Shuah Khan 2020-05-20 7:03 ` [RFC, WIP, v6 06/10] media: vidtv: add MPEG TS common code Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-20 7:03 ` [RFC, WIP, v6 07/10] media: vidtv: implement a PSI generator Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-20 7:03 ` [RFC, WIP, v6 08/10] media: vidtv: implement a PES packetizer Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-20 7:03 ` [RFC, WIP, v6 09/10] media: vidtv: Implement a SMPTE 302M encoder Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-20 7:03 ` [RFC, WIP, v6 10/10] media: vidtv: Add a MPEG Transport Stream Multiplexer Daniel W. S. Almeida 2020-05-20 7:03 ` [Linux-kernel-mentees] " Daniel W. S. Almeida 2020-05-21 0:26 ` kbuild test robot 2020-05-28 21:39 ` [RFC, WIP, v6 00/10] media: vidtv: implement a virtual DVB driver Shuah Khan 2020-05-28 21:39 ` [Linux-kernel-mentees] " Shuah Khan 2020-05-28 23:57 ` Shuah Khan 2020-05-28 23:57 ` [Linux-kernel-mentees] " Shuah Khan
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200520070334.1778751-1-dwlsalmeida@gmail.com \ --to=dwlsalmeida@gmail.com \ --cc=allison@lohutok.net \ --cc=kstewart@linuxfoundation.org \ --cc=linux-kernel-mentees@lists.linuxfoundation.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-media@vger.kernel.org \ --cc=mchehab+huawei@kernel.org \ --cc=sean@mess.org \ --cc=skhan@linuxfoundation.org \ --cc=tglx@linutronix.de \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.