diff options
author | Leo Liu <[email protected]> | 2015-03-13 12:25:42 -0400 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2015-04-28 17:42:35 +0200 |
commit | ef1ae703a96fef72d2d8c22ef76bd1dfc41d1cee (patch) | |
tree | 0c0ae0209e909d7ae96f2c27efb8bc356b6c0c20 /src | |
parent | d043b51ba47688044b1a09a6023093a90ad62e6a (diff) |
st/omx/dec: separate create_video_codec to different codecs
v2: get frame size from port info
Signed-off-by: Leo Liu <[email protected]>
Reviewed-by: Christian König <[email protected]>
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/state_trackers/omx/vid_dec.c | 18 | ||||
-rw-r--r-- | src/gallium/state_trackers/omx/vid_dec.h | 1 | ||||
-rw-r--r-- | src/gallium/state_trackers/omx/vid_dec_h264.c | 15 | ||||
-rw-r--r-- | src/gallium/state_trackers/omx/vid_dec_mpeg12.c | 14 |
4 files changed, 30 insertions, 18 deletions
diff --git a/src/gallium/state_trackers/omx/vid_dec.c b/src/gallium/state_trackers/omx/vid_dec.c index 13f4f5558b1..9e7e7ba7787 100644 --- a/src/gallium/state_trackers/omx/vid_dec.c +++ b/src/gallium/state_trackers/omx/vid_dec.c @@ -44,8 +44,6 @@ #include <bellagio/omxcore.h> #endif -#include <bellagio/omx_base_video_port.h> - #include "pipe/p_screen.h" #include "pipe/p_video_codec.h" #include "util/u_memory.h" @@ -364,22 +362,6 @@ static OMX_ERRORTYPE vid_dec_MessageHandler(OMX_COMPONENTTYPE* comp, internalReq if (msg->messageType == OMX_CommandStateSet) { if ((msg->messageParam == OMX_StateIdle ) && (priv->state == OMX_StateLoaded)) { - - struct pipe_video_codec templat = {}; - omx_base_video_PortType *port; - - port = (omx_base_video_PortType *)priv->ports[OMX_BASE_FILTER_INPUTPORT_INDEX]; - - templat.profile = priv->profile; - templat.entrypoint = PIPE_VIDEO_ENTRYPOINT_BITSTREAM; - templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420; - templat.width = port->sPortParam.format.video.nFrameWidth; - templat.height = port->sPortParam.format.video.nFrameHeight; - templat.max_references = 2; - templat.expect_chunked_decode = true; - - priv->codec = priv->pipe->create_video_codec(priv->pipe, &templat); - if (priv->profile == PIPE_VIDEO_PROFILE_MPEG2_MAIN) vid_dec_mpeg12_Init(priv); else if (priv->profile == PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH) diff --git a/src/gallium/state_trackers/omx/vid_dec.h b/src/gallium/state_trackers/omx/vid_dec.h index 9acf872cfe2..1c51f9c6d78 100644 --- a/src/gallium/state_trackers/omx/vid_dec.h +++ b/src/gallium/state_trackers/omx/vid_dec.h @@ -44,6 +44,7 @@ #include <bellagio/st_static_component_loader.h> #include <bellagio/omx_base_filter.h> +#include <bellagio/omx_base_video_port.h> #include "pipe/p_video_state.h" #include "state_tracker/drm_driver.h" diff --git a/src/gallium/state_trackers/omx/vid_dec_h264.c b/src/gallium/state_trackers/omx/vid_dec_h264.c index e01e8739740..7c90dee60fa 100644 --- a/src/gallium/state_trackers/omx/vid_dec_h264.c +++ b/src/gallium/state_trackers/omx/vid_dec_h264.c @@ -105,6 +105,21 @@ static void vid_dec_h264_BeginFrame(vid_dec_PrivateType *priv) priv->picture.h264.num_ref_frames = priv->picture.h264.pps->sps->max_num_ref_frames; + if (!priv->codec) { + struct pipe_video_codec templat = {}; + omx_base_video_PortType *port; + + port = (omx_base_video_PortType *)priv->ports[OMX_BASE_FILTER_INPUTPORT_INDEX]; + templat.profile = priv->profile; + templat.entrypoint = PIPE_VIDEO_ENTRYPOINT_BITSTREAM; + templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420; + templat.max_references = 2; + templat.expect_chunked_decode = true; + templat.width = port->sPortParam.format.video.nFrameWidth; + templat.height = port->sPortParam.format.video.nFrameHeight; + + priv->codec = priv->pipe->create_video_codec(priv->pipe, &templat); + } priv->codec->begin_frame(priv->codec, priv->target, &priv->picture.base); priv->frame_started = true; } diff --git a/src/gallium/state_trackers/omx/vid_dec_mpeg12.c b/src/gallium/state_trackers/omx/vid_dec_mpeg12.c index de4c69a0d0e..bef83ecd85a 100644 --- a/src/gallium/state_trackers/omx/vid_dec_mpeg12.c +++ b/src/gallium/state_trackers/omx/vid_dec_mpeg12.c @@ -65,6 +65,20 @@ static struct pipe_video_buffer *vid_dec_mpeg12_Flush(vid_dec_PrivateType *priv) void vid_dec_mpeg12_Init(vid_dec_PrivateType *priv) { + struct pipe_video_codec templat = {}; + omx_base_video_PortType *port; + + port = (omx_base_video_PortType *)priv->ports[OMX_BASE_FILTER_INPUTPORT_INDEX]; + templat.profile = priv->profile; + templat.entrypoint = PIPE_VIDEO_ENTRYPOINT_BITSTREAM; + templat.chroma_format = PIPE_VIDEO_CHROMA_FORMAT_420; + templat.max_references = 2; + templat.expect_chunked_decode = true; + templat.width = port->sPortParam.format.video.nFrameWidth; + templat.height = port->sPortParam.format.video.nFrameHeight; + + priv->codec = priv->pipe->create_video_codec(priv->pipe, &templat); + priv->picture.base.profile = PIPE_VIDEO_PROFILE_MPEG2_MAIN; priv->picture.mpeg12.intra_matrix = default_intra_matrix; priv->picture.mpeg12.non_intra_matrix = default_non_intra_matrix; |