summaryrefslogtreecommitdiffstats
path: root/src/gallium/state_trackers/omx/vid_dec.c
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2013-08-05 11:41:27 -0600
committerChristian König <christian.koenig@amd.com>2014-02-13 11:11:24 +0100
commit0ef3ce415522c77f11477c340efeef7b61cb8cb3 (patch)
treeeded5723a185e5b682816b5bb32b0074a961c91c /src/gallium/state_trackers/omx/vid_dec.c
parent9ff0cf903dc4ed806961d1e099d1308322092892 (diff)
downloadexternal_mesa3d-0ef3ce415522c77f11477c340efeef7b61cb8cb3.zip
external_mesa3d-0ef3ce415522c77f11477c340efeef7b61cb8cb3.tar.gz
external_mesa3d-0ef3ce415522c77f11477c340efeef7b61cb8cb3.tar.bz2
st/omx: initial OpenMAX H264 encoder v7
v2 (chk): fix eos handling v3 (leo): implement scaling configuration support v4 (leo): fix bitrate bug v5 (chk): add workaround for bug in Bellagio v6 (chk): fix div by 0 if framerate isn't known, user separate pipe object for scale and transfer, always flush the transfer pipe before encoding v7 (chk): make suggested changes, cleanup a bit more, only advertise encoder on supported hardware Signed-off-by: Christian König <christian.koenig@amd.com> Signed-off-by: Leo Liu <leo.liu@amd.com>
Diffstat (limited to 'src/gallium/state_trackers/omx/vid_dec.c')
-rw-r--r--src/gallium/state_trackers/omx/vid_dec.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/gallium/state_trackers/omx/vid_dec.c b/src/gallium/state_trackers/omx/vid_dec.c
index a747c51..e2a2891 100644
--- a/src/gallium/state_trackers/omx/vid_dec.c
+++ b/src/gallium/state_trackers/omx/vid_dec.c
@@ -533,7 +533,6 @@ static void vid_dec_FillOutput(vid_dec_PrivateType *priv, struct pipe_video_buff
struct pipe_sampler_view **views;
struct pipe_transfer *transfer;
struct pipe_box box = { };
-
uint8_t *src, *dst;
views = buf->get_sampler_view_planes(buf);
@@ -560,8 +559,6 @@ static void vid_dec_FillOutput(vid_dec_PrivateType *priv, struct pipe_video_buff
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);
-
- output->nFilledLen = output->nAllocLen;
}
static void vid_dec_FrameDecoded(OMX_COMPONENTTYPE *comp, OMX_BUFFERHEADERTYPE* input,
@@ -573,8 +570,16 @@ static void vid_dec_FrameDecoded(OMX_COMPONENTTYPE *comp, OMX_BUFFERHEADERTYPE*
if (!input->pInputPortPrivate)
input->pInputPortPrivate = priv->Flush(priv);
- if (input->pInputPortPrivate)
- vid_dec_FillOutput(priv, input->pInputPortPrivate, output);
+ if (input->pInputPortPrivate) {
+ if (output->pInputPortPrivate) {
+ struct pipe_video_buffer *tmp = output->pOutputPortPrivate;
+ output->pOutputPortPrivate = input->pInputPortPrivate;
+ input->pInputPortPrivate = tmp;
+ } else {
+ vid_dec_FillOutput(priv, input->pInputPortPrivate, output);
+ }
+ output->nFilledLen = output->nAllocLen;
+ }
if (eos && input->pInputPortPrivate)
vid_dec_FreeInputPortPrivate(input);