st/omx/dec: separate create_video_codec to different codecs

v2: get frame size from port info

Signed-off-by: Leo Liu <leo.liu@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
This commit is contained in:
Leo Liu 2015-03-13 12:25:42 -04:00 committed by Marek Olšák
parent d043b51ba4
commit ef1ae703a9
4 changed files with 30 additions and 18 deletions

View file

@ -44,8 +44,6 @@
#include <bellagio/omxcore.h> #include <bellagio/omxcore.h>
#endif #endif
#include <bellagio/omx_base_video_port.h>
#include "pipe/p_screen.h" #include "pipe/p_screen.h"
#include "pipe/p_video_codec.h" #include "pipe/p_video_codec.h"
#include "util/u_memory.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->messageType == OMX_CommandStateSet) {
if ((msg->messageParam == OMX_StateIdle ) && (priv->state == OMX_StateLoaded)) { 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) if (priv->profile == PIPE_VIDEO_PROFILE_MPEG2_MAIN)
vid_dec_mpeg12_Init(priv); vid_dec_mpeg12_Init(priv);
else if (priv->profile == PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH) else if (priv->profile == PIPE_VIDEO_PROFILE_MPEG4_AVC_HIGH)

View file

@ -44,6 +44,7 @@
#include <bellagio/st_static_component_loader.h> #include <bellagio/st_static_component_loader.h>
#include <bellagio/omx_base_filter.h> #include <bellagio/omx_base_filter.h>
#include <bellagio/omx_base_video_port.h>
#include "pipe/p_video_state.h" #include "pipe/p_video_state.h"
#include "state_tracker/drm_driver.h" #include "state_tracker/drm_driver.h"

View file

@ -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; 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->codec->begin_frame(priv->codec, priv->target, &priv->picture.base);
priv->frame_started = true; priv->frame_started = true;
} }

View file

@ -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) 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.base.profile = PIPE_VIDEO_PROFILE_MPEG2_MAIN;
priv->picture.mpeg12.intra_matrix = default_intra_matrix; priv->picture.mpeg12.intra_matrix = default_intra_matrix;
priv->picture.mpeg12.non_intra_matrix = default_non_intra_matrix; priv->picture.mpeg12.non_intra_matrix = default_non_intra_matrix;