输入 codec frame 成功 情况 编码器 eno decode 上下文
int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);
/*
brief: 支持将裸流数据输出给解码器
在函数内部,会拷贝相关的 AVCodecContext 结构变量,将这些结构变量应用到解码的每一个包.例如
AVCodecContext.skip_frame 参数通知解码器扔掉包含该帧的包
@warning 输入的 avpkt-data 缓冲区必须大于 AV_INPUT_PADDING_SIZE,因为优化的字节流读取器必须一次读取 32 或者 64 比特的数据
@warning 不能跟之前的 API(例如 avcodec_decode_video2) 混用,否则会返回不可预知的错误
@note 在将包发送给解码器的时候,AVCodecContext 必须已经通过 avcodec_open2 打开
@参数 avctx 解码上下文
@参数 [输入]avpkt 输入 AVPakcet. 通常情况下,输入数据是一个单一的视频帧或者几个完整的音频帧.调用者保留包的原有属性,解码器不会修改包的内容.解码器可能创建对包的引用.如果包没有引用计数将拷贝一份.跟以往的 API 不一样,包必须完整的解码出来,如果包含有多个帧,要求多次调用 avcodec_recvive_frame,在重新调用该接口之前.输入参数可以为 NULL,或者 AVPacket 的 data 域设置为 NULL 或者 size 域设置为 0,表示将刷新所有的包,意味着数据流已经结束了.第一次发送刷新会总会成功,第二次发送刷新包是没有必要的,并且返回 AVERROR_EOF, 如果解码器缓存了一些帧,返回一个刷新包,将会返回所有的解码包
@返回值 0 表示成功,其他的异常值说明:
AVERROR(EAGAIN):当前不接受输出,必须重新发送
AVERROR_EOF:已经刷新解码器,没有新的包可以被刷新
AVERROR(EINVAL):没有打开解码器,或者这是一个编码器,或者要求刷新
AVERRO(ENOMEN):无法添加包到内部队列
*/
FFmpeg avcodec_send_packet 函数说明
来源: http://www.bubuko.com/infodetail-2470480.html