君正x2000 ffmpeg硬件解码不能获取pts解决

在使用君正x2000播放mp4过程中,在获的解码帧中的pts一直是无效值AV_NOPTS_VALUE(-9223372036854775808(0x8000000000000000)),通过原厂协助解决了此问题。

在打开解码器之前加入如下语句:

/** 如果不加,将获取不到解码后的pts值*/
avcodec_ctx->framerate.num = stream->avg_frame_rate.num;
avcodec_ctx->framerate.den = stream->avg_frame_rate.den;

 使用h264_v4l2m2m解码器全部代码如下:

int video_codec_init(struct mmplay_t *play)
{int ret;AVCodecContext *avcodec_ctx = avcodec_alloc_context3(NULL);if (!avcodec_ctx) {u_tm_log("Err:avcodec_alloc_context3()\n");ret = -1;goto RET;}AVStream *stream = play->format_ctx->streams[play->video.index];ret = avcodec_parameters_to_context(avcodec_ctx, stream->codecpar);if (ret < 0) {u_tm_log("Err:avcodec_parameters_to_context()\n");ret = -1;goto ERROR1;}/** 如果不加,将获取不到解码后的pts值*/avcodec_ctx->framerate.num = stream->avg_frame_rate.num;avcodec_ctx->framerate.den = stream->avg_frame_rate.den;#define INGENIC_DECODER#ifndef INGENIC_DECODERAVCodec *av_codec = avcodec_find_decoder(avcodec_ctx->codec_id);if (!av_codec) {u_tm_log("Err:avcodec_find_decoder()\n");ret = -1;goto ERROR1;}ret = avcodec_open2(avcodec_ctx, av_codec, NULL);
#elseAVCodec *v4l2_codec = avcodec_find_decoder_by_name("h264_v4l2m2m");if (!v4l2_codec) {u_tm_log("Err:avcodec_find_decoder_by_name()\n");ret = -1;goto ERROR1;}u_tm_log("v4l2_codec->name: %s\n", v4l2_codec->name);ret = avcodec_open2(avcodec_ctx, v4l2_codec, NULL);u_tm_log("avcodec_ctx->codec_id: %d\n", (int)avcodec_ctx->codec_id);u_tm_log("v4l2_codec->id: %d\n", (int)v4l2_codec->id);if(ret < 0) {u_tm_log("Err:avcodec_open2()\n");ret = -1;goto ERROR1;}
#endifplay->video.codec_ctx = avcodec_ctx;return 0;
ERROR1:avcodec_free_context(&avcodec_ctx);
RET:return ret;
}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部