1. 程式人生 > >ffmpeg查詢編解碼器decoder,encoder的兩個介面

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;
 }