[PATCH 3/4] drm: Add NV24 and NV42 pixel formats

Laurent Pinchart laurent.pinchart at ideasonboard.com
Wed May 30 07:09:57 PDT 2012


Hi Ville,

On Wednesday 30 May 2012 17:05:10 Ville Syrjälä wrote:
> On Wed, May 30, 2012 at 03:20:09PM +0200, Laurent Pinchart wrote:
> > On Wednesday 30 May 2012 16:09:25 Ville Syrjälä wrote:
> > > On Wed, May 30, 2012 at 02:32:58PM +0200, Laurent Pinchart wrote:
> > > > Signed-off-by: Laurent Pinchart <laurent.pinchart at ideasonboard.com>
> > > > ---
> > > > 
> > > >  include/drm/drm_fourcc.h |    2 ++
> > > >  1 files changed, 2 insertions(+), 0 deletions(-)
> > > > 
> > > > diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
> > > > index bdf0152..fac7235 100644
> > > > --- a/include/drm/drm_fourcc.h
> > > > +++ b/include/drm/drm_fourcc.h
> > > > @@ -106,6 +106,8 @@
> > > > 
> > > >  #define DRM_FORMAT_NV21		fourcc_code('N', 'V', '2', '1') /* 2x2
> > > >  subsampled Cb:Cr plane */
> > > >  #define DRM_FORMAT_NV16		fourcc_code('N', 'V', '1', '6') /* 2x1
> > > >  subsampled Cr:Cb plane */
> > > >  #define DRM_FORMAT_NV61		fourcc_code('N', 'V', '6', '1') /* 2x1
> > > >  subsampled Cb:Cr plane */
> > > > +#define DRM_FORMAT_NV24		fourcc_code('N', 'V', '2', '4') /*
> > > > non-subsampled Cr:Cb plane */
> > > > +#define DRM_FORMAT_NV42		fourcc_code('N', 'V', '4', '2') /*
> > > > non-subsampled Cb:Cr plane */
> > > 
> > > If you want these to reach the driver you need to add them to
> > > format_check().
> > 
> > Oops, my bad, indeed.
> > 
> > > Also you should update drm_format_num_planes() and
> > > drm_format_plane_cpp()
> > > appropriately.
> > 
> > Will do.
> > 
> > I'm a bit puzzled by drm_format_plane_cpp(). I would have expected the
> > return value to be 1 for NV12/21 and NV16/61 formats (2 U/V components,
> > but 1/2 horizontal subsampling). Is that a bug, or am I missing something
> > ?
> The way I used it originally was to calculate the minimum stride for a
> plane. So the formula was something like this:
> min_stride = width / plane_horiz_subsampling * plane_cpp

I had missed the division by the horizontal subsampling factor in 
framebuffer_check(). It makes sense now.

> I guess you could also call it pixel stride (as opposed to line stride).
> That is when you're walking the Cb (or Cr) samples you need to step two
> bytes to the get to the next sample.
> 
> Or if you just think about the chroma plane as just another packed pixel
> format then it also makes sense to have cpp=2.
> 
> YUYV and co. are more problematic though since you have the subsampled
> and non-subsampled stuff in the same plane. There you could argue that
> both 2 and 4 are sensible values. I used 2 there since it meant that I
> didn't have to add special cases to the minimum stride calculations.
> 
> There might be a need to add drm_format_macropixel_size() or some such
> function in the future which would return 4 for YUYV. Especially if
> someone wants to add funky formats such as Y41P.

-- 
Regards,

Laurent Pinchart



More information about the dri-devel mailing list