FFmpeg
demux_utils.c
Go to the documentation of this file.
1 /*
2  * Various utility demuxing functions
3  * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
4  *
5  * This file is part of FFmpeg.
6  *
7  * FFmpeg is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Lesser General Public
9  * License as published by the Free Software Foundation; either
10  * version 2.1 of the License, or (at your option) any later version.
11  *
12  * FFmpeg is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  * Lesser General Public License for more details.
16  *
17  * You should have received a copy of the GNU Lesser General Public
18  * License along with FFmpeg; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20  */
21 
22 #include "libavutil/mem.h"
23 
24 #include "libavutil/avassert.h"
25 #include "libavcodec/bytestream.h"
27 #include "avformat.h"
28 #include "avformat_internal.h"
29 #include "avio_internal.h"
30 #include "demux.h"
31 #include "internal.h"
32 
34 {
35  return cffstream(st)->parser;
36 }
37 
39 {
40  ffstream(st)->need_parsing = type;
41 }
42 
44  int64_t start, int64_t end, const char *title)
45 {
47  AVChapter *chapter = NULL;
48  int ret;
49 
50  if (end != AV_NOPTS_VALUE && start > end) {
51  av_log(s, AV_LOG_ERROR, "Chapter end time %"PRId64" before start %"PRId64"\n", end, start);
52  return NULL;
53  }
54 
55  if (!s->nb_chapters) {
56  fci->chapter_ids_monotonic = 1;
57  } else if (!fci->chapter_ids_monotonic || s->chapters[s->nb_chapters-1]->id >= id) {
58  for (unsigned i = 0; i < s->nb_chapters; i++)
59  if (s->chapters[i]->id == id)
60  chapter = s->chapters[i];
61  if (!chapter)
62  fci->chapter_ids_monotonic = 0;
63  }
64 
65  if (!chapter) {
66  chapter = av_mallocz(sizeof(*chapter));
67  if (!chapter)
68  return NULL;
69  ret = av_dynarray_add_nofree(&s->chapters, &s->nb_chapters, chapter);
70  if (ret < 0) {
71  av_free(chapter);
72  return NULL;
73  }
74  }
75  av_dict_set(&chapter->metadata, "title", title, 0);
76  chapter->id = id;
77  chapter->time_base = time_base;
78  chapter->start = start;
79  chapter->end = end;
80 
81  return chapter;
82 }
83 
85 {
87  int ret;
88  for (unsigned i = 0; i < s->nb_streams; i++)
89  if (s->streams[i]->disposition & AV_DISPOSITION_ATTACHED_PIC &&
90  s->streams[i]->discard < AVDISCARD_ALL) {
91  if (s->streams[i]->attached_pic.size <= 0) {
93  "Attached picture on stream %d has invalid size, "
94  "ignoring\n", i);
95  continue;
96  }
97 
99  &s->streams[i]->attached_pic,
100  av_packet_ref, 0);
101  if (ret < 0)
102  return ret;
103  }
104  return 0;
105 }
106 
108  AVBufferRef **buf, int size)
109 {
110  AVStream *st = st0;
111  AVPacket *pkt;
112  int ret;
113 
114  if (!st && !(st = avformat_new_stream(s, NULL)))
115  return AVERROR(ENOMEM);
116  pkt = &st->attached_pic;
117  if (buf) {
118  av_assert1(*buf);
120  pkt->buf = *buf;
121  pkt->data = (*buf)->data;
122  pkt->size = (*buf)->size - AV_INPUT_BUFFER_PADDING_SIZE;
123  *buf = NULL;
124  } else {
125  ret = av_get_packet(pb, pkt, size);
126  if (ret < 0)
127  goto fail;
128  }
131 
132  pkt->stream_index = st->index;
134 
135  return 0;
136 fail:
137  if (!st0)
138  ff_remove_stream(s, st);
139  return ret;
140 }
141 
143  uint64_t channel_layout, int32_t sample_rate,
145 {
146  uint32_t flags = 0;
147  int size = 4;
148  uint8_t *data;
149  if (!pkt)
150  return AVERROR(EINVAL);
151 
152  if (sample_rate) {
153  size += 4;
155  }
156  if (width || height) {
157  size += 8;
159  }
161  if (!data)
162  return AVERROR(ENOMEM);
163  bytestream_put_le32(&data, flags);
164  if (sample_rate)
165  bytestream_put_le32(&data, sample_rate);
166  if (width || height) {
167  bytestream_put_le32(&data, width);
168  bytestream_put_le32(&data, height);
169  }
170  return 0;
171 }
172 
174 {
175  if (ffifmt(s->iformat)->read_set_state)
176  return ffifmt(s->iformat)->read_set_state(s, FF_INFMT_STATE_PLAY);
177  if (s->pb)
178  return avio_pause(s->pb, 0);
179  return AVERROR(ENOSYS);
180 }
181 
183 {
184  if (ffifmt(s->iformat)->read_set_state)
185  return ffifmt(s->iformat)->read_set_state(s, FF_INFMT_STATE_PAUSE);
186  if (s->pb)
187  return avio_pause(s->pb, 1);
188  return AVERROR(ENOSYS);
189 }
190 
192 {
193  if (ffifmt(s->iformat)->handle_command)
194  return ffifmt(s->iformat)->handle_command(s, FF_INFMT_COMMAND_SUBMIT, id, data);
195  return AVERROR(ENOSYS);
196 }
197 
199 {
200  if (ffifmt(s->iformat)->handle_command)
201  return ffifmt(s->iformat)->handle_command(s, FF_INFMT_COMMAND_GET_REPLY, id, data_out);
202  return AVERROR(ENOSYS);
203 }
204 
206 {
207  static const uint8_t avci100_1080p_extradata[] = {
208  // SPS
209  0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
210  0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
211  0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
212  0x18, 0x21, 0x02, 0x56, 0xb9, 0x3d, 0x7d, 0x7e,
213  0x4f, 0xe3, 0x3f, 0x11, 0xf1, 0x9e, 0x08, 0xb8,
214  0x8c, 0x54, 0x43, 0xc0, 0x78, 0x02, 0x27, 0xe2,
215  0x70, 0x1e, 0x30, 0x10, 0x10, 0x14, 0x00, 0x00,
216  0x03, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0xca,
217  0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
218  // PPS
219  0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
220  0xd0
221  };
222  static const uint8_t avci100_1080i_extradata[] = {
223  // SPS
224  0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
225  0xb6, 0xd4, 0x20, 0x22, 0x33, 0x19, 0xc6, 0x63,
226  0x23, 0x21, 0x01, 0x11, 0x98, 0xce, 0x33, 0x19,
227  0x18, 0x21, 0x03, 0x3a, 0x46, 0x65, 0x6a, 0x65,
228  0x24, 0xad, 0xe9, 0x12, 0x32, 0x14, 0x1a, 0x26,
229  0x34, 0xad, 0xa4, 0x41, 0x82, 0x23, 0x01, 0x50,
230  0x2b, 0x1a, 0x24, 0x69, 0x48, 0x30, 0x40, 0x2e,
231  0x11, 0x12, 0x08, 0xc6, 0x8c, 0x04, 0x41, 0x28,
232  0x4c, 0x34, 0xf0, 0x1e, 0x01, 0x13, 0xf2, 0xe0,
233  0x3c, 0x60, 0x20, 0x20, 0x28, 0x00, 0x00, 0x03,
234  0x00, 0x08, 0x00, 0x00, 0x03, 0x01, 0x94, 0x20,
235  // PPS
236  0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x33, 0x48,
237  0xd0
238  };
239  static const uint8_t avci50_1080p_extradata[] = {
240  // SPS
241  0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
242  0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
243  0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
244  0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
245  0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
246  0x6e, 0x6c, 0xd3, 0x3c, 0x05, 0xa0, 0x22, 0x7e,
247  0x5f, 0xfc, 0x00, 0x0c, 0x00, 0x13, 0x8c, 0x04,
248  0x04, 0x05, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00,
249  0x00, 0x03, 0x00, 0x32, 0x84, 0x00, 0x00, 0x00,
250  // PPS
251  0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
252  0x11
253  };
254  static const uint8_t avci50_1080i_extradata[] = {
255  // SPS
256  0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x28,
257  0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
258  0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
259  0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6e, 0x61,
260  0x87, 0x3e, 0x73, 0x4d, 0x98, 0x0c, 0x03, 0x06,
261  0x9c, 0x0b, 0x73, 0xe6, 0xc0, 0xb5, 0x18, 0x63,
262  0x0d, 0x39, 0xe0, 0x5b, 0x02, 0xd4, 0xc6, 0x19,
263  0x1a, 0x79, 0x8c, 0x32, 0x34, 0x24, 0xf0, 0x16,
264  0x81, 0x13, 0xf7, 0xff, 0x80, 0x02, 0x00, 0x01,
265  0xf1, 0x80, 0x80, 0x80, 0xa0, 0x00, 0x00, 0x03,
266  0x00, 0x20, 0x00, 0x00, 0x06, 0x50, 0x80, 0x00,
267  // PPS
268  0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
269  0x11
270  };
271  static const uint8_t avci100_720p_extradata[] = {
272  // SPS
273  0x00, 0x00, 0x00, 0x01, 0x67, 0x7a, 0x10, 0x29,
274  0xb6, 0xd4, 0x20, 0x2a, 0x33, 0x1d, 0xc7, 0x62,
275  0xa1, 0x08, 0x40, 0x54, 0x66, 0x3b, 0x8e, 0xc5,
276  0x42, 0x02, 0x10, 0x25, 0x64, 0x2c, 0x89, 0xe8,
277  0x85, 0xe4, 0x21, 0x4b, 0x90, 0x83, 0x06, 0x95,
278  0xd1, 0x06, 0x46, 0x97, 0x20, 0xc8, 0xd7, 0x43,
279  0x08, 0x11, 0xc2, 0x1e, 0x4c, 0x91, 0x0f, 0x01,
280  0x40, 0x16, 0xec, 0x07, 0x8c, 0x04, 0x04, 0x05,
281  0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x03,
282  0x00, 0x64, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00,
283  // PPS
284  0x00, 0x00, 0x00, 0x01, 0x68, 0xce, 0x31, 0x12,
285  0x11
286  };
287  static const uint8_t avci50_720p_extradata[] = {
288  // SPS
289  0x00, 0x00, 0x00, 0x01, 0x67, 0x6e, 0x10, 0x20,
290  0xa6, 0xd4, 0x20, 0x32, 0x33, 0x0c, 0x71, 0x18,
291  0x88, 0x62, 0x10, 0x19, 0x19, 0x86, 0x38, 0x8c,
292  0x44, 0x30, 0x21, 0x02, 0x56, 0x4e, 0x6f, 0x37,
293  0xcd, 0xf9, 0xbf, 0x81, 0x6b, 0xf3, 0x7c, 0xde,
294  0x6e, 0x6c, 0xd3, 0x3c, 0x0f, 0x01, 0x6e, 0xff,
295  0xc0, 0x00, 0xc0, 0x01, 0x38, 0xc0, 0x40, 0x40,
296  0x50, 0x00, 0x00, 0x03, 0x00, 0x10, 0x00, 0x00,
297  0x06, 0x48, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,
298  // PPS
299  0x00, 0x00, 0x00, 0x01, 0x68, 0xee, 0x31, 0x12,
300  0x11
301  };
302 
303  const uint8_t *data = NULL;
304  int ret, size = 0;
305 
306  if (st->codecpar->width == 1920) {
308  data = avci100_1080p_extradata;
309  size = sizeof(avci100_1080p_extradata);
310  } else {
311  data = avci100_1080i_extradata;
312  size = sizeof(avci100_1080i_extradata);
313  }
314  } else if (st->codecpar->width == 1440) {
316  data = avci50_1080p_extradata;
317  size = sizeof(avci50_1080p_extradata);
318  } else {
319  data = avci50_1080i_extradata;
320  size = sizeof(avci50_1080i_extradata);
321  }
322  } else if (st->codecpar->width == 1280) {
323  data = avci100_720p_extradata;
324  size = sizeof(avci100_720p_extradata);
325  } else if (st->codecpar->width == 960) {
326  data = avci50_720p_extradata;
327  size = sizeof(avci50_720p_extradata);
328  }
329 
330  if (!size)
331  return 0;
332 
333  if ((ret = ff_alloc_extradata(st->codecpar, size)) < 0)
334  return ret;
335  memcpy(st->codecpar->extradata, data, size);
336 
337  return 0;
338 }
339 
340 int ff_get_extradata(void *logctx, AVCodecParameters *par, AVIOContext *pb, int size)
341 {
342  int ret = ff_alloc_extradata(par, size);
343  if (ret < 0)
344  return ret;
345  ret = ffio_read_size(pb, par->extradata, size);
346  if (ret < 0) {
347  av_freep(&par->extradata);
348  par->extradata_size = 0;
349  av_log(logctx, AV_LOG_ERROR, "Failed to read extradata of size %d\n", size);
350  return ret;
351  }
352 
353  return ret;
354 }
355 
357 {
358  for (unsigned i = 0; i < s->nb_streams; i++)
359  if (s->streams[i]->id == id)
360  return i;
361  return -1;
362 }
flags
const SwsFlags flags[]
Definition: swscale.c:61
FF_INFMT_STATE_PAUSE
@ FF_INFMT_STATE_PAUSE
Definition: demux.h:53
av_packet_unref
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
Definition: packet.c:432
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:216
AVCodecParameters::extradata
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
Definition: codec_par.h:69
AVChapter::metadata
AVDictionary * metadata
Definition: avformat.h:1227
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
AVCodecParameters::codec_type
enum AVMediaType codec_type
General type of the encoded data.
Definition: codec_par.h:51
AVCodecParameters
This struct describes the properties of an encoded stream.
Definition: codec_par.h:47
avformat_new_stream
AVStream * avformat_new_stream(AVFormatContext *s, const struct AVCodec *c)
Add a new stream to a media file.
AV_DISPOSITION_ATTACHED_PIC
#define AV_DISPOSITION_ATTACHED_PIC
The stream is stored in the file as an attached picture/"cover art" (e.g.
Definition: avformat.h:670
AV_FIELD_PROGRESSIVE
@ AV_FIELD_PROGRESSIVE
Definition: defs.h:213
int64_t
long long int64_t
Definition: coverity.c:34
avformat_receive_command_reply
int avformat_receive_command_reply(AVFormatContext *s, enum AVFormatCommandID id, void **data_out)
Receive a command reply from the demuxer.
Definition: demux_utils.c:198
FormatContextInternal::raw_packet_buffer
PacketList raw_packet_buffer
Raw packets from the demuxer, prior to parsing and decoding.
Definition: avformat_internal.h:75
AVPacket::data
uint8_t * data
Definition: packet.h:588
AVChapter::start
int64_t start
Definition: avformat.h:1226
data
const char data[16]
Definition: mxf.c:149
AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE
@ AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE
Definition: packet.h:665
cffstream
static const av_always_inline FFStream * cffstream(const AVStream *st)
Definition: internal.h:367
AV_PKT_FLAG_KEY
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
Definition: packet.h:643
AVFormatCommandID
AVFormatCommandID
Command IDs that can be sent to the demuxer.
Definition: avformat.h:2376
FormatContextInternal
Definition: avformat_internal.h:33
ff_generate_avci_extradata
int ff_generate_avci_extradata(AVStream *st)
Generate standard extradata for AVC-Intra based on width/height and field order.
Definition: demux_utils.c:205
avformat_queue_attached_pictures
int avformat_queue_attached_pictures(AVFormatContext *s)
Definition: demux_utils.c:84
ff_remove_stream
void ff_remove_stream(AVFormatContext *s, AVStream *st)
Remove a stream from its AVFormatContext and free it.
Definition: avformat.c:115
ffstream
static av_always_inline FFStream * ffstream(AVStream *st)
Definition: internal.h:362
fail
#define fail()
Definition: checkasm.h:218
AVStreamParseType
AVStreamParseType
Definition: avformat.h:587
avpriv_new_chapter
AVChapter * avpriv_new_chapter(AVFormatContext *s, int64_t id, AVRational time_base, int64_t start, int64_t end, const char *title)
Add a new chapter.
Definition: demux_utils.c:43
AVChapter
Definition: avformat.h:1223
type
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
Definition: writing_filters.txt:86
AVStream::attached_pic
AVPacket attached_pic
For streams with AV_DISPOSITION_ATTACHED_PIC disposition, this packet will contain the attached pictu...
Definition: avformat.h:842
avassert.h
AV_PKT_DATA_PARAM_CHANGE
@ AV_PKT_DATA_PARAM_CHANGE
An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
Definition: packet.h:69
AV_LOG_ERROR
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
Definition: log.h:210
AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS
@ AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS
Definition: packet.h:666
AVChapter::end
int64_t end
chapter start/end time in time_base units
Definition: avformat.h:1226
s
#define s(width, name)
Definition: cbs_vp9.c:198
AVCodecParameters::width
int width
Video only.
Definition: codec_par.h:134
avpriv_stream_set_need_parsing
void avpriv_stream_set_need_parsing(AVStream *st, enum AVStreamParseType type)
Definition: demux_utils.c:38
av_read_play
int av_read_play(AVFormatContext *s)
Start playing a network-based stream (e.g.
Definition: demux_utils.c:173
channels
channels
Definition: aptx.h:31
ff_add_attached_pic
int ff_add_attached_pic(AVFormatContext *s, AVStream *st0, AVIOContext *pb, AVBufferRef **buf, int size)
Add an attached pic to an AVStream.
Definition: demux_utils.c:107
av_mallocz
#define av_mallocz(s)
Definition: tableprint_vlc.h:31
FFStream::need_parsing
enum AVStreamParseType need_parsing
Definition: internal.h:314
AVDISCARD_ALL
@ AVDISCARD_ALL
discard all
Definition: defs.h:232
AVFormatContext
Format I/O context.
Definition: avformat.h:1264
internal.h
AVStream::codecpar
AVCodecParameters * codecpar
Codec parameters associated with this stream.
Definition: avformat.h:767
AVPacket::buf
AVBufferRef * buf
A reference to the reference-counted buffer where the packet data is stored.
Definition: packet.h:571
NULL
#define NULL
Definition: coverity.c:32
avpriv_packet_list_put
int avpriv_packet_list_put(PacketList *packet_buffer, AVPacket *pkt, int(*copy)(AVPacket *dst, const AVPacket *src), int flags)
Append an AVPacket to the list.
Definition: packet.c:546
AVRational
Rational number (pair of numerator and denominator).
Definition: rational.h:58
FF_INFMT_COMMAND_GET_REPLY
@ FF_INFMT_COMMAND_GET_REPLY
Definition: demux.h:63
FFInputFormat::handle_command
int(* handle_command)(struct AVFormatContext *, enum FFInputFormatCommandOption opt, enum AVFormatCommandID id, void *data)
Handle demuxer commands This callback is used to either send a command to a demuxer (FF_INFMT_COMMAND...
Definition: demux.h:167
FF_INFMT_STATE_PLAY
@ FF_INFMT_STATE_PLAY
Definition: demux.h:52
avio_pause
int avio_pause(AVIOContext *h, int pause)
Pause and resume playing - only meaningful if using a network streaming protocol (e....
Definition: aviobuf.c:1228
av_packet_ref
int av_packet_ref(AVPacket *dst, const AVPacket *src)
Setup a new reference to the data described by a given packet.
Definition: packet.c:440
AVCodecParameters::extradata_size
int extradata_size
Size of the extradata content in bytes.
Definition: codec_par.h:73
avformat_send_command
int avformat_send_command(AVFormatContext *s, enum AVFormatCommandID id, void *data)
Send a command to the demuxer.
Definition: demux_utils.c:191
AVIOContext
Bytestream IO Context.
Definition: avio.h:160
AVPacket::size
int size
Definition: packet.h:589
height
#define height
Definition: dsp.h:89
size
int size
Definition: twinvq_data.h:10344
AV_NOPTS_VALUE
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:247
FFInputFormat::read_set_state
int(* read_set_state)(struct AVFormatContext *, enum FFInputFormatStreamState state)
Change the stream state - only meaningful if using a network-based format (RTSP).
Definition: demux.h:139
AVPacket::flags
int flags
A combination of AV_PKT_FLAG values.
Definition: packet.h:594
avformat_internal.h
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
avio_internal.h
AVChapter::id
int64_t id
unique ID to identify the chapter
Definition: avformat.h:1224
av_assert1
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
Definition: avassert.h:58
demux.h
av_read_pause
int av_read_pause(AVFormatContext *s)
Pause a network-based stream (e.g.
Definition: demux_utils.c:182
AVCodecParameters::field_order
enum AVFieldOrder field_order
Video only.
Definition: codec_par.h:161
av_get_packet
int av_get_packet(AVIOContext *s, AVPacket *pkt, int size)
Allocate and read the payload of a packet and initialize its fields with default values.
Definition: utils.c:98
AVCodecParserContext
Definition: avcodec.h:2589
AVStream::disposition
int disposition
Stream disposition - a combination of AV_DISPOSITION_* flags.
Definition: avformat.h:813
ret
ret
Definition: filter_design.txt:187
AVStream
Stream structure.
Definition: avformat.h:744
avformat.h
AV_INPUT_BUFFER_PADDING_SIZE
#define AV_INPUT_BUFFER_PADDING_SIZE
Definition: defs.h:40
id
enum AVCodecID id
Definition: dts2pts.c:549
av_dynarray_add_nofree
int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem)
Add an element to a dynamic array.
Definition: mem.c:315
AVStream::index
int index
stream index in AVFormatContext
Definition: avformat.h:750
FormatContextInternal::chapter_ids_monotonic
int chapter_ids_monotonic
Set if chapter ids are strictly monotonic.
Definition: avformat_internal.h:95
av_packet_new_side_data
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, size_t size)
Allocate new information of a packet.
Definition: packet.c:231
av_stream_get_parser
struct AVCodecParserContext * av_stream_get_parser(const AVStream *st)
Definition: demux_utils.c:33
ffifmt
static const FFInputFormat * ffifmt(const AVInputFormat *fmt)
Definition: demux.h:186
ff_get_extradata
int ff_get_extradata(void *logctx, AVCodecParameters *par, AVIOContext *pb, int size)
Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end which is always set to 0 and f...
Definition: demux_utils.c:340
ff_fc_internal
static av_always_inline FormatContextInternal * ff_fc_internal(AVFormatContext *s)
Definition: avformat_internal.h:100
AVPacket::stream_index
int stream_index
Definition: packet.h:590
FF_INFMT_COMMAND_SUBMIT
@ FF_INFMT_COMMAND_SUBMIT
Definition: demux.h:62
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:200
mem.h
AVBufferRef
A reference to a data buffer.
Definition: buffer.h:82
packet_internal.h
ff_find_stream_index
int ff_find_stream_index(const AVFormatContext *s, int id)
Find stream index based on format-specific stream ID.
Definition: demux_utils.c:356
av_free
#define av_free(p)
Definition: tableprint_vlc.h:34
AVPacket
This structure stores compressed data.
Definition: packet.h:565
av_freep
#define av_freep(p)
Definition: tableprint_vlc.h:35
av_dict_set
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
Definition: dict.c:86
ff_add_param_change
int ff_add_param_change(AVPacket *pkt, int32_t channels, uint64_t channel_layout, int32_t sample_rate, int32_t width, int32_t height)
Add side data to a packet for changing parameters to the given values.
Definition: demux_utils.c:142
int32_t
int32_t
Definition: audioconvert.c:56
bytestream.h
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
FFStream::parser
struct AVCodecParserContext * parser
Definition: internal.h:315
ffio_read_size
int ffio_read_size(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
Definition: aviobuf.c:665
pkt
static AVPacket * pkt
Definition: demux_decode.c:55
width
#define width
Definition: dsp.h:89
AVChapter::time_base
AVRational time_base
time base in which the start/end timestamps are specified
Definition: avformat.h:1225
ff_alloc_extradata
int ff_alloc_extradata(AVCodecParameters *par, int size)
Allocate extradata with additional AV_INPUT_BUFFER_PADDING_SIZE at end which is always set to 0.
Definition: utils.c:237