On Thu, Oct 29, 2015 at 9:53 AM, Julien Isorce <[email protected]> wrote:
> Also add RGBA, RGBX and BGRX. > Also extend ChromaToPipe and implement PipeToYCbCr. > > Note that gstreamer-vaapi check all the VAImageFormat fields. > > Signed-off-by: Julien Isorce <[email protected]> > Hi Julien, Am I missing something here in terms of these patches? I see gallium, state-tracker, etc. I'm looking at Mesa patches right? Thanks, Sean > --- > src/gallium/state_trackers/va/image.c | 18 +++++++++++--- > src/gallium/state_trackers/va/va_private.h | 38 > +++++++++++++++++++++++++++++- > 2 files changed, 52 insertions(+), 4 deletions(-) > > diff --git a/src/gallium/state_trackers/va/image.c > b/src/gallium/state_trackers/va/image.c > index b37a971..84d94c8 100644 > --- a/src/gallium/state_trackers/va/image.c > +++ b/src/gallium/state_trackers/va/image.c > @@ -37,14 +37,21 @@ > > #include "va_private.h" > > -static const VAImageFormat formats[VL_VA_MAX_IMAGE_FORMATS] = > +static const VAImageFormat formats[] = > { > {VA_FOURCC('N','V','1','2')}, > {VA_FOURCC('I','4','2','0')}, > {VA_FOURCC('Y','V','1','2')}, > {VA_FOURCC('Y','U','Y','V')}, > {VA_FOURCC('U','Y','V','Y')}, > - {VA_FOURCC('B','G','R','A')} > + {.fourcc = VA_FOURCC('B','G','R','A'), .byte_order = VA_LSB_FIRST, 32, > 32, > + 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000}, > + {.fourcc = VA_FOURCC('R','G','B','A'), .byte_order = VA_LSB_FIRST, 32, > 32, > + 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000}, > + {.fourcc = VA_FOURCC('B','G','R','X'), .byte_order = VA_LSB_FIRST, 32, > 24, > + 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000}, > + {.fourcc = VA_FOURCC('R','G','B','X'), .byte_order = VA_LSB_FIRST, 32, > 24, > + 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000} > }; > > static void > @@ -72,6 +79,8 @@ vlVaQueryImageFormats(VADriverContextP ctx, > VAImageFormat *format_list, int *num > enum pipe_format format; > int i; > > + STATIC_ASSERT(ARRAY_SIZE(formats) == VL_VA_MAX_IMAGE_FORMATS); > + > if (!ctx) > return VA_STATUS_ERROR_INVALID_CONTEXT; > > @@ -80,7 +89,7 @@ vlVaQueryImageFormats(VADriverContextP ctx, > VAImageFormat *format_list, int *num > > *num_formats = 0; > pscreen = VL_VA_PSCREEN(ctx); > - for (i = 0; i < VL_VA_MAX_IMAGE_FORMATS; ++i) { > + for (i = 0; i < ARRAY_SIZE(formats); ++i) { > format = YCbCrToPipe(formats[i].fourcc); > if (pscreen->is_video_format_supported(pscreen, format, > PIPE_VIDEO_PROFILE_UNKNOWN, > @@ -149,6 +158,9 @@ vlVaCreateImage(VADriverContextP ctx, VAImageFormat > *format, int width, int heig > break; > > case VA_FOURCC('B','G','R','A'): > + case VA_FOURCC('R','G','B','A'): > + case VA_FOURCC('B','G','R','X'): > + case VA_FOURCC('R','G','B','X'): > img->num_planes = 1; > img->pitches[0] = w * 4; > img->offsets[0] = 0; > diff --git a/src/gallium/state_trackers/va/va_private.h > b/src/gallium/state_trackers/va/va_private.h > index 93af1be..6a0bd41 100644 > --- a/src/gallium/state_trackers/va/va_private.h > +++ b/src/gallium/state_trackers/va/va_private.h > @@ -46,12 +46,14 @@ > #define VL_VA_DRIVER(ctx) ((vlVaDriver *)ctx->pDriverData) > #define VL_VA_PSCREEN(ctx) (VL_VA_DRIVER(ctx)->vscreen->pscreen) > > -#define VL_VA_MAX_IMAGE_FORMATS 6 > +#define VL_VA_MAX_IMAGE_FORMATS 9 > > static inline enum pipe_video_chroma_format > ChromaToPipe(int format) > { > switch (format) { > + case VA_RT_FORMAT_YUV400: > + return PIPE_VIDEO_CHROMA_FORMAT_400; > case VA_RT_FORMAT_YUV420: > return PIPE_VIDEO_CHROMA_FORMAT_420; > case VA_RT_FORMAT_YUV422: > @@ -80,12 +82,46 @@ YCbCrToPipe(unsigned format) > return PIPE_FORMAT_UYVY; > case VA_FOURCC('B','G','R','A'): > return PIPE_FORMAT_B8G8R8A8_UNORM; > + case VA_FOURCC('R','G','B','A'): > + return PIPE_FORMAT_R8G8B8A8_UNORM; > + case VA_FOURCC('B','G','R','X'): > + return PIPE_FORMAT_B8G8R8X8_UNORM; > + case VA_FOURCC('R','G','B','X'): > + return PIPE_FORMAT_R8G8B8X8_UNORM; > default: > assert(0); > return PIPE_FORMAT_NONE; > } > } > > +static inline unsigned > +PipeToYCbCr(enum pipe_format p_format) > +{ > + switch (p_format) { > + case PIPE_FORMAT_NV12: > + return VA_FOURCC('N','V','1','2'); > + case PIPE_FORMAT_IYUV: > + return VA_FOURCC('I','4','2','0'); > + case PIPE_FORMAT_YV12: > + return VA_FOURCC('Y','V','1','2'); > + case PIPE_FORMAT_UYVY: > + return VA_FOURCC('U','Y','V','Y'); > + case PIPE_FORMAT_YUYV: > + return VA_FOURCC('Y','U','Y','V'); > + case PIPE_FORMAT_B8G8R8A8_UNORM: > + return VA_FOURCC('B','G','R','A'); > + case PIPE_FORMAT_R8G8B8A8_UNORM: > + return VA_FOURCC('R','G','B','A'); > + case PIPE_FORMAT_B8G8R8X8_UNORM: > + return VA_FOURCC('B','G','R','X'); > + case PIPE_FORMAT_R8G8B8X8_UNORM: > + return VA_FOURCC('R','G','B','X'); > + default: > + assert(0); > + return -1; > + } > +} > + > static inline VAProfile > PipeToProfile(enum pipe_video_profile profile) > { > -- > 1.9.1 > > _______________________________________________ > Libva mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/libva > -- Sean V. Kelley <[email protected]> Open Source Technology Center / SSG Intel Corp.
_______________________________________________ Libva mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libva
