44 int i, cnum,
h, m,
s, ms, keylen = strlen(key);
47 if (keylen < 9 ||
av_strncasecmp(key,
"CHAPTER", 7) || sscanf(key+7,
"%03d", &cnum) != 1)
51 if (sscanf(val,
"%02d:%02d:%02d.%03d", &h, &m, &s, &ms) < 4)
55 ms + 1000 * (s + 60 * (m + 60 *
h)),
101 s = bytestream_get_le32(&p);
103 if (end - p - 4 < s || s < 0)
108 n = bytestream_get_le32(&p);
110 while (end - p >= 4 && n > 0) {
114 s = bytestream_get_le32(&p);
116 if (end - p < s || s < 0)
123 v = memchr(t,
'=', s);
154 if (!
av_strcasecmp(tt,
"METADATA_BLOCK_PICTURE") && parse_picture) {
191 "truncated comment header, %i comments not found\n", n);
229 len = priv->
len[0] + priv->
len[1] + priv->
len[2];
230 buf_len = len + len / 255 + 64;
238 memset(*buf,
'\0', buf_len);
244 for (i = 0; i < 3; i++) {
245 memcpy(&ptr[offset], priv->
packet[i], priv->
len[i]);
246 offset += priv->
len[
i];
262 for (i = 0; i < 3; i++)
316 if (os->
psize < 1 || pkt_type > 5)
319 if (priv->
packet[pkt_type >> 1])
321 if (pkt_type > 1 && !priv->
packet[0] || pkt_type > 3 && !priv->
packet[1])
324 priv->
len[pkt_type >> 1] = os->
psize;
326 if (!priv->
packet[pkt_type >> 1])
331 unsigned blocksize, bs0, bs1;
338 if (bytestream_get_le32(&p) != 0)
341 channels = bytestream_get_byte(&p);
347 srate = bytestream_get_le32(&p);
352 blocksize = bytestream_get_byte(&p);
353 bs0 = blocksize & 15;
354 bs1 = blocksize >> 4;
358 if (bs0 < 6 || bs1 > 13)
361 if (bytestream_get_byte(&p) != 1)
381 if (new_len >= 16 && new_len < os->psize) {
383 priv->
packet[1][new_len - 1] = 1;
384 priv->
len[1] = new_len;
442 last_pkt = next_pkt = next_pkt + os->
psize;
443 for (; seg < os->
nsegs; seg++) {
449 }
else if (flags & VORBIS_FLAG_COMMENT) {
454 last_pkt = next_pkt + os->
segments[seg];
504 .
magic =
"\001vorbis",
unsigned int nb_chapters
Number of chapters in AVChapter array.
int ff_vorbis_stream_comment(AVFormatContext *as, AVStream *st, const uint8_t *buf, int size)
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
static int vorbis_header(AVFormatContext *s, int idx)
Copyright (C) 2005 Michael Ahlberg, Måns Rullgård.
void * av_realloc(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory.
#define AV_LOG_WARNING
Something somehow does not look correct.
static int fixup_vorbis_headers(AVFormatContext *as, struct oggvorbis_private *priv, uint8_t **buf)
int event_flags
Flags indicating events happening on the stream, a combination of AVSTREAM_EVENT_FLAG_*.
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
AVVorbisParseContext * av_vorbis_parse_init(const uint8_t *extradata, int extradata_size)
Allocate and initialize the Vorbis parser using headers in the extradata.
int av_strncasecmp(const char *a, const char *b, size_t n)
Locale-independent case-insensitive compare.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
int ff_vorbis_comment(AVFormatContext *as, AVDictionary **m, const uint8_t *buf, int size, int parse_picture)
unsigned char * packet[3]
#define AV_DICT_DONT_STRDUP_KEY
Take ownership of a key that's been allocated with av_malloc() or another memory allocation function...
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 offset
static av_cold int end(AVCodecContext *avctx)
int id
unique ID to identify the chapter
AVStream ** streams
A list of all streams in the file.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
A public API for Vorbis parsing.
int ff_replaygain_export(AVStream *st, AVDictionary *metadata)
Parse replaygain tags and export them as per-stream side data.
static void vorbis_cleanup(AVFormatContext *s, int idx)
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_vorbis_parse_free(AVVorbisParseContext **s)
Free the parser and everything associated with it.
#define PTRDIFF_SPECIFIER
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values. ...
enum AVMediaType codec_type
General type of the encoded data.
int extradata_size
Size of the extradata content in bytes.
unsigned int new_metadata_size
int av_strcasecmp(const char *a, const char *b)
Locale-independent case-insensitive compare.
#define AV_DICT_DONT_STRDUP_VAL
Take ownership of a value that's been allocated with av_malloc() or another memory allocation functio...
struct ogg_stream * streams
static int ogm_chapter(AVFormatContext *as, uint8_t *key, uint8_t *val)
#define AV_DICT_APPEND
If the entry already exists, append to it.
static int vorbis_update_metadata(AVFormatContext *s, int idx)
#define VORBIS_FLAG_COMMENT
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AV_LOG_INFO
Standard information.
int av_reallocp(void *ptr, size_t size)
Allocate, reallocate, or free a block of memory through a pointer to a pointer.
uint8_t * av_packet_pack_dictionary(AVDictionary *dict, int *size)
Pack a dictionary for use in side_data.
int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags)
Set the given entry in *pm, overwriting an existing entry.
unsigned int av_xiphlacing(unsigned char *s, unsigned int v)
Encode extradata length to a buffer.
Rational number (pair of numerator and denominator).
int av_vorbis_parse_frame_flags(AVVorbisParseContext *s, const uint8_t *buf, int buf_size, int *flags)
Get the duration for a Vorbis packet.
AVVorbisParseContext * vp
#define flags(name, subs,...)
int64_t duration
Decoding: duration of the stream, in stream time base.
int sample_rate
Audio only.
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
static int vorbis_packet(AVFormatContext *s, int idx)
#define AV_BASE64_DECODE_SIZE(x)
Calculate the output size in bytes needed to decode a base64 string with length x to a data buffer...
#define AVERROR_UNKNOWN
Unknown error, typically from an external library.
#define AV_PKT_FLAG_CORRUPT
The packet content is corrupted.
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
void * priv_data
Format private data.
const struct ogg_codec ff_vorbis_codec
int av_base64_decode(uint8_t *out, const char *in_str, int out_size)
Decode a base64-encoded string.
uint8_t * extradata
Extra binary data needed for initializing the decoder, codec-dependent.
int ff_flac_parse_picture(AVFormatContext *s, uint8_t *buf, int buf_size, int truncate_workaround)
AVCodecParameters * codecpar
Codec parameters associated with this stream.
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
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
static double val(void *priv, double ch)
#define AV_NOPTS_VALUE
Undefined timestamp value.
void av_vorbis_parse_reset(AVVorbisParseContext *s)