X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Finternal.h;h=231d4b68092e5a30f00583734a90f04842d185fe;hb=e00eb03cd8bfb6993d33c30ccd560947b5f6bad5;hp=fe853ab87ec55fdb5c51531dc0a22d1dde900e1f;hpb=2912e87a6c9264d556734e2bf94a99c64cf9b102;p=ffmpeg diff --git a/libavcodec/internal.h b/libavcodec/internal.h index fe853ab87ec..231d4b68092 100644 --- a/libavcodec/internal.h +++ b/libavcodec/internal.h @@ -25,12 +25,70 @@ #define AVCODEC_INTERNAL_H #include + +#include "libavutil/mathematics.h" +#include "libavutil/pixfmt.h" #include "avcodec.h" +#define FF_SANE_NB_CHANNELS 128U + +typedef struct InternalBuffer { + uint8_t *base[AV_NUM_DATA_POINTERS]; + uint8_t *data[AV_NUM_DATA_POINTERS]; + int linesize[AV_NUM_DATA_POINTERS]; + int width; + int height; + enum AVPixelFormat pix_fmt; + uint8_t **extended_data; + int audio_data_size; + int nb_channels; +} InternalBuffer; + +typedef struct AVCodecInternal { + /** + * internal buffer count + * used by default get/release/reget_buffer(). + */ + int buffer_count; + + /** + * internal buffers + * used by default get/release/reget_buffer(). + */ + InternalBuffer *buffer; + + /** + * Whether the parent AVCodecContext is a copy of the context which had + * init() called on it. + * This is used by multithreading - shared tables and picture pointers + * should be freed from the original context only. + */ + int is_copy; + +#if FF_API_OLD_DECODE_AUDIO + /** + * Internal sample count used by avcodec_encode_audio() to fabricate pts. + * Can be removed along with avcodec_encode_audio(). + */ + int sample_count; +#endif + + /** + * An audio frame with less than required samples has been submitted and + * padded with silence. Reject all subsequent frames. + */ + int last_audio_frame; +} AVCodecInternal; + +struct AVCodecDefault { + const uint8_t *key; + const uint8_t *value; +}; + /** * Determine whether pix_fmt is a hardware accelerated format. */ -int ff_is_hwaccel_pix_fmt(enum PixelFormat pix_fmt); +int ff_is_hwaccel_pix_fmt(enum AVPixelFormat pix_fmt); /** * Return the hardware accelerated codec for codec codec_id and @@ -40,7 +98,7 @@ int ff_is_hwaccel_pix_fmt(enum PixelFormat pix_fmt); * @param pix_fmt the pixel format to match * @return the hardware accelerated codec, or NULL if none was found. */ -AVHWAccel *ff_find_hwaccel(enum CodecID codec_id, enum PixelFormat pix_fmt); +AVHWAccel *ff_find_hwaccel(enum AVCodecID codec_id, enum AVPixelFormat pix_fmt); /** * Return the index into tab at which {a,b} match elements {[0],[1]} of tab. @@ -48,6 +106,44 @@ AVHWAccel *ff_find_hwaccel(enum CodecID codec_id, enum PixelFormat pix_fmt); */ int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b); -unsigned int ff_toupper4(unsigned int x); +unsigned int avpriv_toupper4(unsigned int x); + +int avpriv_lock_avformat(void); +int avpriv_unlock_avformat(void); + +/** + * Maximum size in bytes of extradata. + * This value was chosen such that every bit of the buffer is + * addressable by a 32-bit signed integer as used by get_bits. + */ +#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE) + +/** + * Check AVPacket size and/or allocate data. + * + * Encoders supporting AVCodec.encode2() can use this as a convenience to + * ensure the output packet data is large enough, whether provided by the user + * or allocated in this function. + * + * @param avpkt the AVPacket + * If avpkt->data is already set, avpkt->size is checked + * to ensure it is large enough. + * If avpkt->data is NULL, a new buffer is allocated. + * avpkt->size is set to the specified size. + * All other AVPacket fields will be reset with av_init_packet(). + * @param size the minimum required packet size + * @return 0 on success, negative error code on failure + */ +int ff_alloc_packet(AVPacket *avpkt, int size); + +/** + * Rescale from sample rate to AVCodecContext.time_base. + */ +static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, + int64_t samples) +{ + return av_rescale_q(samples, (AVRational){ 1, avctx->sample_rate }, + avctx->time_base); +} #endif /* AVCODEC_INTERNAL_H */