FFMPEG学习【libavcodec】:实用函数(二)

一、函数

attribute_deprecated void  avcodec_set_dimensions (AVCodecContext *sint widthint height)

attribute_deprecated size_t  av_get_codec_tag_string (char *buf, size_t buf_size, unsigned int codec_tag)
在buf中放置一个表示codec标签的字符串。

参数:buf:缓冲区放置编解码器标签

  size:缓冲字节大小

codec_tag: 编解码器标签进行分配

返回:如果有足够的空间可用,将生成的字符串的长度,不包括尾随的null


void  avcodec_string (char *bufint buf_size, AVCodecContext *enc, int encode)

const char *  av_get_profile_name (const AVCodec *codec, int profile)
返回指定配置文件的名称(如果有)。

参数:codec:搜索给定配置文件的编解码器

  profile:请求名称的配置文件值

返回:找到配置文件的名称,否则返回空。


const char *  avcodec_profile_name (enum AVCodecID codec_idint profile)
返回指定配置文件的名称(如果有)。

参数:codec_id:请求的配置文件所属的编解码器的ID

  profile:请求名称的配置文件值

返回:找到配置文件的名称,否则为空。

注意:不同于av_get_profile_name(),它搜索特定解码器或编码器实现支持的配置文件列表,该功能将从AVCodecDescriptor中搜索配置文件列表


int  avcodec_default_execute (AVCodecContext *cint(*func)(AVCodecContext *c2void *arg2), void *argint *ret, int countint size)

int  avcodec_default_execute2 (AVCodecContext *cint(*func)(AVCodecContext *c2void *arg2, intint), void *argint *ret, int count)

int  avcodec_fill_audio_frame (AVFrame *frameint nb_channels, enum AVSampleFormat sample_fmt, const uint8_t *bufint buf_size, int align)
填充AVFrame音频数据并对指针进行linesize。

缓冲区buf必须是预分配的缓冲区,其大小足够容纳指定的样本量。 填充的AVFrame数据指针将指向此缓冲区。

如果需要平面音频,则分配AVFrame扩展数据通道指针。

参数:frame:必须在调用该函数之前设置AVFrame frame-> nb_samples。 此函数填充frame-> data,frame-> extended_data,frame-> linesize [0]。

  nb_channels:管道数量

  sample_fmt:采样格式

  buf:缓冲区用于帧数据

  buf_size:缓冲大小

  align:平面尺寸样本对齐(0 =默认)

返回:> = 0成功,否则失败返回错误代码

在下一个libavutil碰撞时返回存储样品所需的大小(以字节为单位)


void  avcodec_flush_buffers (AVCodecContext *avctx)
重置内部解码器状态/刷新内部缓冲区。

应该调用比如:在寻找或切换到不同的流时。

注意:当未计数的帧被使用(即,avctx-> refcounted_frames为0)时,这使得先前从解码器返回的帧无效。 当使用refcounted帧时,解码器只是释放它可能在内部保留的任何引用,但调用者的引用仍然有效。


int  av_get_bits_per_sample (enum AVCodecID codec_id)
每个样本返回编解码器位。

参数:[in]codec_id:编解码器

返回:每个样本的位数或零,如果给定的编解码器未知。


enum AVCodecID  av_get_pcm_codec (enum AVSampleFormat fmtint be)
返回与采样格式相关联的PCM编解码器。

参数:be:字符串,0为小,1为大,-1(或任何其他)为本机

返回:AV_CODEC_ID_PCM_* 或 AV_CODEC_ID_NONE


int  av_get_exact_bits_per_sample (enum AVCodecID codec_id)
每个样本返回编解码器位。

如果每个样本的位完全正确,而不是近似,则返回非零。

参数:[in]codec_id:编解码器

返回:每个样本的位数或零,如果给定的编解码器未知。


int  av_get_audio_frame_duration (AVCodecContext *avctx, int frame_bytes)
返回音频帧持续时间。

参数:avctx:编解码上下文

  frame_bytes:帧大小,如果未知,则为0

返回:如果已知,样本中的帧持续时间。


int  av_get_audio_frame_duration2 (AVCodecParameters *par, int frame_bytes)
此功能与av_get_audio_frame_duration()相同,但它与AVCodecParameters而不是AVCodecContext配合使用。


attribute_deprecated void  av_register_bitstream_filter (AVBitStreamFilter *bsf)
注册比特流筛选器

过滤器可以通过av_bitstream_filter_next()访问应用程序代码,也可以使用av_bitstream_filter_init()直接初始化。


attribute_deprecated 
AVBitStreamFilterContext * 
av_bitstream_filter_init (const char *name)
给定比特流过滤器名称创建并初始化比特流过滤器上下文。

必须使用av_bitstream_filter_close()来释放返回的上下文。

参数:name:比特流过滤器的名称

返回:如果找到匹配的过滤器并成功初始化了比特流过滤器上下文,否则为NULL


attribute_deprecated int  av_bitstream_filter_filter (AVBitStreamFilterContext *bsfc, AVCodecContext *avctx, const char *argsuint8_t **poutbuf, int *poutbuf_size, const uint8_t *bufint buf_size, int keyframe)
过滤比特流

此功能可使用大小为buf_size的缓冲区buf进行过滤,并将过滤的缓冲区放在poutbuf指向的缓冲区中。

输出缓冲区必须由调用者释放。

参数:bsfc:由av_bitstream_filter_init()创建的比特流过滤器上下文

  avctx:过滤器访问的AVCodecContext可能为NULL。 如果指定,则必须指向数据包发送到的输出流的编码器上下文。

  args:指定过滤器配置的参数可以为NULL

  poutbuf:指针被更新为指向经过滤的缓冲区

  poutbuf_size:指针以字节更新为已过滤的缓冲区大小

  buf:缓冲区包含要过滤的数据

  buf_size:buf大小(以字节为单位)

  keyframe:如果缓冲区过滤器对应于关键帧分组数据,则设置为非零

返回:> = 0,否则为错误代码

如果返回值为正,则输出缓冲区被分配并在* poutbuf中可用,并且与输入缓冲区不同。

如果返回值为0,则输出缓冲区不被分配,并且应该被视为与输入缓冲区相同,或者在设置了* poutbuf的情况下,它指向输入缓冲区(不一定在其起始地址)。 一个特殊情况是如果* poutbuf设置为NULL,并且* poutbuf_size设置为0,表示应该丢弃数据包。


attribute_deprecated void  av_bitstream_filter_close (AVBitStreamFilterContext *bsf)
释放比特流过滤器上下文。

参数:bsf:使用av_bitstream_filter_init()创建的比特流过滤器上下文可以为NULL


attribute_deprecated 
AVBitStreamFilter * 
av_bitstream_filter_next (const AVBitStreamFilter *f)
如果f为NULL,则返回第一个注册的比特流过滤器,如果f不为空,则在f之后返回下一个注册的比特流过滤器,如果f为最后一个则返回NULL。

该函数可用于遍历所有注册的比特流过滤器。


const AVBitStreamFilter *  av_bsf_get_by_name (const char *name)
返回:具有指定名称的比特流筛选器,如果不存在此类比特流筛选器,则为NULL。


const AVBitStreamFilter *  av_bsf_next (void **opaque)
迭代所有注册的比特流过滤器。

参数:opaque:一个指针,其中libavcodec将存储迭代状态。 必须指向NULL才能开始迭代。

返回:下一个注册的比特流过滤器或迭代结束时为NULL


int  av_bsf_alloc (const AVBitStreamFilter *filterAVBSFContext **ctx)
为给定的比特流过滤器分配上下文。

调用者必须按照文档中所述填写上下文参数,然后在将任何数据发送到过滤器之前调用av_bsf_init()。

参数:filter:为其分配实例的过滤器。

  ctx:指向新分配的上下文的指针的指针。 过滤完成后,必须先释放av_bsf_free()。

返回:0成功,失败时返回负ERROR代码


int  av_bsf_init (AVBSFContext *ctx)
在设置完所有参数和选项后,准备使用过滤器。


int  av_bsf_send_packet (AVBSFContext *ctxAVPacket *pkt)
提交数据包进行过滤。

发送每个数据包后,必须通过重复调用av_bsf_receive_packet()才能完全排除过滤器,直到它返回AVERROR(EAGAIN)或AVERROR_EOF。

参数:pkt:包过滤。 比特流过滤器将获取数据包的所有权并重置pkt的内容。 如果发生错误,pkt不会被触摸。 该参数可以是NULL,其指示流的结束(即,不再发送分组)。 这将导致过滤器输出其内部缓冲的任何数据包。

返回:0成功,否则返回AVERROR出错。


int  av_bsf_receive_packet (AVBSFContext *ctxAVPacket *pkt)
检索已过滤的数据包。

