6.avcodec_encode_video2()

该函数用于编码一帧视频数据

/** 
 * Encode a frame of video. 
 * 
 * Takes input raw video data from frame and writes the next output packet, if 
 * available, to avpkt. The output packet does not necessarily contain data for 
 * the most recent frame, as encoders can delay and reorder input frames 
 * internally as needed. 
 * 
 * @param avctx     codec context 
 * @param avpkt     output AVPacket. 
 *                  The user can supply an output buffer by setting 
 *                  avpkt->data and avpkt->size prior to calling the 
 *                  function, but if the size of the user-provided data is not 
 *                  large enough, encoding will fail. All other AVPacket fields 
 *                  will be reset by the encoder using av_init_packet(). If 
 *                  avpkt->data is NULL, the encoder will allocate it. 
 *                  The encoder will set avpkt->size to the size of the 
 *                  output packet. The returned data (if any) belongs to the 
 *                  caller, he is responsible for freeing it. 
 * 
 *                  If this function fails or produces no output, avpkt will be 
 *                  freed using av_free_packet() (i.e. avpkt->destruct will be 
 *                  called to free the user supplied buffer). 
 * @param[in] frame AVFrame containing the raw video data to be encoded. 
 *                  May be NULL when flushing an encoder that has the 
 *                  CODEC_CAP_DELAY capability set. 
 * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the 
 *                            output packet is non-empty, and to 0 if it is 
 *                            empty. If the function returns an error, the 
 *                            packet can be assumed to be invalid, and the 
 *                            value of got_packet_ptr is undefined and should 
 *                            not be used. 
 * @return          0 on success, negative error code on failure 
 */  
int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,  
                          const AVFrame *frame, int *got_packet_ptr);

该函数每个参数的含义在注释里面已经写的很清楚了,在这里用中文简述一下:

  • avctx:编码器的AVCodecContext。
  • avpkt:编码输出的AVPacket。
  • frame:编码输入的AVFrame。
  • got_packet_ptr:成功编码一个AVPacket的时候设置为1。 函数返回0代表编码成功。

results matching ""

    No results matching ""