c - AV_PIX_FMT_NV12 表示它具有 12bpp 位像素颜色,但数据是 uint8_t 我如何修改帧中的像素?

标签 c ffmpeg

文档说 AV_PIX_FMT_NV12 平面 YUV 4:2:0, 12bpp, Y 的 1 个平面和 UV 分量的 1 个平面,它们是交错的(第一个字节 U 和后面的字节 V)
linesize[1] 和 linesize[0] 也是 1920,但如果我 strlen(data[1]) (UV 分量)
我得到 1044587 这个除以 frame->heigth 给我 967,21 ......所以 linesize 是错误的?

最佳答案

每个 channel 8 位,所以 uint8_t 是正确的。
“每像素 12 位”来自 8 位 Y + 2 位 U(每 4 个像素 8 位)+ 2 位 V(每 4 个像素 8 位)= 平均每像素 12 位。这也是为什么 UV 平面的位数是 Y 平面的一半的原因;它是 U+V 数据,但仅适用于 1/4 的像素。

关于c - AV_PIX_FMT_NV12 表示它具有 12bpp 位像素颜色,但数据是 uint8_t 我如何修改帧中的像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68506645/

相关文章:

c - 如何在Linux中获取显示设备名称

c - MPI block 和分散

c - c中的链表子串

c - 使用套接字和 TCP 的 C 语言服务器客户端程序

ffmpeg - 在 x264 MP4 中使用 FFmpeg 获得正确的比特率

ffmpeg - avcodec_open 仅适用于未压缩格式

c - char* x 和 char x[] 之间 sizeof 的区别

video - 如何使用 FFmpeg 确定文件的视频编解码器

java - 从 java 应用程序到 ffmpeg 子进程的管道系列图像

c++ - FFmpeg av_read_frame 从音频流返回数据包