海思播放器解码记录

  在设备端采用minigui+hisi vdec+vo实现本地视频回放,这个方案是在两年前就实现了的。但是最近在对接ipc后,使用播放器播放录像发现以下两个问题:

    1)在ipc使用高码流(4MB/s)录像时,视频回放只能回放几秒数据就无法解码

    2)设置ipc帧率是25f/s时回放效果是慢放,以前一直使用8f/s测试

对于问题1,解决方案是解码器初始化时给的内存大小不足导致的(红色部分参数)。

typedef struct hiVDEC_CHN_ATTR_S
{
PAYLOAD_TYPE_E enType;
HI_U32 u32BufSize ; /*stream buf size(Byte)*/
HI_U32 u32Priority ; /*priority*/
HI_U32 u32PicWidth ; /*max pic width*/
HI_U32 u32PicHeight ; /*max pic height*/
union
{
VDEC_ATTR_JPEG_S stVdecJpegAttr;
VDEC_ATTR_VIDEO_S stVdecVideoAttr;
};
}VDEC_CHN_ATTR_S;
【成员】
成员名称 描述
enType 解码协议类型枚举值。
     静态属性。
u32BufSize 码流缓存的大小。
     取值范围:大于等于解码通道大小(宽 x 高)的 3/4 倍,即 420
     象大小的一半(宽 x x3/2x1/2),以 byte 为单位。
     推荐值:一幅 YUV420 解码图像大小。即:宽 x x1.5
     静态属性。
u32Priority 通道优先级,取值范围为 1 ~ 255,值越大优先级越高。
     注意: 0 表明此通道不被调度,
                 Hi3521/Hi3520A/Hi3520D/Hi3515A/Hi3515C VEDU 优先级无效
     但必须设置为非 0 才能解码
u32PicWidth 通道支持的解码图像最大宽(以像素为单位)
     静态属性。
u32PicHeight 通道支持的解码图像最大高(以像素为单位)
     静态属性。
stVdecJpegAttr JPEG 通道的相关属性
stVdecVideoAttr JPEG 以外其它所支持类型的通道的相关属性


typedef struct hiVDEC_PRTCL_PARAM_S
{
HI_S32 s32MaxSliceNum;
HI_S32 s32MaxSpsNum;
HI_S32 s32MaxPpsNum;
HI_S32 s32SCDBufSize;
HI_S32 s32DisplayFrameNum;
}VDEC_PRTCL_PARAM_S;
【成员】
成员名称 描述
s32MaxSliceNum 该通道解码支持的最大 Slice 个数, ,默认为 16,仅对
                                  H.264 有效,取值范围为[1, 136]
s32MaxSpsNum 该通道解码支持的最大 SPS 个数,默认为 2,仅对 H.264
         有效,取值范围为[1, 32]
s32MaxPpsNum 该通道解码支持的最大 PPS 个数,默认为 2,仅对 H.264
         有效,取值范围为[1, 256]
s32SCDBufSize 码流切分模块的 buffer 大小,对 JPEG/MJPEG 无效, h
                            264 解码时,取值为大于等于 MAX 256 x 1024,通道
        宽 x 通道高 x 3 / 2);其它协议解码时取值为大于等于
        解码通道大小(宽 x 高)。
s32DisplayFrameNum 显示及解码缓存的图像的最小帧数,对 H.264 解码通道
           默认为 2,对 JPEG 解码通道默认为 4
           取值范围: [1, 16]


2)对于问题二

    是对解码器工作模式的理解错误,以前是8f/s的数据,所以每向解码器发送一帧数据我都会睡一小会,再发送下一帧数据。通过usleep达到控制帧率的效果。其实这种理解是错误的。对解码器而言,它没有帧率的概念,读取h264数据只需要查询解码器状态,能继续发送数据给它就直接发送就行,让解码器全速运行解码即可。而帧率控制是通过vdec绑定vo之后,设置vo的帧率参数来达到视频播放帧率控制效果。

HI_MPI_VO_SetChnFrameRate
【描述】
设置指定视频输出通道的显示帧率。
【语法】
HI_S32 HI_MPI_VO_SetChnFrameRate (VO_DEV VoDev,VO_CHN VoChn, HI_S32
s32VoFramerate);
【参数】
参数名称 描述 输入/输出
VoDev 视频输出设备号。 输入
VoChn 视频输出通道的通道号。
取值范围: [0, VO_MAX_CHN_NUM)
输入
s32VoFramerate 视频通道显示帧率。 输入
【返回值】
返回值 描述
0 成功。
0 失败,其值为错误码。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 海思H.265解码库(HiSilicon H.265 Decoder)是一种用于解码H.265视频编码格式的软件库。水印(Watermark)是一种用于对视频内容进行标记或标识的技术。关于海思H.265解码库是否支持水印的问题,实际上并没有明确的答案。这是因为水印的添加通常是在视频编码时进行的,而不是在解码时进行的。 H.265解码库的主要功能是将H.265编码格式的视频数据解码成原始视频数据。解码过程中并不会添加、删除或修改视频内容。因此,在解码阶段,H.265解码库通常不会提供水印添加的功能。 要在视频中添加水印,通常需要在视频编码之前使用专门的水印添加工具或算法对视频进行处理。这样,水印信息将被嵌入到视频数据中,并在解码时保留。因此,如果想要在H.265视频中添加水印,可以在视频编码之前使用合适的软件工具或算法进行处理。 总之,海思H.265解码库作为一种视频解码软件库,不直接支持水印的添加功能。添加水印通常需要在视频编码之前进行处理。 ### 回答2: 海思H265解码库是华为公司开发的一种视频解码技术,可以对H265格式的视频进行高效解码解码库本身不具备水印功能,但在解码过程中可以通过其他方式添加水印。 要在H265视频中添加水印,可以使用图像处理技术。首先,需要设计或选择要添加的水印图像,例如文字、logo或者其他标识。然后,通过图像处理算法将水印图像融合到解码后的视频帧上。 在解码过程中,可以先对解码后的视频帧进行处理,例如调整亮度、对比度和饱和度等,然后将水印图像叠加到视频帧的指定位置上。最后,将处理后的视频帧再次编码,生成具有水印的H265视频文件。 需要注意的是,水印的添加过程可能会增加解码和编码的计算复杂度,对系统资源要求较高。因此,在实际应用中需要根据具体需求和系统性能权衡是否添加水印。 总之,海思H265解码库本身并不包含水印功能,但可以通过图像处理技术在解码过程中添加水印。具体的水印添加过程需要根据具体需求和系统资源进行设计和实现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值