1/* 2 * This file is part of Libav. 3 * 4 * Libav is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * Libav is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 * Lesser General Public License for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public 15 * License along with Libav; if not, write to the Free Software 16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18 19/** 20 * @file 21 * common internal api header. 22 */ 23 24#ifndef AVCODEC_INTERNAL_H 25#define AVCODEC_INTERNAL_H 26 27#include <stdint.h> 28 29#include "libavutil/pixfmt.h" 30#include "avcodec.h" 31 32typedef struct InternalBuffer { 33 uint8_t *base[AV_NUM_DATA_POINTERS]; 34 uint8_t *data[AV_NUM_DATA_POINTERS]; 35 int linesize[AV_NUM_DATA_POINTERS]; 36 int width; 37 int height; 38 enum PixelFormat pix_fmt; 39 uint8_t **extended_data; 40 int audio_data_size; 41 int nb_channels; 42} InternalBuffer; 43 44typedef struct AVCodecInternal { 45 /** 46 * internal buffer count 47 * used by default get/release/reget_buffer(). 48 */ 49 int buffer_count; 50 51 /** 52 * internal buffers 53 * used by default get/release/reget_buffer(). 54 */ 55 InternalBuffer *buffer; 56 57 /** 58 * Whether the parent AVCodecContext is a copy of the context which had 59 * init() called on it. 60 * This is used by multithreading - shared tables and picture pointers 61 * should be freed from the original context only. 62 */ 63 int is_copy; 64 65#if FF_API_OLD_DECODE_AUDIO 66 /** 67 * Internal sample count used by avcodec_encode_audio() to fabricate pts. 68 * Can be removed along with avcodec_encode_audio(). 69 */ 70 int sample_count; 71#endif 72} AVCodecInternal; 73 74struct AVCodecDefault { 75 const uint8_t *key; 76 const uint8_t *value; 77}; 78 79/** 80 * Determine whether pix_fmt is a hardware accelerated format. 81 */ 82int ff_is_hwaccel_pix_fmt(enum PixelFormat pix_fmt); 83 84/** 85 * Return the hardware accelerated codec for codec codec_id and 86 * pixel format pix_fmt. 87 * 88 * @param codec_id the codec to match 89 * @param pix_fmt the pixel format to match 90 * @return the hardware accelerated codec, or NULL if none was found. 91 */ 92AVHWAccel *ff_find_hwaccel(enum CodecID codec_id, enum PixelFormat pix_fmt); 93 94/** 95 * Return the index into tab at which {a,b} match elements {[0],[1]} of tab. 96 * If there is no such matching pair then size is returned. 97 */ 98int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b); 99 100unsigned int avpriv_toupper4(unsigned int x); 101 102int avpriv_lock_avformat(void); 103int avpriv_unlock_avformat(void); 104 105/** 106 * Maximum size in bytes of extradata. 107 * This value was chosen such that every bit of the buffer is 108 * addressable by a 32-bit signed integer as used by get_bits. 109 */ 110#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE) 111 112/** 113 * Check AVPacket size and/or allocate data. 114 * 115 * Encoders supporting AVCodec.encode2() can use this as a convenience to 116 * ensure the output packet data is large enough, whether provided by the user 117 * or allocated in this function. 118 * 119 * @param avpkt the AVPacket 120 * If avpkt->data is already set, avpkt->size is checked 121 * to ensure it is large enough. 122 * If avpkt->data is NULL, a new buffer is allocated. 123 * All other AVPacket fields will be reset with av_init_packet(). 124 * @param size the minimum required packet size 125 * @return 0 on success, negative error code on failure 126 */ 127int ff_alloc_packet(AVPacket *avpkt, int size); 128 129#endif /* AVCODEC_INTERNAL_H */ 130