Re: [Mesa-dev] [PATCH 1/2] st/va: don't re-allocate interlaced buffer with pakced YUV format

2017-10-01 Thread Leo Liu

Hi Andy,


On 2017-10-01 07:13 PM, Andy Furniss wrote:
Hmm, maybe this could be extended to allow bgrx which works with vdpau 
but not -


mpv --vo=vaapi lines-576.png


Thanks for testing.

RGB raw data video output is totally separated case from YUYV for both 
vdpau and vaapi, it goes to different code path.


There is no CSC involved for RGB, so it goes to output buffer, not like 
YUYV raw data, which goes to decode buffer.


For vdpau, raw RGB is working because the function 
vlVdpOutputSurfacePutBitsNative() is there handling the case.


For vaapi, it doesn't work, unfortunately because there is no handling 
RGB case from output buffer, vaPutSurface only handles YUV to RGB.


But it should be straightforward to add on.


Regards,
Leo




Andy Furniss wrote:

Tested-by: Andy Furniss 

Leo Liu wrote:

It caused corruption, when vlVaPutImage putting YUV to the fields

Cc: mesa-sta...@lists.freedesktop.org
Cc: Andy Furniss 
---
  src/gallium/state_trackers/va/image.c | 8 
  1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/state_trackers/va/image.c 
b/src/gallium/state_trackers/va/image.c

index f87de8e5c4..84990d8a3d 100644
--- a/src/gallium/state_trackers/va/image.c
+++ b/src/gallium/state_trackers/va/image.c
@@ -487,10 +487,11 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID 
surface, VAImageID image,
   ((format != PIPE_FORMAT_YV12) || 
(surf->buffer->buffer_format != PIPE_FORMAT_NV12)) &&
   ((format != PIPE_FORMAT_IYUV) || 
(surf->buffer->buffer_format != PIPE_FORMAT_NV12))) {

    struct pipe_video_buffer *tmp_buf;
-  struct pipe_video_buffer templat = surf->templat;
-  templat.buffer_format = format;
-  tmp_buf = drv->pipe->create_video_buffer(drv->pipe, );
+  surf->templat.buffer_format = format;
+  if (format == PIPE_FORMAT_YUYV || format == PIPE_FORMAT_UYVY)
+ surf->templat.interlaced = false;
+  tmp_buf = drv->pipe->create_video_buffer(drv->pipe, 
>templat);

    if (!tmp_buf) {
   mtx_unlock(>mutex);
@@ -499,7 +500,6 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID 
surface, VAImageID image,

    surf->buffer->destroy(surf->buffer);
    surf->buffer = tmp_buf;
-  surf->templat.buffer_format = format;
 }
 views = surf->buffer->get_sampler_view_planes(surf->buffer);







___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/2] st/va: don't re-allocate interlaced buffer with pakced YUV format

2017-10-01 Thread Andy Furniss
Hmm, maybe this could be extended to allow bgrx which works with vdpau 
but not -


mpv --vo=vaapi lines-576.png

Andy Furniss wrote:

Tested-by: Andy Furniss 

Leo Liu wrote:

It caused corruption, when vlVaPutImage putting YUV to the fields

Cc: mesa-sta...@lists.freedesktop.org
Cc: Andy Furniss 
---
  src/gallium/state_trackers/va/image.c | 8 
  1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/state_trackers/va/image.c 
b/src/gallium/state_trackers/va/image.c

index f87de8e5c4..84990d8a3d 100644
--- a/src/gallium/state_trackers/va/image.c
+++ b/src/gallium/state_trackers/va/image.c
@@ -487,10 +487,11 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID 
surface, VAImageID image,
   ((format != PIPE_FORMAT_YV12) || 
(surf->buffer->buffer_format != PIPE_FORMAT_NV12)) &&
   ((format != PIPE_FORMAT_IYUV) || 
(surf->buffer->buffer_format != PIPE_FORMAT_NV12))) {

struct pipe_video_buffer *tmp_buf;
-  struct pipe_video_buffer templat = surf->templat;
-  templat.buffer_format = format;
-  tmp_buf = drv->pipe->create_video_buffer(drv->pipe, );
+  surf->templat.buffer_format = format;
+  if (format == PIPE_FORMAT_YUYV || format == PIPE_FORMAT_UYVY)
+ surf->templat.interlaced = false;
+  tmp_buf = drv->pipe->create_video_buffer(drv->pipe, 
>templat);

if (!tmp_buf) {
   mtx_unlock(>mutex);
@@ -499,7 +500,6 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID 
surface, VAImageID image,

surf->buffer->destroy(surf->buffer);
surf->buffer = tmp_buf;
-  surf->templat.buffer_format = format;
 }
 views = surf->buffer->get_sampler_view_planes(surf->buffer);





___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH 1/2] st/va: don't re-allocate interlaced buffer with pakced YUV format

