ffmpeg查詢編解碼器decoder,encoder的兩個介面
對於不同的編解碼器有不同的AV_CODEC_ID_XX的,用avcodec_find_encoder就可以,但是對於一個ID對應多個編解碼器的就不行了,
比如aac,faac,fdk_aac,此時需要用avcodec_find_encoder_by_name查詢對應的編解碼器。當然,可以只編譯一個aac,那麼預設的就是你編譯的那個
/**
* Find a registered encoder with a matching codec ID.
*
* @param id AVCodecID of the requested encoder
* @return An encoder if one was found, NULL otherwise.
*/
AVCodec *avcodec_find_encoder(enum AVCodecID id);
/**
* Find a registered encoder with the specified name.
*
* @param name name of the requested encoder
* @return An encoder if one was found, NULL otherwise.
*/
AVCodec *avcodec_find_encoder_by_name(const char *name);
附上原始碼:
AVCodec *avcodec_find_encoder(enum AVCodecID id)
{
return find_encdec(id, 1);
}
AVCodec *avcodec_find_encoder_bAVCodec *avcodec_find_encoder_by_name(const char *name)
{
AVCodec *p;
if (!name)
return NULL;
p = first_avcodec;
while (p) {
if (av_codec_is_encoder(p) && strcmp(name, p->name) == 0)
return p;
p = p->next;
}
return NULL;
}