summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeo Liu <leo.liu@amd.com>2018-04-27 08:32:41 -0400
committerJuan A. Suarez Romero <jasuarez@igalia.com>2018-04-30 18:42:39 +0200
commit1a23971b49f77960afb2c686d20fced476185602 (patch)
treeb7e31bcc5500fd358e9a5b6f226fe434298504cb
parentc0aeac153685c784dfc37674957347a2b6a7c7ab (diff)
st/omx/enc: fix blit setup for YUV LoadImage
The blit here involves scaling since it's copying from I8 format to R8G8 format. Half of source will be filtered out with PIPE_TEX_FILTER_NEAREST instruction, it looks that GPU always uses the second half as source. Currently we use "1" as the start point of x for R, then causing 1 source pixel of U component shift to right. So "-1" should be the start point for U component. Cc: 18.0 18.1 <mesa-stable@lists.freedesktop.org> Reviewed-by: Marek Olšák <marek.olsak@amd.com> (cherry picked from commit 1c5f4f4e17f74d823d9e38c678e40e9f49e2c053) [Juan A. Suarez: apply patch in src/gallium/state_trackers/omx_bellagio/vid_enc.c] Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com> Conflicts: src/gallium/state_trackers/omx/vid_enc_common.c
-rw-r--r--src/gallium/state_trackers/omx_bellagio/vid_enc.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/gallium/state_trackers/omx_bellagio/vid_enc.c b/src/gallium/state_trackers/omx_bellagio/vid_enc.c
index 1a4fb62d40..84a3654521 100644
--- a/src/gallium/state_trackers/omx_bellagio/vid_enc.c
+++ b/src/gallium/state_trackers/omx_bellagio/vid_enc.c
@@ -934,7 +934,7 @@ static OMX_ERRORTYPE enc_LoadImage(omx_base_PortType *port, OMX_BUFFERHEADERTYPE
blit.src.resource = inp->resource;
blit.src.format = inp->resource->format;
- blit.src.box.x = 0;
+ blit.src.box.x = -1;
blit.src.box.y = def->nFrameHeight;
blit.src.box.width = def->nFrameWidth;
blit.src.box.height = def->nFrameHeight / 2 ;
@@ -948,11 +948,11 @@ static OMX_ERRORTYPE enc_LoadImage(omx_base_PortType *port, OMX_BUFFERHEADERTYPE
blit.dst.box.depth = 1;
blit.filter = PIPE_TEX_FILTER_NEAREST;
- blit.mask = PIPE_MASK_G;
+ blit.mask = PIPE_MASK_R;
priv->s_pipe->blit(priv->s_pipe, &blit);
- blit.src.box.x = 1;
- blit.mask = PIPE_MASK_R;
+ blit.src.box.x = 0;
+ blit.mask = PIPE_MASK_G;
priv->s_pipe->blit(priv->s_pipe, &blit);
priv->s_pipe->flush(priv->s_pipe, NULL, 0);