参数:[out]pkt:这个结构将被填充过滤的数据包的内容。 它由调用者拥有,当不再需要时,必须使用av_packet_unref()来释放它。 当调用此函数时,此参数应为“干净”(即,使用av_packet_alloc()新分配或与av_packet_unref())不相关。 如果此函数成功返回,则pkt的内容将被返回的数据完全覆盖。 失败时,pkt没有被触动。

返回:0成功。 如果需要将更多的数据包发送到过滤器(使用av_bsf_send_packet())获得更多的输出,则AVERROR(EAGAIN)。 如果过滤器没有进一步的输出,则为AVERROR_EOF。 如果发生错误,则另一个负AVERROR值。

注意:一个输入数据包可能会导致多个输出数据包,因此在使用av_bsf_send_packet()发送数据包后,需要重复调用该函数,直到它停止返回0.滤波器也可以输出比发送给它的数据包更少的数据包, 所以这个功能可以在av_bsf_send_packet()调用成功后立即返回AVERROR(EAGAIN)。


void  av_bsf_free (AVBSFContext **ctx)
释放比特流过滤器上下文和与之相关的一切; 将NULL写入提供的指针。


const AVClass *  av_bsf_get_class (void)
获取AVClass AVBSFContext。

它可以与AV_OPT_SEARCH_FAKE_OBJ结合使用来检查选项。


AVBSFList *  av_bsf_list_alloc (void)
分配空列表的比特流过滤器。

该列表必须稍后由av_bsf_list_free()释放,或由av_bsf_list_finalize()完成。

返回:指向AVBSFList成功时,在发生故障时为NULL


void  av_bsf_list_free (AVBSFList **lst)
释放比特流过滤器的列表。

参数:lst:指向av_bsf_list_alloc()返回的指针


int  av_bsf_list_append (AVBSFList *lst, AVBSFContext *bsf)
将比特流筛选器附加到比特流筛选器列表。

参数:lst:列表附加到

  bsf:过滤上下文要附加

返回:> = 0成功,否则返回AVERROR在失败的情况下


int  av_bsf_list_append2 (AVBSFList *lst, const char *bsf_name, AVDictionary **options)
构造新的比特流过滤器上下文,因为它是名称和选项,并将其附加到比特流筛选器列表。

参数:lst:列表附加到

  bsf_name:比特流过滤器的名称

  options:位流过滤器的选项可以设置为NULL

返回:> = 0成功,否则返回AVERROR在失败的情况下


int  av_bsf_list_finalize (AVBSFList **lst, AVBSFContext **bsf)
完成比特流筛选器列表。

该函数将AVBSFList转换为单个AVBSFContext,因此可将整个比特流过滤器链视为由av_bsf_alloc()最新分配的单个过滤器。 如果调用成功,则AVBSFList结构被释放,并且lst将被设置为NULL。 在失败的情况下,调用者负责通过av_bsf_list_free()释放结构,

参数:lst:要转换的过滤器列表结构

  [out]bsf:指针被设置为新创建的表示比特流过滤器链的AVBSFContext结构

返回:> = 0成功,否则返回AVERROR在失败的情况下


int  av_bsf_list_parse_str (const char *str, AVBSFContext **bsf)
解析字符串描述比特流筛选器列表,并创建描述比特流筛选器的整个链的单个AVBSFContext。

导致AVBSFContext可以被视为由av_bsf_alloc()最新分配的任何其他AVBSFContext。


int  av_bsf_get_null_filter (AVBSFContext **bsf)
获取null /直通比特流过滤器。

参数:[out]bsf:指针被设置为直通比特流过滤器的新实例


void  av_fast_padded_malloc (void *ptr, unsigned int *size, size_t min_size)
与av_fast_malloc有相同的行为但缓冲区附加AV_INPUT_BUFFER_PADDING_SIZE在结尾将始终为0。

此外,整个缓冲区将在初始化之后和之后调整大小为0初始化,以便不会出现未初始化的数据。


void  av_fast_padded_mallocz (void *ptr, unsigned int *size, size_t min_size)
与av_fast_padded_malloc相同的行为,除了缓冲区将在调用后始终为0初始化。


unsigned int  av_xiphlacing (unsigned char *s, unsigned int v)
将缓冲区的长度编码到缓冲区。

由xiph编解码器使用。

参数:s:缓冲区写入; 必须至少(v / 255 + 1)个字节长

  v:extradata的大小(以字节为单位)

