c++ - 如何在 libav 中使用 PixelFormat 获取像素位数

标签 c++ directshow libav

有没有办法从 PixelFormat 类型的 codecContext.pix_fmt 中获取像素的位数?我使用开关手动完成:

switch (OUT_IMAGE_FORMAT)
{
    case PIX_FMT_RGB24:
        pVideoInfo->bmiHeader.biBitCount = 24;
        do_something();
        break;

    //etc
}

但这需要每次libav添加或删除一些像素格式时手动更新。或者,如果我需要添加一些以前不支持的像素格式。

附言我需要它来填充 DirectShow 过滤器的 CMediaType,因此 bits_per_raw_sample 不合适,因为据我所知,它用于内部 libav 使用。

最佳答案

尝试使用

#include "libavutil/pixdesc.h"

pVideoInfo->bmiHeader.biBitCount =  av_get_bits_per_pixel(&av_pix_fmt_descriptors[OUT_IMAGE_FORMAT]);

http://ffmpeg.org/doxygen/trunk/pixfmt_8h.html

关于c++ - 如何在 libav 中使用 PixelFormat 获取像素位数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7283735/

相关文章:

c++ - 如何定义两个依赖类?

c++ - 停止 directshow 源过滤器时 Flash 崩溃

c++ - 使用 directshow 截取图像

ffmpeg 解码原始 h264 失真或灰色图像

c++ - 向数组中插入一个元素

c++ - 为什么这会在 ideone 和 visual studio 中显示运行时错误,但在代码块中却没有?

c++ - 如何正确地将指针对象重新用于自定义类

ffmpeg总是通过directshow传递视频?

ffmpeg - pyav/libav/ffmpeg 当来自实时源的帧处理速度不够快时会发生什么

c++ - 解析具有多个流的音频文件时出错 - ffmpeg