【问题标题】:How to get pixel bit count using PixelFormat in libav如何在 libav 中使用 PixelFormat 获取像素位数
【发布时间】:2011-09-02 12:57:25
【问题描述】:

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

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

    //etc
}

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

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

【问题讨论】:

    标签: c++ directshow libav


    【解决方案1】:

    尝试使用

    #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

    【讨论】:

    • 这就是我要找的东西,但在我与 libav 一起使用的 MSVC 上仍有一个小问题尚未解决:错误 LNK2001 未解析的外部符号 _av_pix_fmt_descriptors。正如this 主题所说,我可以通过手动编辑我不想做的 libav 标头或重新声明 av_pix_fmt_descriptors [] 来修复它。有没有更好的方法来解决这个问题?
    • 您可以尝试使用此处描述的“解决方法”lists.libav.org/pipermail/ffmpeg-devel/2010-October/098473.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2014-07-19
    • 2012-06-06
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多