Thx Leo.
I confirm it works with nouveau driver so your fix is:
Tested-by: Julien Isorce <j.iso...@samsung.com
<mailto:j.iso...@samsung.com>>
On 28 June 2016 at 02:27, Liu, Leo <leo....@amd.com
<mailto:leo....@amd.com>> wrote:
Hi Julien and Christian,
I got a patch attached to fix the "fillout" problem, and please
review.
But we still need to fix transcoding issue with interlaced as
true. Our transcode support tunneling, basic the decode buffer
will be used directly for encode.
Thanks,
Leo
------------------------------------------------------------------------
*From:* Julien Isorce <julien.iso...@gmail.com
<mailto:julien.iso...@gmail.com>>
*Sent:* June 27, 2016 4:54:07 PM
*To:* Liu, Leo
*Cc:* ML mesa-dev; Gurkirpal Singh; Koenig, Christian
*Subject:* Re: [Mesa-dev] [PATCH 2/3] st/omx: add support for
nouveau / interlaced
Hi Leo,
Sorry for the inconvenience, could you let me know how to
reproduce the problem ?
I have been playing with some gst pipelines and they all work but
I can only test with nouveau driver.
Cheers
Julien
On 27 June 2016 at 21:35, Leo Liu <leo....@amd.com> wrote:
This patch break omx decode to file, it got seg fault. Will
take look further.
Regards,
Leo
On 06/27/2016 04:16 AM, Julien Isorce wrote:
Signed-off-by: Julien Isorce <j.iso...@samsung.com>
---
src/gallium/state_trackers/omx/vid_dec.c | 51
++++++++++++++++----------------
1 file changed, 26 insertions(+), 25 deletions(-)
diff --git a/src/gallium/state_trackers/omx/vid_dec.c
b/src/gallium/state_trackers/omx/vid_dec.c
index 564ca2f..85ffb88 100644
--- a/src/gallium/state_trackers/omx/vid_dec.c
+++ b/src/gallium/state_trackers/omx/vid_dec.c
@@ -48,6 +48,7 @@
#include "pipe/p_video_codec.h"
#include "util/u_memory.h"
#include "util/u_surface.h"
+#include "vl/vl_video_buffer.h"
#include "vl/vl_vlc.h"
#include "entrypoint.h"
@@ -515,34 +516,34 @@ static void
vid_dec_FillOutput(vid_dec_PrivateType *priv, struct
pipe_video_buff
OMX_VIDEO_PORTDEFINITIONTYPE *def =
&port->sPortParam.format.video;
struct pipe_sampler_view **views;
- struct pipe_transfer *transfer;
- struct pipe_box box = { };
- uint8_t *src, *dst;
+ unsigned i, j;
+ unsigned width, height;
views = buf->get_sampler_view_planes(buf);
- dst = output->pBuffer;
-
- box.width = def->nFrameWidth;
- box.height = def->nFrameHeight;
- box.depth = 1;
-
- src = priv->pipe->transfer_map(priv->pipe,
views[0]->texture, 0,
- PIPE_TRANSFER_READ, &box, &transfer);
- util_copy_rect(dst, views[0]->texture->format,
def->nStride, 0, 0,
- box.width, box.height, src,
transfer->stride, 0, 0);
- pipe_transfer_unmap(priv->pipe, transfer);
-
- dst = ((uint8_t*)output->pBuffer) + (def->nStride *
box.height);
-
- box.width = def->nFrameWidth / 2;
- box.height = def->nFrameHeight / 2;
-
- src = priv->pipe->transfer_map(priv->pipe,
views[1]->texture, 0,
- PIPE_TRANSFER_READ, &box, &transfer);
- util_copy_rect(dst, views[1]->texture->format,
def->nStride, 0, 0,
- box.width, box.height, src,
transfer->stride, 0, 0);
- pipe_transfer_unmap(priv->pipe, transfer);
+ for (i = 0; i < 2 /* NV12 */; i++) {
+ if (!views[i]) continue;
+ width = buf->width;
+ height = buf->height;
+ vl_video_buffer_adjust_size(&width, &height, i,
buf->interlaced, buf->chroma_format);
+ for (j = 0; j < views[i]->texture->array_size; ++j) {
+ struct pipe_box box = {0, 0, j, width, height, 1};
+ struct pipe_transfer *transfer;
+ uint8_t *map, *dst;
+ map = priv->pipe->transfer_map(priv->pipe,
views[i]->texture, 0,
+ PIPE_TRANSFER_READ, &box, &transfer);
+ if (!map)
+ return;
+
+ dst = ((uint8_t*)output->pBuffer +
output->nOffset) + j * def->nStride + i * buf->width *
buf->height;
+ util_copy_rect(dst,
+ views[i]->texture->format,
+ def->nStride *
views[i]->texture->array_size, 0, 0,
+ box.width, box.height, map,
transfer->stride, 0, 0);
+
+ pipe_transfer_unmap(priv->pipe, transfer);
+ }
+ }
}
static void vid_dec_FrameDecoded(OMX_COMPONENTTYPE
*comp, OMX_BUFFERHEADERTYPE* input,
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev