[MPlayer-dev-eng] nvidia_vid YV12 support

Ivan Kalvachev ivan at cacad.com
Thu Jan 1 22:02:06 CET 2004


I've always wondered why rivatv is used as reference, when
the XFree86 driver is quite good and stable.
It is even written by NVidia developer ;)
And yes, GeForce do have yv12 supported by HW.


Best Regards
   Ivan Kalvachev
  iive


Sascha Sommer said:
>> Hello!
>>
>> I've had a look at nvidia_vid.c and I *think* that I understood enough
>> of what's going on to be of some help.
>>
>> My major problem (as is anyones, I guess) is the lack of documentation
>> for nVidia GPUs. But then, in a discussion between Dmitry Baryshkov
>> and Sascha Sommer Sep/03 <003501c38384$d998d720$38b2ebd9 at oemcomputer>
>> etc. there are some docs mentioned, and the register names shown as
>> comments in nvidia_vid.c (NV_PVIDEO_FORMAT etc.) have to come from
>> somewhere...
>>
>
> Yeah. I'd like to have these docs too. The register names are simply
> copyed
> from the code
> of rivatv (rivatv.sf.net). Afair there were some other docs there but they
> didn't contain
> the needed information.
>
>> I've already had a look the deactivated YV12 section and activated it
>> just for fun and played around a bit with the parameters, but what I
>> can see is - while definitely based on the incoming video stream -
>> severely distorted geometrically (line length mismatch) and color-wise
>> (shades of magenta on green).
>>
>> After setting NV_PVIDEO_FORMAT.b16 to turn on YV12 mode the
>> "best-looking" set-up so far is:
>>
>>   vinfo->dest.pitch.y = 1;
>>   vinfo->dest.pitch.u = 1;
>>   vinfo->dest.pitch.v = 1;
>>
>>   info->pitch = info->width;
>>
>>   vinfo->offset.y = 0;
>>   vinfo->offset.v = info->width*info->height*2;
>>   vinfo->offset.u = info->width*info->height*3;
>>
>>   vinfo->frame_size = info->width * info->height * 3;
>
> Well, I am not sure if Geforce cards directly support yv12 for overlay.
> I found out that the directx driver for my riva128
> converts the yv12 to yuy2 frames first. I think they use some kind
> of dma blits to do this (it is to fast for software conversion moreover
> the card supports some other native formats like yvu9 and indeo3).
> Only YUY2 and UYVY are supported by the overlay engine.
>
> Now that I had a look at vidix header again. dest.pitch.y should really
> be the pitch and not 16 or 1 or whatever. For planar yv12 pitch.u and
> pitch.v are probably pitch.y/2 but I don't know. The best idea would
> be to trace the windows driver. You could dump the frame the overlay
> is displaying and then find out if it is yv12 or yuy2. If you have windows
> installed I could send you some dump app that displays a frame via
> directx and dumps the register values.
> If the Geforce's overlay engine can really display yv12 it should be
> trivial
> to add support for it. If it also uses these dma blits like riva128 and
> TNT
> cards it gets a bit complicated. There is code in rivatv that can do this
> hw conversion for TNT and later but it would require to write a kernel
> mode
> driver. Unfortunatelly I have no agp slot and a small purse what makes it
> a
> bit
> hard to find hw to play with.
>
> Sascha
>
> _______________________________________________
> MPlayer-dev-eng mailing list
> MPlayer-dev-eng at mplayerhq.hu
> http://mplayerhq.hu/mailman/listinfo/mplayer-dev-eng
>




More information about the MPlayer-dev-eng mailing list