From: Timo Teras <timo.teras@iki.fi>
To: "Frank Schäfer" <fschaefer.oss@googlemail.com>
Cc: Mauro Carvalho Chehab <mchehab@redhat.com>,
Linux Media Mailing List <linux-media@vger.kernel.org>
Subject: Re: Terratec Grabby hwrev 2
Date: Tue, 2 Apr 2013 08:43:05 +0300 [thread overview]
Message-ID: <20130402084305.0f623e6e@vostro> (raw)
In-Reply-To: <5159C35D.7080901@googlemail.com>
On Mon, 01 Apr 2013 19:26:53 +0200
Frank Schäfer <fschaefer.oss@googlemail.com> wrote:
> Am 30.03.2013 10:54, schrieb Timo Teras:
> > On Thu, 28 Mar 2013 12:22:52 -0300
> > Mauro Carvalho Chehab <mchehab@redhat.com> wrote:
> >
> >>> On the W7 driver, I don't get any of the above mentioned problems.
> >>>
> >>> I looked at the saa7113 register init sequence, and copied that
> >>> over to linux saa7113 init, but that did not remove the problems.
> >>> There were only few changes.
> >> So, maybe it does a different crop setup at em28xx.
> > I did an analysis of the register setups of em28xx and found the
> > following differences:
> >
> > 1. Different crop settings
> >
> > EM28XX_R1D_VSTART, EM28XX_R1F_CHEIGHT and EM28XX_R2B_YMAX set by W7
> > driver were divided by two compared to the linux driver. Seems that
> > linux driver did just this before commit c2a6b54. I also found the
> > patch https://patchwork.kernel.org/patch/1272051/ to restore the
> > original behaviour, but somehow it was disregarded and commit
> > 0bc9c89 was done instead. The mentioned patch though does not fix
> > R1D setting though.
>
> Can you post the settings the Windows driver uses for these
> registers ? Don't worry about registers 0x28-0x2B, different values
> shouldn' matter. See
> http://permalink.gmane.org/gmane.linux.drivers.video-input-infrastructure/57039.
Yes, it would seem registers 0x28-0x2B do not have great significance
in the video we get out of it.
The full sequence the W7 driver does for PAL video is:
EM28XX_R20_YGAIN 0x00
EM28XX_R22_UVGAIN 0x00
EM28XX_R06_I2C_CLK 0x40
EM28XX_R15_RGAIN 0x20
EM28XX_R16_GGAIN 0x20
EM28XX_R17_BGAIN 0x20
EM28XX_R18_ROFFSET 0x00
EM28XX_R19_GOFFSET 0x00
EM28XX_R1A_BOFFSET 0x00
EM28XX_R23_UOFFSET 0x00
EM28XX_R24_VOFFSET 0x00
EM28XX_R26_COMPR 0x00
EM28XX_R13_??? 0x08 (Note: we do not set this at all)
EM28XX_R27_OUTFMT 0x34
EM28XX_R10_VINMODE 0x00
EM28XX_R28_XMIN 0x01
EM28XX_R29_XMAX 0xB3
EM28XX_R2A_YMIN 0x01
EM28XX_R2B_YMAX 0x47 (We set 0x8e, i think)
EM28XX_R1C_HSTART 0x00
EM28XX_R1D_VSTART 0x01 (We set 0x02)
EM28XX_R1E_CWIDTH 0xB4
EM28XX_R1F_CHEIGHT 0x48 (We set 0x8f, or 0x90)
EM28XX_R1B_OFLOW 0x00
(Tuner and AC97 config takes place here)
EM28XX_R0E_AUDIOSRC 0x8f
EM28XX_R21_YOFFSET 0x08 (We set 0x10)
EM28XX_R20_YGAIN 0x10
EM28XX_R22_UVGAIN 0x10
EM28XX_R14_GAMMA 0x32 (We set 0x20)
EM28XX_R25_SHARPNESS 0x02 (We set 0x00)
EM28XX_R26_COMPR 0x00
EM28XX_R27_OUTFMT 0x34
EM28XX_R11_VINCTRL 0x11
EM28XX_R1B_OFLOW 0x00
EM28XX_R12_VINENABLE 0x67
EM28XX_R22_UVGAIN 0x10
EM28XX_R20_YGAIN 0x10
EM28XX_R0E_AUDIOSRC 0x8f
> > 2. Different outfmt used
> >
> > It seems that ffmpeg defaults to v4l default, which somehow
> > apparently resulted in EM28XX_OUTFMT_RGB_8_RGRG set. When forcing
> > ffmpeg to set yuyv422 or EM28XX_OUTFMT_YUV422_Y0UY1V the color
> > distortions vanished. I'm unsure if the distiortion comes from
> > ffmpeg doing some automatic conversions, or from v4l kernel driver.
>
> The easiest way to test the drivers output formats is to use qv4l2
> with the device opened in raw mode (command line option '-r' or 'Open
> raw device' from the 'File' menu).
> In raw mode, you can be sure that the selected format is always the
> actually used format (otherwise libv4l2 is used which selects what it
> thinks is the best source format for the conversion into the selected
> format.
Ah, ok. So libv4l2 can be doing stuff underneath also. I think in
my setup yuv420p is the preferred one (encoding to h264 with baseline
profile). Now that I figured what goes wrong, this is not a big issue.
> I hate to say that, but currently you shouldn't expect anything else
> than the 16 bit formats to work properly. :(
> The code assumes 16 bit pixel width in several places (initially
> YUV422 was the only supported format).
> Some of these bugs are easy to find (e.g. in em28xx_copy_video() ),
> some are hidden...
> I didn't have enough time yet to track them all down and all my
> attempts to fix parts of the code resulted in an even worse picture
> so far.
Oh, would it then make sense to disable all the non-16bpp formats for
the time being?
Basically, I got mostly OK picture, but areas with all-black and
all-white next to each other got distorted (e.g. subtitles).
> > Though, it might be an idea to set the default outfmt to something
> > that is known to work. So I'm wondering if this could be fixed
> > easily? YUYV422 should have also better quality, so it would make
> > sense to select it instead of the other one.
>
> The driver selects EM28XX_OUTFMT_YUV422_Y0UY1V as default format, so
> it must be ffmpeg that selects EM28XX_OUTFMT_RGB_8_RGRG.
Yes, starting to sound like that.
> > So seems that now the device is working properly. Basically we need
> > the following changes:
> > 1. saa7113 id ignore (or autodetect, and fallback to forced type)
> > 2. saa7113 not writing to the registers 14-17 in case it's not the
> > original chip (id not present)
>
> You should talk to the saa7115 maintainer about that.
get_maintainers.pl says that Mauro and this list is the place to talk
to. So here I am doing it :)
> > 3. em28xx crop height/vstart to divided by 2 in interlaced mode
> > 4. (optionally) em28xx outfmt should default to YUYV422
>
> Both isn't necessary (as explained above).
> What definitely needs to be fixed in the em28xx driver are the
> non-16bit-formats.
Yeah, seems to be the case.
- Timo
next prev parent reply other threads:[~2013-04-02 5:42 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-25 17:08 Terratec Grabby hwrev 2 Timo Teras
2013-03-25 17:36 ` Mauro Carvalho Chehab
2013-03-25 17:48 ` Timo Teras
2013-03-25 18:32 ` Mauro Carvalho Chehab
2013-03-25 19:12 ` Timo Teras
2013-03-26 8:20 ` Timo Teras
2013-03-27 14:10 ` Timo Teras
2013-03-28 8:52 ` Timo Teras
2013-03-28 12:40 ` Mauro Carvalho Chehab
2013-03-28 13:35 ` Timo Teras
2013-03-28 14:54 ` Timo Teras
2013-05-01 17:11 ` Jon Arne Jørgensen
2013-05-02 7:04 ` Timo Teras
2013-05-03 5:47 ` Timo Teras
2013-05-03 9:13 ` Jon Arne Jørgensen
2013-05-03 11:12 ` Ezequiel Garcia
2013-03-28 15:22 ` Mauro Carvalho Chehab
2013-03-30 9:54 ` Timo Teras
2013-04-01 17:26 ` Frank Schäfer
2013-04-02 5:43 ` Timo Teras [this message]
2013-04-02 16:39 ` Frank Schäfer
2013-04-03 8:27 ` Timo Teras
2013-04-05 15:33 ` Frank Schäfer
2013-04-29 12:26 ` Timo Teras
2013-05-03 5:50 ` Timo Teras
2013-05-10 11:04 ` Tomasz Moń
2013-03-27 17:37 ` Frank Schäfer
2013-03-27 17:57 ` Timo Teras
2013-03-27 18:04 ` Timo Teras
2013-03-27 20:12 ` Frank Schäfer
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=20130402084305.0f623e6e@vostro \
--to=timo.teras@iki.fi \
--cc=fschaefer.oss@googlemail.com \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@redhat.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 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.