All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
To: "Daniel W. S. Almeida" <dwlsalmeida@gmail.com>
Cc: "r.verdejo@samsung.com" <r.verdejo@samsung.com>,
	"nicolas@ndufresne.ca" <nicolas@ndufresne.ca>,
	"  <skhan@linuxfoundation.org>,
	 "@lists.linuxfoundation.org,
	linux-kernel-mentees@lists.linuxfoundation,
	"linux-media@vger.kernel.org\"         
	<linux-media@vger.kernel.org>,
	 "@lists.linuxfoundation.org, skhan@linuxfoundation.org,
	"org\"" <linux-kernel-mentees@lists.linuxfoundation.org>,
	"linux-kernel@vger.kernel.org\"
	<linux-kernel@vger.kernel.org>"@osuosl.org
Subject: Re: [Linux-kernel-mentees] [v10 0/4] media: vidtv: Implement a virtual DVB driver
Date: Fri, 11 Sep 2020 15:10:46 +0200	[thread overview]
Message-ID: <20200911151046.076abb79@coco.lan> (raw)
In-Reply-To: <25F257A6-C651-4BE7-8482-14FCF121D88F@getmailspring.com>

Em Fri, 11 Sep 2020 09:18:20 -0300
"Daniel W. S. Almeida" <dwlsalmeida@gmail.com> escreveu:

> Hey Mauro,
> 
> > Thanks for all the hard work on it. Very much appreciated!
> > 
> > I finally found some time to test it. For now, just a quick
> > test from my side, without passing any arguments to the
> > driver.
> >   
> 
> That's nice!
> 
> > My plan is to write some patches on the top of yours, in order to
> > address the problems I'll find on it. If not something more critical
> > won't be solved in time, we may still add it at staging/media. 
> > Let's see.  
> 
> OK
> 
> > 	3. dvbv5-zap wrote an empty audio file (without -P flag).
> > 	   Probably there are still some issues at the program
> > 	   channel descriptor or service;  
> 
> I don't remember whether I tried this. I tried dumping the stream to a
> file with dvbzap, which should work. By the way, I guess we should be
> comparing the output to this
> 
> $ ffmpeg -f lavfi -i sine=frequency=1000:duration=5 -ac 2 -c:a s302m
> -strict -2 out.ts
> 
> Since it produces a playable transport stream file that actually sounds
> like a sine tone.
> 
> Inspecting ffmpeg & vidtv output side by side in dvbinspector, you'll
> see that they're mostly the same. I have a separate PID for the PCR and
> some other minor differences.

The problem is here:

	$ dvbv5-zap -c dvb_channel.conf "S302m: Sine Wave PCM Audio" -t 30 -o pcm_audio.ts -P
	using demux 'dvb0.demux0'
	reading channels from file 'dvb_channel.conf'
	service has pid type 06:  273

See, it identified the EL type ID as type 6, which is handled by
dvbv5 library here:

		case 0x06: /* private data */
			/*
			* Those can be used by sub-titling, teletext and/or
			* DVB AC-3. So, need to seek for the AC-3 descriptors
			*/
			dvb_desc_find(struct dvb_desc_service, desc, stream, AC_3_descriptor)
				has_ac3 = 1;

			dvb_desc_find(struct dvb_desc_service, desc, stream, enhanced_AC_3_descriptor)
				has_ac3 = 1;

			if (has_ac3) {
				entry->audio_pid = realloc(entry->audio_pid,
							   sizeof(*entry->audio_pid) *
							   (audio_len + 1));
				entry->audio_pid[audio_len] = pid;
				audio_len++;
			} else {
				entry->other_el_pid = realloc(entry->other_el_pid,
							   sizeof(*entry->other_el_pid) *
							   (other_len + 1));
				entry->other_el_pid[other_len].type = stream->type;
				entry->other_el_pid[other_len].pid = pid;
				other_len++;
			}
			break;

Basically, it is not recognizing the stream as an audio PID, but
as some other random data. Due to that, the output of
dvb_channel.conf will be wrong.

As type 6 seems to be the correct one for SMPTE 302M, we need to fix
dvbv5-tools (and likely other tools like kaffeine), in order to
recognize it as audio as well.

> > 	4. The provider service field is null. Perhaps we could
> > 	   add some string there, like "linuxtv.org".
> > 	5. Maybe we could also add a simple NIT table, just to
> > 	   avoid dvbv5-scan to wait for it until timeout.
> > 
> > Also, it probably makes sense to add a debugfs interface in
> > order to allow injecting errors at the stream at runtime.  
> 
> Sure. This is fun, sign me up for it.

Well, if you have some spare time, you could try to write
a debugfs binding for vidtv. The best would be to have it
on a separate file. Failing to bind debugfs should not
prevent loading the bridge driver.

> As I said in a previous email, I think the buffer in vidtv_s302m.c is
> not exactly what we want. It sounds like noise.

Yeah, after changing dvb_channel.conf to:

    [S302m: Sine Wave PCM Audio]
	SERVICE_ID = 2176
	AUDIO_PID = 273
	FREQUENCY = 330000000
	MODULATION = QAM/AUTO
	INVERSION = AUTO
	SYMBOL_RATE = 6940000
	INNER_FEC = AUTO
	DELIVERY_SYSTEM = DVBC/ANNEX_A

   (e. g. changing "PID_06" to "AUDIO_PID")

I was able to record and play it.

Anyway, the actual sound doesn't matter much here, at least for
the first version, as this could be changed later on. 

> I got it from here:
> https://www.daycounter.com/Calculators/Sine-Generator-Calculator.phtml

On a quick look at the s302m_sin_lut table, it is indeed a sinal
waveform, with a DC offset on it (in order to convert it to unsigned),
as "0" is 0x8000. 

The "noise" is actually looks like "humm". This is periodic, it seems. 

> By the way, after some time trying out stuff, I guess this is actually
> what we need in vidtv_s302m_write_frame:
> 
> static u32 vidtv_s302m_write_frame(struct vidtv_encoder *e,
> 				   u16 sample)
> {
> 	u32 nbytes = 0;
> 	struct vidtv_s302m_frame_16 f = {};
> 	struct vidtv_s302m_ctx *ctx = e->ctx;
> 
> 	/* from ffmpeg: see s302enc.c */
> 
> 	u8 vucf = ctx->frame_index == 0 ? 1 : 0;
> 
> 	f.data[0] = reverse[sample & 0xff];
> 	f.data[1] = reverse[(sample & 0xff00) >>  8];
> 	f.data[2] = (vucf << 4)  | (reverse[(sample & 0x0f)] >> 4);
> 	f.data[3] = reverse[(sample & 0x0ff0) >>  4];
> 	f.data[4] = reverse[(sample & 0xf000) >> 12] >> 4;

doing that didn't work. Yet, this check inside the driver:
 
        #ifdef __LITTLE_ENDIAN
        f.data[0] = reverse[f.data[0]];
        f.data[1] = reverse[f.data[1]];
        f.data[2] = reverse[f.data[2]];
        f.data[3] = reverse[f.data[3]];
        f.data[4] = reverse[f.data[4]];
        #endif

Seems plain wrong, as you're already ensuring the endiannes
it is needed when you're doing things like "sample & 0xff".

Thanks,
Mauro
_______________________________________________
Linux-kernel-mentees mailing list
Linux-kernel-mentees@lists.linuxfoundation.org
https://lists.linuxfoundation.org/mailman/listinfo/linux-kernel-mentees

  reply	other threads:[~2020-09-11 13:10 UTC|newest]

Thread overview: 40+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-21 12:58 [v10 0/4] media: vidtv: Implement a virtual DVB driver Daniel W. S. Almeida
2020-08-21 12:58 ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-08-21 12:58 ` [v10 1/4] media: vidtv: implement a tuner driver Daniel W. S. Almeida
2020-08-21 12:58   ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-08-21 12:58 ` [v10 2/4] media: vidtv: implement a demodulator driver Daniel W. S. Almeida
2020-08-21 12:58   ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-08-21 12:58 ` [v10 3/4] media: vidtv: add a bridge driver Daniel W. S. Almeida
2020-08-21 12:58   ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-09-15 11:53   ` Geert Uytterhoeven
2020-09-15 11:53     ` [Linux-kernel-mentees] " Geert Uytterhoeven
2020-09-15 13:26     ` Daniel W. S. Almeida
2020-09-15 13:26       ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-09-15 13:35       ` Geert Uytterhoeven
2020-09-15 13:35         ` [Linux-kernel-mentees] " Geert Uytterhoeven
2020-09-15 18:13         ` Daniel W. S. Almeida
2020-09-15 18:13           ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-09-16  7:01         ` Mauro Carvalho Chehab
2020-09-16  7:09           ` Geert Uytterhoeven
2020-08-21 12:58 ` [v10 4/4] media: Documentation: vidtv: Add ReST documentation for vidtv Daniel W. S. Almeida
2020-08-21 12:58   ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-09-11  8:02 ` [v10 0/4] media: vidtv: Implement a virtual DVB driver Mauro Carvalho Chehab
2020-09-11  8:02   ` [Linux-kernel-mentees] " Mauro Carvalho Chehab
2020-09-11 12:18   ` Daniel W. S. Almeida
2020-09-11 12:18     ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-09-11 13:10     ` Mauro Carvalho Chehab [this message]
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
2020-09-12  8:21   ` [Linux-kernel-mentees] " Hans Verkuil
2020-09-12  9:15   ` Mauro Carvalho Chehab
2020-09-12  9:15     ` [Linux-kernel-mentees] " Mauro Carvalho Chehab
2020-09-12 14:49     ` Daniel W. S. Almeida
2020-09-12 14:49       ` [Linux-kernel-mentees] " Daniel W. S. Almeida
2020-09-12 17:57       ` Mauro Carvalho Chehab
2020-09-12 17:57         ` [Linux-kernel-mentees] " Mauro Carvalho Chehab
2020-09-14  8:33         ` Hans Verkuil
2020-09-14  8:33           ` [Linux-kernel-mentees] " Hans Verkuil
2020-09-12  8:35 ` Hans Verkuil
2020-09-12  8:35   ` [Linux-kernel-mentees] " 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=20200911151046.076abb79@coco.lan \
    --to=mchehab+huawei@kernel.org \
    --cc="  <skhan@linuxfoundation.org>,  "@lists.linuxfoundation.org \
    --cc="linux-kernel@vger.kernel.org\" <linux-kernel@vger.kernel.org>"@osuosl.org \
    --cc="linux-media@vger.kernel.org\"          <linux-media@vger.kernel.org>,  "@lists.linuxfoundation.org \
    --cc=dwlsalmeida@gmail.com \
    --cc=linux-kernel-mentees@lists.linuxfoundation \
    --cc=linux-kernel-mentees@lists.linuxfoundation.org \
    --cc=nicolas@ndufresne.ca \
    --cc=r.verdejo@samsung.com \
    --cc=skhan@linuxfoundation.org \
    /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 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.