From: Hans Verkuil <hverkuil@xs4all.nl>
To: "Daniel W. S. Almeida" <dwlsalmeida@gmail.com>,
mchehab+huawei@kernel.org, r.verdejo@samsung.com,
nicolas@ndufresne.ca
Cc: linux-kernel-mentees@lists.linuxfoundation.org,
linux-kernel@vger.kernel.org, linux-media@vger.kernel.org
Subject: Re: [Linux-kernel-mentees] [v10 0/4] media: vidtv: Implement a virtual DVB driver
Date: Sat, 12 Sep 2020 10:21:59 +0200 [thread overview]
Message-ID: <94faa1f5-22b2-1a01-0812-526e8cf17596@xs4all.nl> (raw)
In-Reply-To: <20200821125848.1092958-1-dwlsalmeida@gmail.com>
Hi Daniel,
First of all, thank you for all your work on this. I see that Mauro merged
this v10, and after testing I posted a patch for the Kconfig, since that
seems to be wrong.
I have some more questions below, my apologies if that's been asked before.
On 21/08/2020 14:58, 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
>
> Current state for this driver:
> - Driver generates PSI information (PAT, PMT, SDT)
> - Driver generates PCR packets
> - Driver generates NULL packets for padding
> - PCM audio stream is decoded by ffmpeg, but no audio is heard yet.
>
>
> changes in v10:
> s302m encoder got reworked
>
> The Virtual Digital TV Driver (vidtv)
>
> Background
> ----------
>
> Vidtv is a virtual DVB driver that aims to serve as a reference for driver
> writers by serving as a template. It also validates the existing media DVB
> APIs, thus helping userspace application writers.
>
> Currently, it consists of:
>
> - A fake tuner driver, which will report a bad signal quality if the chosen
> frequency is too far away from a table of valid frequencies for a
> particular delivery system.
>
> - A fake demod driver, which will constantly poll the fake signal quality
> returned by the tuner, simulating a device that can lose/reacquire a lock
> on the signal depending on the CNR levels.
>
> - A fake bridge driver, which is the module responsible for modprobing the
> fake tuner and demod modules and implementing the demux logic. This module
> takes parameters at initialization that will dictate how the simulation
> behaves.
>
> - Code reponsible for encoding a valid MPEG Transport Stream, which is then
> passed to the bridge driver. This fake stream contains some hardcoded content.
> For now, we have a single, audio-only channel containing a single MPEG
> Elementary Stream, which in turn contains a SMPTE 302m encoded sine-wave.
> Note that this particular encoder was chosen because it is the easiest
> way to encode PCM audio data in a MPEG Transport Stream.
>
> Building vidtv
> --------------
> vidtv is a test driver and thus is **not** enabled by default when
> compiling the kernel.
>
> In order to enable compilation of vidtv:
>
> - Enable **DVB_TEST_DRIVERS**, then
> - Enable **DVB_VIDTV**
>
> When compiled as a module, expect the following .ko files:
>
> - dvb_vidtv_tuner.ko
>
> - dvb_vidtv_demod.ko
>
> - dvb_vidtv_bridge.ko
Why the dvb_ prefix? All virtual drivers just start with 'vi'.
And wouldn't it make more sense to call dvb_vidtv_bridge.ko just vidtv.ko?
Just like the other virtual media drivers?
>
> Running vidtv
> -------------
> When compiled as a module, run::
>
> modprobe dvb_vidtv_bridge
>
> That's it! The bridge driver will initialize the tuner and demod drivers as
> part of its own initialization.
>
> You can optionally define some command-line arguments to vidtv, see the
> documentation for more info.
>
> Testing vidtv with v4l-utils
> ============================
For regression testing of vidtv during the daily build it would be great if
the contrib/test/test-media script can be enhanced to include vidtv.
This is run during the daily build with a kernel that has lockdep and many
other checks enabled, so it is very helpful to verify that no regressions
happened.
Note that this script relies on the /dev/mediaX devices to run the tests. I
noticed that vidtv doesn't appear to create a /dev/mediaX device, even though
CONFIG_MEDIA_CONTROLLER_DVB=y. This is definitely something that would be good
to support in vidtv.
Regards,
Hans
>
> Start by installing v4l-utils and then modprobing vidtv::
>
> modprobe dvb_vidtv_bridge
>
> If the driver is OK, it should load and its probing code will run. This will
> pull in the tuner and demod drivers.
>
> Using dvb-fe-tool
> -----------------
>
> The first step to check whether the demod loaded successfully is to run::
>
> $ dvb-fe-tool
>
> This should return what is currently set up at the demod struct, i.e.::
>
> static const struct dvb_frontend_ops vidtv_demod_ops = {
> .delsys = {
> SYS_DVBT,
> SYS_DVBT2,
> SYS_DVBC_ANNEX_A,
> SYS_DVBS,
> SYS_DVBS2,
> },
>
> .info = {
> .name = "Dummy demod for DVB-T/T2/C/S/S2",
> .frequency_min_hz = 51 * MHz,
> .frequency_max_hz = 2150 * MHz,
> .frequency_stepsize_hz = 62500,
> .frequency_tolerance_hz = 29500 * kHz,
> .symbol_rate_min = 1000000,
> .symbol_rate_max = 45000000,
>
> .caps = FE_CAN_FEC_1_2 |
> FE_CAN_FEC_2_3 |
> FE_CAN_FEC_3_4 |
> FE_CAN_FEC_4_5 |
> FE_CAN_FEC_5_6 |
> FE_CAN_FEC_6_7 |
> FE_CAN_FEC_7_8 |
> FE_CAN_FEC_8_9 |
> FE_CAN_QAM_16 |
> FE_CAN_QAM_64 |
> FE_CAN_QAM_32 |
> FE_CAN_QAM_128 |
> FE_CAN_QAM_256 |
> FE_CAN_QAM_AUTO |
> FE_CAN_QPSK |
> FE_CAN_FEC_AUTO |
> FE_CAN_INVERSION_AUTO |
> FE_CAN_TRANSMISSION_MODE_AUTO |
> FE_CAN_GUARD_INTERVAL_AUTO |
> FE_CAN_HIERARCHY_AUTO,
> }
>
> ....
>
> Using dvb-scan
> --------------
>
> In order to tune into a channel and read the PSI tables, we can use dvb-scan.
>
> For this, one should provide a configuration file known as a 'scan file',
> here's an example::
>
> [Channel]
> FREQUENCY = 330000000
> MODULATION = QAM/AUTO
> SYMBOL_RATE = 6940000
> INNER_FEC = AUTO
> DELIVERY_SYSTEM = DVBC/ANNEX_A
>
> NOTE:
> The parameters depend on the video standard you're testing.
>
> NOTE:
> Vidtv is a fake driver and does not validate much of the information
> in the scan file. Just specifying 'FREQUENCY' and 'DELIVERY_SYSTEM'
> should be enough for DVB-T/DVB-T2. For DVB-S/DVB-C however, you
> should also provide 'SYMBOL_RATE'.
>
> Assuming this channel is named 'channel.conf', you can then run::
>
> $ dvbv5-scan dresden_dvbc_channel.conf
>
> Using dvb-zap
> -------------
>
> dvbv5-zap is a command line tool that can be used to record MPEG-TS to disk. The
> typical use is to tune into a channel and put it into record mode. The example
> below - which is taken from the documentation - illustrates that::
>
> $ dvbv5-zap -c dvb_channel.conf "trilhas sonoras" -r
> using demux '/dev/dvb/adapter0/demux0'
> reading channels from file 'dvb_channel.conf'
> service has pid type 05: 204
> tuning to 573000000 Hz
> audio pid 104
> dvb_set_pesfilter 104
> Lock (0x1f) Quality= Good Signal= 100.00% C/N= -13.80dB UCB= 70 postBER= 3.14x10^-3 PER= 0
> DVR interface '/dev/dvb/adapter0/dvr0' can now be opened
>
> The channel can be watched by playing the contents of the DVR interface, with
> some player that recognizes the MPEG-TS format, such as *mplayer* or *vlc*.
>
> By playing the contents of the stream one can visually inspect the workings of
> vidtv, e.g.::
>
> $ mplayer /dev/dvb/adapter0/dvr0
>
>
> Daniel W. S. Almeida (4):
> media: vidtv: implement a tuner driver
> media: vidtv: implement a demodulator driver
> media: vidtv: add a bridge driver
> media: Documentation: vidtv: Add ReST documentation for vidtv
>
> .../driver-api/media/drivers/index.rst | 1 +
> .../driver-api/media/drivers/vidtv.rst | 417 +++++
> MAINTAINERS | 8 +
> drivers/media/test-drivers/Kconfig | 16 +
> 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 | 546 +++++++
> .../media/test-drivers/vidtv/vidtv_bridge.h | 60 +
> .../media/test-drivers/vidtv/vidtv_channel.c | 306 ++++
> .../media/test-drivers/vidtv/vidtv_channel.h | 76 +
> .../media/test-drivers/vidtv/vidtv_common.c | 89 ++
> .../media/test-drivers/vidtv/vidtv_common.h | 33 +
> .../media/test-drivers/vidtv/vidtv_demod.c | 440 ++++++
> .../media/test-drivers/vidtv/vidtv_demod.h | 73 +
> .../media/test-drivers/vidtv/vidtv_encoder.h | 96 ++
> drivers/media/test-drivers/vidtv/vidtv_mux.c | 479 ++++++
> drivers/media/test-drivers/vidtv/vidtv_mux.h | 160 ++
> drivers/media/test-drivers/vidtv/vidtv_pes.c | 398 +++++
> drivers/media/test-drivers/vidtv/vidtv_pes.h | 189 +++
> drivers/media/test-drivers/vidtv/vidtv_psi.c | 1352 +++++++++++++++++
> drivers/media/test-drivers/vidtv/vidtv_psi.h | 593 ++++++++
> .../media/test-drivers/vidtv/vidtv_s302m.c | 552 +++++++
> .../media/test-drivers/vidtv/vidtv_s302m.h | 90 ++
> drivers/media/test-drivers/vidtv/vidtv_ts.c | 137 ++
> drivers/media/test-drivers/vidtv/vidtv_ts.h | 130 ++
> .../media/test-drivers/vidtv/vidtv_tuner.c | 427 ++++++
> .../media/test-drivers/vidtv/vidtv_tuner.h | 43 +
> 28 files changed, 6732 insertions(+)
> create mode 100644 Documentation/driver-api/media/drivers/vidtv.rst
> 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
>
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees
next prev parent reply other threads:[~2020-09-12 8:22 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-21 12:58 [Linux-kernel-mentees] [v10 0/4] media: vidtv: Implement a virtual DVB driver Daniel W. S. Almeida
2020-08-21 12:58 ` [Linux-kernel-mentees] [v10 1/4] media: vidtv: implement a tuner driver Daniel W. S. Almeida
2020-08-21 12:58 ` [Linux-kernel-mentees] [v10 2/4] media: vidtv: implement a demodulator driver Daniel W. S. Almeida
2020-08-21 12:58 ` [Linux-kernel-mentees] [v10 3/4] media: vidtv: add a bridge driver Daniel W. S. Almeida
2020-09-15 11:53 ` Geert Uytterhoeven
2020-09-15 13:26 ` Daniel W. S. Almeida
2020-09-15 13:35 ` Geert Uytterhoeven
2020-09-15 18:13 ` Daniel W. S. Almeida
2020-09-16 7:01 ` Mauro Carvalho Chehab
2020-08-21 12:58 ` [Linux-kernel-mentees] [v10 4/4] media: Documentation: vidtv: Add ReST documentation for vidtv Daniel W. S. Almeida
2020-09-11 8:02 ` [Linux-kernel-mentees] [v10 0/4] media: vidtv: Implement a virtual DVB driver Mauro Carvalho Chehab
2020-09-11 12:18 ` Daniel W. S. Almeida
2020-09-11 13:10 ` Mauro Carvalho Chehab
2020-09-11 13:56 ` Mauro Carvalho Chehab
2020-09-12 2:54 ` Daniel W. S. Almeida
2020-09-12 7:38 ` Mauro Carvalho Chehab
2020-09-12 8:21 ` Hans Verkuil [this message]
2020-09-12 9:15 ` Mauro Carvalho Chehab
2020-09-12 14:49 ` Daniel W. S. Almeida
2020-09-12 17:57 ` Mauro Carvalho Chehab
2020-09-14 8:33 ` Hans Verkuil
2020-09-12 8:35 ` Hans Verkuil
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=94faa1f5-22b2-1a01-0812-526e8cf17596@xs4all.nl \
--to=hverkuil@xs4all.nl \
--cc=dwlsalmeida@gmail.com \
--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=nicolas@ndufresne.ca \
--cc=r.verdejo@samsung.com \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).