mpp_decoder 数据结构
- struct decode_config
struct decode_config { enum mpp_pixel_format pix_fmt; // output pixel format int bitstream_buffer_size; // bitstream buffer size in pm int packet_count; // packet number in pm int extra_frame_num; // extra frame number in fm };
decode_config 结构体用于配置解码器初始化使用的参数。
-
pix_fmt 表示解码输出的颜色格式
-
bitstream_buffer_size 表示存放输入码流缓存的总长度
-
packet_count 表示 packet manager 中 packet 的最大个数
-
extra_frame_num 表示解码器额外分配的帧个数,主要用于缓存显示帧以保证显示平滑。
-
- struct mpp_packet
struct mpp_packet { void *data; int size; long long pts; unsigned int flag; };
mpp_packet 结构体用于表示输入码流信息。
-
data 表示码流数据存放的起始地址
-
size 表示该笔码流数据长度
-
pts 表示该笔码流的时间戳
-
flag 表示该笔码流的标记位,目前仅用于确定该码流是否为最后一笔码流(PACKET_FLAG_EOS)
-
- struct mpp_frame
struct mpp_size { int width; int height; }; struct mpp_rect { int x; int y; int width; int height; }; enum mpp_buf_type { MPP_DMA_BUF_FD, MPP_PHY_ADDR, }; struct mpp_buf { enum mpp_buf_type buf_type; union { int fd[3]; unsigned int phy_addr[3]; }; unsigned int stride[3]; struct mpp_size size; unsigned int crop_en; struct mpp_rect crop; enum mpp_pixel_format format; unsigned int flags; };
-
buf_type:表示 mpp_buf 类型,以 fd 方式 MPP_DMA_BUF_FD 或 以物理地址方式 MPP_PHY_ADDR;
-
fd[3]:表示 buffer 三个分量的 fd
-
phy_addr[3]:表示 buffer 三个分量的物理地址
-
stride[3]:表示 buffer 三个分量的 stride
-
size:表示 buffer 的宽、高
-
crop_en: 表示该 buffer 是否需要 crop
-
crop:表示该 buffer 的 crop 信息
-
format: 表示该 buffer 的颜色格式类型
struct mpp_frame { struct mpp_buf buf; long long pts; unsigned int id; unsigned int flags; };
-
buf:表示 mpp_frame 的 buffer 信息
-
pts:表示 mpp_frame 的时间戳
-
id:表示 mpp_frame 的唯一标识
-
flags:表示 mpp_frame 的标志位
-
- enum mpp_dec_errno
enum mpp_dec_errno { DEC_ERR_NOT_SUPPORT = 0x90000001, DEC_ERR_NO_EMPTY_PACKET = 0x90000002, // no packet in empty list DEC_ERR_NO_READY_PACKET = 0x90000003, // DEC_ERR_NO_EMPTY_FRAME = 0x90000004, // DEC_ERR_NO_RENDER_FRAME = 0x90000005, // DEC_ERR_NULL_PTR = 0x90000006, DEC_ERR_FM_NOT_CREATE = 0x90000006, };
-
DEC_ERR_NOT_SUPPORT:该码流不支持
-
DEC_ERR_NO_EMPTY_PACKET:packet manager 中缺少空闲的 packet,可能是解码速度小于送 packet 速度,此时需要等待一段时间;
-
DEC_ERR_NO_READY_PACKET:packet manager 中缺少填好码流数据的 packet,可能是送 packet 速度小于解码速度,此时需要等待一段时间;
-
DEC_ERR_NO_EMPTY_FRAME:frame manager 中缺少空闲的 frame,表示所有帧都处于使用状态,通常是解码速度大于显示速度导致,此时需要等待一段时间;
-
DEC_ERR_NO_RENDER_FRAME:frame manager 中缺少待显示的 frame,表示所有帧都处于空闲状态,通常是解码速度小于显示速度导致,此时需要等待一段时间;
-
DEC_ERR_NULL_PTR:表示接口函数输入参数存在空指针
-
DEC_ERR_FM_NOT_CREATE:表示在获取待显示 frame 时 frame manager 还未创建
-
- enum mpp_codec_type
enum mpp_codec_type { MPP_CODEC_VIDEO_DECODER_H264 = 0x1000, // decoder MPP_CODEC_VIDEO_DECODER_MJPEG, MPP_CODEC_VIDEO_DECODER_PNG, MPP_CODEC_VIDEO_ENCODER_H264 = 0x2000, // encoder };
mpp_codec_type 枚举类型表示支持的编解码格式。
- enum mpp_dec_cmd
enum mpp_dec_cmd { MPP_DEC_INIT_CMD_SET_EXT_FRAME_ALLOCATOR, // frame buffer allocator MPP_DEC_INIT_CMD_SET_ROT_FLIP_FLAG, MPP_DEC_INIT_CMD_SET_SCALE, MPP_DEC_INIT_CMD_SET_CROP_INFO, MPP_DEC_INIT_CMD_SET_OUTPUT_POS, };
-
MPP_DEC_INIT_CMD_SET_EXT_FRAME_ALLOCATOR:表示由外部设置帧 buffer 分配器
-
MPP_DEC_INIT_CMD_SET_ROT_FLIP_FLAG: 表示设置旋转、镜像后处理,只用于 JPEG
-
MPP_DEC_INIT_CMD_SET_SCALE: 表示设置缩放系数,只用于 JPEG
-
MPP_DEC_INIT_CMD_SET_CROP_INFO:表示设置输出 crop 信息
-
MPP_DEC_INIT_CMD_SET_OUTPUT_POS:表示设置解码图像在输出缓存的位置
-