mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-23 15:30:14 +01:00
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:
parent
d043b51ba4
commit
ef1ae703a9
4 changed files with 30 additions and 18 deletions
|
|
@ -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)
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue