如何按名称获取编解码器的ffmpeg列表?

时间:2013-05-05 21:24:02

标签: c++-cli

我在C

中有这个功能
int Encoder_GetCurrentCodecType()
{
    if (current_codec != NULL)
        return (int) current_codec->type;
    return AVMEDIA_TYPE_UNKNOWN;
}

但该函数返回每个编解码器类型的代码。 喜欢:0,1,2,3,4,5,6,7

如果我在函数i中进行测试,请输入:AVMediaType:: 然后我看到所有7种编解码器类型的列表,例如:

AVMEDIA_TYPE_AUDIO

所以我想创建一个类似int的函数,但stringconst char*将返回类型的名称,而不是代码。

我该怎么做?

修改

在C文件中我做了:

const char* Encoder_av_get_media_type_string(enum AVMediaType media_type)
{
    switch (media_type) {
        case AVMEDIA_TYPE_VIDEO:      return "video";
        case AVMEDIA_TYPE_AUDIO:      return "audio";
        case AVMEDIA_TYPE_DATA:       return "data";
        case AVMEDIA_TYPE_SUBTITLE:   return "subtitle";
        case AVMEDIA_TYPE_ATTACHMENT: return "attachment";
        default:                      return NULL;
        }
}

然后在头文件中连接C和C ++我做了:

const char* Encoder_av_get_media_type_string(enum AVMediaType media_type);

然后在C ++头文件中我做了:

property List<String^> ^GetCodec
{

    List<String^>^ get()
    {
        List<String^> ^l = gcnew List<String^>;
        String ^s;


        s = gcnew String(Encoder_av_get_media_type_string(avm));
        l->Add(s);


        return l;
    }
}

然后在CSHARP中我做了:

for (int i = 0; i < f.GetCodec.Count; i++)
            {
                ss.Add(f.GetCodec[i]);
            }

所以也许在C ++中它不应该是属性我想在CSHARP做一些事情时我做f.GetCodec。然后它会显示所有编解码器类型名称的列表。

就像我正在做f.GetCodec.Add这样的属性,看到属性列表所以f.GetCodec。(这里我将列出所有类型名称)

如果不可能,那么只需在CSHARP中创建一个包含所有类型名称的列表。

但是现在我只得到一个名字“视频”就是它。

1 个答案:

答案 0 :(得分:1)

根据this,有一个功能可以做到这一点。

const char* av_get_media_type_string(enum AVMediaType media_type)