返回:写入缓冲区的字节数。


attribute_deprecated void  av_log_missing_feature (void *avc, const char *feature, int want_sample)
记录关于缺少的功能的通用警告消息。

此函数仅用于FFmpeg(libavcodec,libavformat等)内部使用,通常不会被应用程序使用。

参数:avc:指向一个任意结构的指针,第一个字段是一个指向AVClass结构体的指针

  feature:包含缺少的功能的名称的字符串

  want_sample:指示是否需要展示此功能的样品。 如果want_sample不为零,则会向日志消息中添加额外的语句,该消息告诉用户如何将样本报告给开发邮件列表。

已废弃:请改用avpriv_report_missing_feature()。


attribute_deprecated void  av_log_ask_for_sample (void *avc, const char *msg,...) av_printf_format(2
记录一个通用的警告消息,要求一个样本。

此函数仅用于FFmpeg(libavcodec,libavformat等)内部使用,通常不会被应用程序使用。

参数:[in]avc:指向一个任意结构的指针,第一个字段是一个指向AVClass结构体的指针

  [in]msg:包含可选消息的字符串,如果没有消息,则为NULL


attribute_deprecated void void  av_register_hwaccel (AVHWAccel *hwaccel)
注册硬件加速器hwaccel。


AVHWAccel *  av_hwaccel_next (const AVHWAccel *hwaccel)
如果hwaccel为NULL,则返回第一个注册的硬件加速器,如果hwaccel为非NULL,则在hwaccel之后返回下一个已注册的硬件加速器,如果hwaccel为最后一个则返回NULL。


int  av_lockmgr_register (int(*cb)(void **mutex, enum AVLockOp op))
注册一个用户提供的锁管理器,支持AVLockOp指定的操作。

函数的“mutex”参数指向一个(void *),其中lockmgr应该存储/获取指向分配的互斥体的用户的指针。 它在AV_LOCK_CREATE时为NULL,并且等于最后一次调用所有其他操作的值。 如果锁管理器无法执行操作,那么它应该使互斥体处于与调用时相同的状态,并返回非零值。 但是,当使用AV_LOCK_DESTROY调用时,互斥量将始终被假定已被成功销毁。 如果av_lockmgr_register成功,它将返回一个非负值,如果它失败,它将返回一个负值,并销毁所有互斥量并注销所有回调。 av_lockmgr_register不是线程安全的,它必须在使用使用锁的任何调用之前从单个线程调用。

参数:cb:用户定义回调。 av_lockmgr_register调用此回调和以前注册的回调。 回调将用于创建多个互斥体,每个互斥体必须由其自己的底层锁定机制支持(即不要使用单个静态对象来实现您的锁管理器)。 如果cb设置为NULL,则lockmgr将被注销。


enum AVMediaType  avcodec_get_type (enum AVCodecID codec_id)
获取给定编解码器的类型。


const char *  avcodec_get_name (enum AVCodecID id)
获取编解码器的名称。

返回:标识编解码器的静态字符串; 从不NULL


int  avcodec_is_open (AVCodecContext *s)
返回:如果s是打开的(即,avcodec_open2()被调用,没有相应的avcodec_close()),则为正值,否则为0。


int  av_codec_is_encoder (const AVCodec *codec)
返回:如果编解码器是编码器,则为非零,否则为零


int  av_codec_is_decoder (const AVCodec *codec)
返回:如果编解码器是解码器,则为非零,否则为零


const AVCodecDescriptor *  avcodec_descriptor_get (enum AVCodecID id)
返回:给定编解码器ID的描述符,如果没有描述符,则为NULL。


const AVCodecDescriptor *  avcodec_descriptor_next (const AVCodecDescriptor *prev)
迭代所有libavcodec已知的编解码器描述符。

参数:prev:先前的描述符。 NULL表示获取第一个描述符。

返回:下一个描述符或若是最后一个描述符后,返回NULL


const AVCodecDescriptor *  avcodec_descriptor_get_by_name (const char *name)
返回:具有给定名称的编解码器描述符,如果不存在这样的描述符,则为NULL。


AVCPBProperties *  av_cpb_properties_alloc (size_t *size)
分配CPB属性结构,并将其字段初始化为默认值。

参数:size:如果非NULL,则分配的结构体的大小将在此处写入。 这对于将其嵌入在侧面数据中是有用的。

返回:新分配的结构或失败返回NULL

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值