On 29 October 2015 at 17:22, Sean V Kelley <[email protected]> wrote:
> > > 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, > Hi Sean, > > Am I missing something here in terms of these patches? I see gallium, > state-tracker, etc. I'm looking at Mesa patches right? > Yes these are patches to extend existing vaapi backend provided by mesa. Maybe at some point the efforts should be joined with http://cgit.freedesktop.org/vaapi/intel-driver/. I mean, it would be great if vaapi-intel-driver maintainers could start improving mesa-vaapi instead. To gradually move from this specific backend to the generic one in mesa. It is generic in a sense it does not use libdrm directly but a common wrapper in between. So the same vaapi backend in mesa is working for all gallium drivers. If this was your question behind :) Cheers Julien > > 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 > >
_______________________________________________ Libva mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libva
