diff options
author | Christian König <christian.koenig@amd.com> | 2013-08-05 11:41:27 -0600 |
---|---|---|
committer | Christian König <christian.koenig@amd.com> | 2014-02-13 11:11:24 +0100 |
commit | 0ef3ce415522c77f11477c340efeef7b61cb8cb3 (patch) | |
tree | eded5723a185e5b682816b5bb32b0074a961c91c /src/gallium/state_trackers/omx/vid_dec.c | |
parent | 9ff0cf903dc4ed806961d1e099d1308322092892 (diff) | |
download | external_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.c | 15 |
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); |