2017-10-01 Thread Andy Furniss

Tested-by: Andy Furniss 

Leo Liu wrote:

It caused corruption, when vlVaPutImage putting YUV to the fields

Cc: mesa-sta...@lists.freedesktop.org
Cc: Andy Furniss 
---
  src/gallium/state_trackers/va/image.c | 8 
  1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/state_trackers/va/image.c 
b/src/gallium/state_trackers/va/image.c
index f87de8e5c4..84990d8a3d 100644
--- a/src/gallium/state_trackers/va/image.c
+++ b/src/gallium/state_trackers/va/image.c
@@ -487,10 +487,11 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID surface, 
VAImageID image,
   ((format != PIPE_FORMAT_YV12) || (surf->buffer->buffer_format != 
PIPE_FORMAT_NV12)) &&
   ((format != PIPE_FORMAT_IYUV) || (surf->buffer->buffer_format != 
PIPE_FORMAT_NV12))) {
struct pipe_video_buffer *tmp_buf;
-  struct pipe_video_buffer templat = surf->templat;
  
-  templat.buffer_format = format;

-  tmp_buf = drv->pipe->create_video_buffer(drv->pipe, );
+  surf->templat.buffer_format = format;
+  if (format == PIPE_FORMAT_YUYV || format == PIPE_FORMAT_UYVY)
+ surf->templat.interlaced = false;
+  tmp_buf = drv->pipe->create_video_buffer(drv->pipe, >templat);
  
if (!tmp_buf) {

   mtx_unlock(>mutex);
@@ -499,7 +500,6 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID surface, 
VAImageID image,
  
surf->buffer->destroy(surf->buffer);

surf->buffer = tmp_buf;
-  surf->templat.buffer_format = format;
 }
  
 views = surf->buffer->get_sampler_view_planes(surf->buffer);




___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev


[Mesa-dev] [PATCH 1/2] st/va: don't re-allocate interlaced buffer with pakced YUV format

2017-09-30 Thread Leo Liu
It caused corruption, when vlVaPutImage putting YUV to the fields

Cc: mesa-sta...@lists.freedesktop.org
Cc: Andy Furniss 
---
 src/gallium/state_trackers/va/image.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/gallium/state_trackers/va/image.c 
b/src/gallium/state_trackers/va/image.c
index f87de8e5c4..84990d8a3d 100644
--- a/src/gallium/state_trackers/va/image.c
+++ b/src/gallium/state_trackers/va/image.c
@@ -487,10 +487,11 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID surface, 
VAImageID image,
  ((format != PIPE_FORMAT_YV12) || (surf->buffer->buffer_format != 
PIPE_FORMAT_NV12)) &&
  ((format != PIPE_FORMAT_IYUV) || (surf->buffer->buffer_format != 
PIPE_FORMAT_NV12))) {
   struct pipe_video_buffer *tmp_buf;
-  struct pipe_video_buffer templat = surf->templat;
 
-  templat.buffer_format = format;
-  tmp_buf = drv->pipe->create_video_buffer(drv->pipe, );
+  surf->templat.buffer_format = format;
+  if (format == PIPE_FORMAT_YUYV || format == PIPE_FORMAT_UYVY)
+ surf->templat.interlaced = false;
+  tmp_buf = drv->pipe->create_video_buffer(drv->pipe, >templat);
 
   if (!tmp_buf) {
  mtx_unlock(>mutex);
@@ -499,7 +500,6 @@ vlVaPutImage(VADriverContextP ctx, VASurfaceID surface, 
VAImageID image,
 
   surf->buffer->destroy(surf->buffer);
   surf->buffer = tmp_buf;
-  surf->templat.buffer_format = format;
}
 
views = surf->buffer->get_sampler_view_planes(surf->buffer);
-- 
2.11.0

___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev