|
|
|
@ -435,6 +435,7 @@ enum CodecID { |
|
|
|
|
#define FF_INPUT_BUFFER_PADDING_SIZE 8 |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @ingroup lavc_encoding |
|
|
|
|
* minimum encoding buffer size |
|
|
|
|
* Used to avoid some checks during header writing. |
|
|
|
|
*/ |
|
|
|
@ -442,6 +443,7 @@ enum CodecID { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @ingroup lavc_encoding |
|
|
|
|
* motion estimation type. |
|
|
|
|
*/ |
|
|
|
|
enum Motion_Est_ID { |
|
|
|
@ -537,6 +539,9 @@ enum AVAudioServiceType { |
|
|
|
|
AV_AUDIO_SERVICE_TYPE_NB , ///< Not part of ABI
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @ingroup lavc_encoding |
|
|
|
|
*/ |
|
|
|
|
typedef struct RcOverride{ |
|
|
|
|
int start_frame; |
|
|
|
|
int end_frame; |
|
|
|
@ -3752,6 +3757,167 @@ void av_parser_close(AVCodecParserContext *s); |
|
|
|
|
* @} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @addtogroup lavc_encoding |
|
|
|
|
* @{ |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Find a registered encoder with a matching codec ID. |
|
|
|
|
* |
|
|
|
|
* @param id CodecID of the requested encoder |
|
|
|
|
* @return An encoder if one was found, NULL otherwise. |
|
|
|
|
*/ |
|
|
|
|
AVCodec *avcodec_find_encoder(enum CodecID 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); |
|
|
|
|
|
|
|
|
|
#if FF_API_OLD_ENCODE_AUDIO |
|
|
|
|
/**
|
|
|
|
|
* Encode an audio frame from samples into buf. |
|
|
|
|
* |
|
|
|
|
* @deprecated Use avcodec_encode_audio2 instead. |
|
|
|
|
* |
|
|
|
|
* @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. |
|
|
|
|
* However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user |
|
|
|
|
* will know how much space is needed because it depends on the value passed |
|
|
|
|
* in buf_size as described below. In that case a lower value can be used. |
|
|
|
|
* |
|
|
|
|
* @param avctx the codec context |
|
|
|
|
* @param[out] buf the output buffer |
|
|
|
|
* @param[in] buf_size the output buffer size |
|
|
|
|
* @param[in] samples the input buffer containing the samples |
|
|
|
|
* The number of samples read from this buffer is frame_size*channels, |
|
|
|
|
* both of which are defined in avctx. |
|
|
|
|
* For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of |
|
|
|
|
* samples read from samples is equal to: |
|
|
|
|
* buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id)) |
|
|
|
|
* This also implies that av_get_bits_per_sample() must not return 0 for these |
|
|
|
|
* codecs. |
|
|
|
|
* @return On error a negative value is returned, on success zero or the number |
|
|
|
|
* of bytes used to encode the data read from the input buffer. |
|
|
|
|
*/ |
|
|
|
|
int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx, |
|
|
|
|
uint8_t *buf, int buf_size, |
|
|
|
|
const short *samples); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Encode a frame of audio. |
|
|
|
|
* |
|
|
|
|
* Takes input samples 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, split, and combine 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. |
|
|
|
|
* |
|
|
|
|
* 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 audio data to be encoded. |
|
|
|
|
* May be NULL when flushing an encoder that has the |
|
|
|
|
* CODEC_CAP_DELAY capability set. |
|
|
|
|
* There are 2 codec capabilities that affect the allowed |
|
|
|
|
* values of frame->nb_samples. |
|
|
|
|
* If CODEC_CAP_SMALL_LAST_FRAME is set, then only the final |
|
|
|
|
* frame may be smaller than avctx->frame_size, and all other |
|
|
|
|
* frames must be equal to avctx->frame_size. |
|
|
|
|
* If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame |
|
|
|
|
* can have any number of samples. |
|
|
|
|
* If neither is set, frame->nb_samples must be equal to |
|
|
|
|
* avctx->frame_size for all frames. |
|
|
|
|
* @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_audio2(AVCodecContext *avctx, AVPacket *avpkt, |
|
|
|
|
const AVFrame *frame, int *got_packet_ptr); |
|
|
|
|
|
|
|
|
|
#if FF_API_OLD_ENCODE_VIDEO |
|
|
|
|
/**
|
|
|
|
|
* @deprecated use avcodec_encode_video2() instead. |
|
|
|
|
* |
|
|
|
|
* Encode a video frame from pict into buf. |
|
|
|
|
* The input picture should be |
|
|
|
|
* stored using a specific format, namely avctx.pix_fmt. |
|
|
|
|
* |
|
|
|
|
* @param avctx the codec context |
|
|
|
|
* @param[out] buf the output buffer for the bitstream of encoded frame |
|
|
|
|
* @param[in] buf_size the size of the output buffer in bytes |
|
|
|
|
* @param[in] pict the input picture to encode |
|
|
|
|
* @return On error a negative value is returned, on success zero or the number |
|
|
|
|
* of bytes used from the output buffer. |
|
|
|
|
*/ |
|
|
|
|
attribute_deprecated |
|
|
|
|
int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
|
|
|
|
const AVFrame *pict); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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); |
|
|
|
|
|
|
|
|
|
int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
|
|
|
|
const AVSubtitle *sub); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @} |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
/* resample.c */ |
|
|
|
|
|
|
|
|
|
struct ReSampleContext; |
|
|
|
@ -3986,22 +4152,6 @@ int avpicture_deinterlace(AVPicture *dst, const AVPicture *src, |
|
|
|
|
|
|
|
|
|
/* external high level API */ |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Find a registered encoder with a matching codec ID. |
|
|
|
|
* |
|
|
|
|
* @param id CodecID of the requested encoder |
|
|
|
|
* @return An encoder if one was found, NULL otherwise. |
|
|
|
|
*/ |
|
|
|
|
AVCodec *avcodec_find_encoder(enum CodecID 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); |
|
|
|
|
|
|
|
|
|
void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -4019,81 +4169,6 @@ int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, v |
|
|
|
|
int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count); |
|
|
|
|
//FIXME func typedef
|
|
|
|
|
|
|
|
|
|
#if FF_API_OLD_ENCODE_AUDIO |
|
|
|
|
/**
|
|
|
|
|
* Encode an audio frame from samples into buf. |
|
|
|
|
* |
|
|
|
|
* @deprecated Use avcodec_encode_audio2 instead. |
|
|
|
|
* |
|
|
|
|
* @note The output buffer should be at least FF_MIN_BUFFER_SIZE bytes large. |
|
|
|
|
* However, for codecs with avctx->frame_size equal to 0 (e.g. PCM) the user |
|
|
|
|
* will know how much space is needed because it depends on the value passed |
|
|
|
|
* in buf_size as described below. In that case a lower value can be used. |
|
|
|
|
* |
|
|
|
|
* @param avctx the codec context |
|
|
|
|
* @param[out] buf the output buffer |
|
|
|
|
* @param[in] buf_size the output buffer size |
|
|
|
|
* @param[in] samples the input buffer containing the samples |
|
|
|
|
* The number of samples read from this buffer is frame_size*channels, |
|
|
|
|
* both of which are defined in avctx. |
|
|
|
|
* For codecs which have avctx->frame_size equal to 0 (e.g. PCM) the number of |
|
|
|
|
* samples read from samples is equal to: |
|
|
|
|
* buf_size * 8 / (avctx->channels * av_get_bits_per_sample(avctx->codec_id)) |
|
|
|
|
* This also implies that av_get_bits_per_sample() must not return 0 for these |
|
|
|
|
* codecs. |
|
|
|
|
* @return On error a negative value is returned, on success zero or the number |
|
|
|
|
* of bytes used to encode the data read from the input buffer. |
|
|
|
|
*/ |
|
|
|
|
int attribute_deprecated avcodec_encode_audio(AVCodecContext *avctx, |
|
|
|
|
uint8_t *buf, int buf_size, |
|
|
|
|
const short *samples); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Encode a frame of audio. |
|
|
|
|
* |
|
|
|
|
* Takes input samples 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, split, and combine 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. |
|
|
|
|
* |
|
|
|
|
* 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 audio data to be encoded. |
|
|
|
|
* May be NULL when flushing an encoder that has the |
|
|
|
|
* CODEC_CAP_DELAY capability set. |
|
|
|
|
* There are 2 codec capabilities that affect the allowed |
|
|
|
|
* values of frame->nb_samples. |
|
|
|
|
* If CODEC_CAP_SMALL_LAST_FRAME is set, then only the final |
|
|
|
|
* frame may be smaller than avctx->frame_size, and all other |
|
|
|
|
* frames must be equal to avctx->frame_size. |
|
|
|
|
* If CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame |
|
|
|
|
* can have any number of samples. |
|
|
|
|
* If neither is set, frame->nb_samples must be equal to |
|
|
|
|
* avctx->frame_size for all frames. |
|
|
|
|
* @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_audio2(AVCodecContext *avctx, AVPacket *avpkt, |
|
|
|
|
const AVFrame *frame, int *got_packet_ptr); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Fill audio frame data and linesize. |
|
|
|
|
* AVFrame extended_data channel pointers are allocated if necessary for |
|
|
|
@ -4114,66 +4189,6 @@ int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, |
|
|
|
|
enum AVSampleFormat sample_fmt, const uint8_t *buf, |
|
|
|
|
int buf_size, int align); |
|
|
|
|
|
|
|
|
|
#if FF_API_OLD_ENCODE_VIDEO |
|
|
|
|
/**
|
|
|
|
|
* @deprecated use avcodec_encode_video2() instead. |
|
|
|
|
* |
|
|
|
|
* Encode a video frame from pict into buf. |
|
|
|
|
* The input picture should be |
|
|
|
|
* stored using a specific format, namely avctx.pix_fmt. |
|
|
|
|
* |
|
|
|
|
* @param avctx the codec context |
|
|
|
|
* @param[out] buf the output buffer for the bitstream of encoded frame |
|
|
|
|
* @param[in] buf_size the size of the output buffer in bytes |
|
|
|
|
* @param[in] pict the input picture to encode |
|
|
|
|
* @return On error a negative value is returned, on success zero or the number |
|
|
|
|
* of bytes used from the output buffer. |
|
|
|
|
*/ |
|
|
|
|
attribute_deprecated |
|
|
|
|
int avcodec_encode_video(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
|
|
|
|
const AVFrame *pict); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 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); |
|
|
|
|
|
|
|
|
|
int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, |
|
|
|
|
const AVSubtitle *sub); |
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Flush buffers, should be called when seeking or when switching to a different stream. |
|
|
|
|
*/ |
|
|
|
|