我有一个h264视频流从yuv444p帧编码,它使用vlc或mpv播放器播放良好。如何解码从yuv444p帧编码的h264视频?
但是,当我试图使用libavcodec解码它,它看起来像这样。
源框架是upsize down vlc-player标志。
这里是解码器的intialization:
AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_H264);
AVCodecContext *codecCtx = avcodec_alloc_context3(codec);
avcodec_open2(codecCtx, codec, NULL);
解码器解码从YUV420P编码分组时运行良好。 解码从yuv444p帧编码的数据包时我错过了什么?
更新:我把yuv444p输出转换成带有sws_scale()的BGRA,然后用下面的代码进行转换;
int offset_out = 0, offset_tmp = 0;
uint32_t *tmp = (uint32_t *)malloc(width * height * 4);
for (int i = 0; i < width * height; i++) {
if ((i + width + 9) % (width + 9) > width) {
out[offset_out++] = in[i];
} else {
tmp[offset_tmp++] = in[i];
}
}
memcpy(out + offset_out, tmp, offset_tmp);
free(tmp);
然后图片看起来没事。
i + width + 9
中有一个9
。我猜想,因为我知道源图片的宽度和高度。但是如果宽度或高度改变为其他值,9
不起作用。
我想知道解码器有什么问题。
编辑你的问题,并把它放在一个代码块(四个领先的空格,而不是back-ticks)中,因为它不太可读。或者将您的解决方案作为答案发布。另外,libavcodec还具有格式转换功能。它的实现将利用矢量指令和其他可用的平台上的其他内容。 –
你是如何转换成BGRA的?因为你的line_stride肯定是个问题。 – szatmary
ffmpeg转换它好吗? (命令行) – rogerdpack