Ah sorry I got your point, I sent patches to wrong mailing list :) Thx for pointing this out
On 29 October 2015 at 17:37, Sean V Kelley <[email protected]> wrote: > Hi Julien, > > On Thu, Oct 29, 2015 at 10:34 AM, Julien Isorce <[email protected]> > wrote: > >> >> >> 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 :) >> > > > Yes, that is great to see you making contributions here. We will take a > look. Thanks by the way for copying this list. I'm not frequently > monitoring the Mesa list. > > Cheers, > > Sean > > > > > >> >> 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 >>> >>> >> > > > -- > Sean V. Kelley <[email protected]> > Open Source Technology Center / SSG > Intel Corp. >
_______________________________________________ Libva mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libva
