FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
internal.h
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg 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
* FFmpeg 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 FFmpeg; 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/mathematics.h
"
30
#include "
libavutil/pixfmt.h
"
31
#include "
avcodec.h
"
32
33
#define FF_SANE_NB_CHANNELS 128U
34
35
typedef
struct
InternalBuffer
{
36
uint8_t
*
base
[
AV_NUM_DATA_POINTERS
];
37
uint8_t
*
data
[
AV_NUM_DATA_POINTERS
];
38
int
linesize
[
AV_NUM_DATA_POINTERS
];
39
int
width
;
40
int
height
;
41
enum
AVPixelFormat
pix_fmt
;
42
}
InternalBuffer
;
43
44
typedef
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
73
/**
74
* An audio frame with less than required samples has been submitted and
75
* padded with silence. Reject all subsequent frames.
76
*/
77
int
last_audio_frame
;
78
79
/**
80
* The data for the last allocated audio frame.
81
* Stored here so we can free it.
82
*/
83
uint8_t
*
audio_data
;
84
85
/**
86
* temporary buffer used for encoders to store their bitstream
87
*/
88
uint8_t
*
byte_buffer
;
89
unsigned
int
byte_buffer_size
;
90
91
void
*
frame_thread_encoder
;
92
93
/**
94
* Number of audio samples to skip at the start of the next decoded frame
95
*/
96
int
skip_samples
;
97
}
AVCodecInternal
;
98
99
struct
AVCodecDefault
{
100
const
uint8_t
*
key
;
101
const
uint8_t
*
value
;
102
};
103
104
/**
105
* Return the hardware accelerated codec for codec codec_id and
106
* pixel format pix_fmt.
107
*
108
* @param codec_id the codec to match
109
* @param pix_fmt the pixel format to match
110
* @return the hardware accelerated codec, or NULL if none was found.
111
*/
112
AVHWAccel
*
ff_find_hwaccel
(
enum
AVCodecID
codec_id
,
enum
AVPixelFormat
pix_fmt
);
113
114
/**
115
* Return the index into tab at which {a,b} match elements {[0],[1]} of tab.
116
* If there is no such matching pair then size is returned.
117
*/
118
int
ff_match_2uint16
(
const
uint16_t (*
tab
)[2],
int
size
,
int
a
,
int
b
);
119
120
unsigned
int
avpriv_toupper4
(
unsigned
int
x);
121
122
/**
123
* does needed setup of pkt_pts/pos and such for (re)get_buffer();
124
*/
125
void
ff_init_buffer_info
(
AVCodecContext
*s,
AVFrame
*
frame
);
126
127
/**
128
* Remove and free all side data from packet.
129
*/
130
void
ff_packet_free_side_data
(
AVPacket
*
pkt
);
131
132
extern
volatile
int
ff_avcodec_locked
;
133
int
ff_lock_avcodec
(
AVCodecContext
*log_ctx);
134
int
ff_unlock_avcodec
(
void
);
135
136
int
avpriv_lock_avformat
(
void
);
137
int
avpriv_unlock_avformat
(
void
);
138
139
/**
140
* Maximum size in bytes of extradata.
141
* This value was chosen such that every bit of the buffer is
142
* addressable by a 32-bit signed integer as used by get_bits.
143
*/
144
#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - FF_INPUT_BUFFER_PADDING_SIZE)
145
146
/**
147
* Check AVPacket size and/or allocate data.
148
*
149
* Encoders supporting AVCodec.encode2() can use this as a convenience to
150
* ensure the output packet data is large enough, whether provided by the user
151
* or allocated in this function.
152
*
153
* @param avctx the AVCodecContext of the encoder
154
* @param avpkt the AVPacket
155
* If avpkt->data is already set, avpkt->size is checked
156
* to ensure it is large enough.
157
* If avpkt->data is NULL, a new buffer is allocated.
158
* avpkt->size is set to the specified size.
159
* All other AVPacket fields will be reset with av_init_packet().
160
* @param size the minimum required packet size
161
* @return 0 on success, negative error code on failure
162
*/
163
int
ff_alloc_packet2
(
AVCodecContext
*avctx,
AVPacket
*avpkt,
int
size
);
164
165
int
ff_alloc_packet
(
AVPacket
*avpkt,
int
size
);
166
167
/**
168
* Rescale from sample rate to AVCodecContext.time_base.
169
*/
170
static
av_always_inline
int64_t
ff_samples_to_time_base
(
AVCodecContext
*avctx,
171
int64_t
samples
)
172
{
173
if
(samples ==
AV_NOPTS_VALUE
)
174
return
AV_NOPTS_VALUE
;
175
return
av_rescale_q
(samples, (
AVRational
){ 1, avctx->
sample_rate
},
176
avctx->
time_base
);
177
}
178
179
/**
180
* Get a buffer for a frame. This is a wrapper around
181
* AVCodecContext.get_buffer() and should be used instead calling get_buffer()
182
* directly.
183
*/
184
int
ff_get_buffer
(
AVCodecContext
*avctx,
AVFrame
*
frame
);
185
186
int
ff_thread_can_start_frame
(
AVCodecContext
*avctx);
187
188
int
ff_get_logical_cpus
(
AVCodecContext
*avctx);
189
190
int
avpriv_h264_has_num_reorder_frames
(
AVCodecContext
*avctx);
191
192
/**
193
* Call avcodec_open2 recursively by decrementing counter, unlocking mutex,
194
* calling the function and then restoring again. Assumes the mutex is
195
* already locked
196
*/
197
int
ff_codec_open2_recursive
(
AVCodecContext
*avctx,
const
AVCodec
*codec,
AVDictionary
**
options
);
198
199
/**
200
* Call avcodec_close recursively, counterpart to avcodec_open2_recursive.
201
*/
202
int
ff_codec_close_recursive
(
AVCodecContext
*avctx);
203
204
/**
205
* Finalize buf into extradata and set its size appropriately.
206
*/
207
int
avpriv_bprint_to_extradata
(
AVCodecContext
*avctx,
struct
AVBPrint
*buf);
208
209
#endif
/* AVCODEC_INTERNAL_H */
Generated on Sat May 25 2013 03:58:35 for FFmpeg by
1.8.2