32 #include "libavutil/avassert.h"
33 #include "libavutil/intreadwrite.h"
39 #define MAX_PAGE_SIZE 65307
40 #define DECODER_BUFFER_SIZE MAX_PAGE_SIZE
76 for (i = 0; i < ogg->
nstreams; i++) {
128 for (i = 0; i < ogg->
nstreams; i++) {
142 if (start_pos <= s->data_offset) {
157 for (i = 0; ogg_codecs[i]; i++)
160 return ogg_codecs[i];
188 for (i = 0; i < ogg->
nstreams; i++) {
214 memset(os, 0,
sizeof(*os));
235 "in between Ogg context save/restore operations.\n");
245 memset(os, 0,
sizeof(*os));
315 if (sync[sp & 3] ==
'O' &&
316 sync[(sp + 1) & 3] ==
'g' &&
317 sync[(sp + 2) & 3] ==
'g' && sync[(sp + 3) & 3] ==
'S')
378 for (i = 0; i <
nsegs; i++)
457 av_dlog(s,
"ogg_packet: idx=%d pstart=%d psize=%d segp=%d nsegs=%d\n",
485 if (!complete && os->
segp == os->
nsegs) {
498 "Page at %"PRId64
" is missing granule\n",
520 for (i = 0; i < ogg->
nstreams; i++) {
612 while (streams_left > 0 && !
ogg_packet(s, &i, NULL, NULL, NULL)) {
635 for (i = 0; i < ogg->
nstreams; i++) {
664 for (i = 0; i < ogg->
nstreams; i++) {
672 "Headers mismatch for stream %d: "
673 "expected %d received %d.\n",
738 int64_t fpos, pts, dts;
748 ret =
ogg_packet(s, &idx, &pstart, &psize, &fpos);
751 }
while (idx < 0 || !s->streams[idx]);
769 memcpy(pkt->
data, os->
buf + pstart, psize);
781 if(side_data == NULL) {
793 int64_t *pos_arg, int64_t pos_limit)
805 && !
ogg_packet(s, &i, &pstart, &psize, pos_arg)) {
806 if (i == stream_index) {
829 int64_t timestamp,
int flags)
847 os = ogg->
streams + stream_index;
855 if (!memcmp(
"OggS", p->
buf, 5) && p->
buf[5] <= 0x7)
863 .priv_data_size =
sizeof(
struct ogg),
int granule_is_start
1 if granule is the start time of the associated packet.
struct ogg_codec ff_theora_codec
#define AVERROR_PATCHWELCOME
struct ogg_codec ff_ogm_audio_codec
void av_free_packet(AVPacket *pkt)
Free a packet.
Copyright (C) 2005 Michael Ahlberg, Måns Rullgård.
#define DECODER_BUFFER_SIZE
int nb_header
set to the number of parsed headers
#define AV_LOG_WARNING
Something somehow does not look correct.
int64_t pos
byte position in stream, -1 if unknown
static int ogg_new_buf(struct ogg *ogg, int idx)
#define OGG_NOGRANULE_VALUE
AVCodecContext * codec
Codec context associated with this stream.
struct ogg_codec ff_opus_codec
static int sync(AVFormatContext *s, uint8_t *header)
Read input until we find the next ident.
void av_log(void *avcl, int level, const char *fmt,...) av_printf_format(3
Send the specified message to the log if the level is less than or equal to the current av_log_level...
av_dlog(ac->avr,"%d samples - audio_convert: %s to %s (%s)\n", len, av_get_sample_fmt_name(ac->in_fmt), av_get_sample_fmt_name(ac->out_fmt), use_generic?ac->func_descr_generic:ac->func_descr)
void(* cleanup)(AVFormatContext *s, int idx)
int64_t data_offset
offset of the first packet
static int ogg_get_length(AVFormatContext *s)
static int ogg_probe(AVProbeData *p)
static int ogg_read_packet(AVFormatContext *s, AVPacket *pkt)
void av_freep(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc() and set the pointer ...
if((e=av_dict_get(options,"", NULL, AV_DICT_IGNORE_SUFFIX)))
static int ogg_restore(AVFormatContext *s, int discard)
int64_t sync_pos
file offset of the first page needed to reconstruct the current packet
static int data_packets_seen(const struct ogg *ogg)
static av_cold int end(AVCodecContext *avctx)
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
int id
Format-specific stream ID.
struct ogg_codec ff_ogm_video_codec
int64_t page_pos
file offset of the current page
static struct ogg_codec * ogg_find_codec(uint8_t *buf, int size)
int end_trimming
set the number of packets to drop from the end
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
static int ogg_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags)
int duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
int av_new_packet(AVPacket *pkt, int size)
Allocate the payload of a packet and initialize its fields with default values.
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
void av_free(void *ptr)
Free a memory block which has been allocated with av_malloc(z)() or av_realloc(). ...
void * priv_data
Format private data.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
static int ogg_read_close(AVFormatContext *s)
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet.
int flags
A combination of AV_PKT_FLAG values.
int incomplete
whether we're expecting a continuation in the next page
#define FF_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
struct ogg_codec ff_skeleton_codec
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
struct ogg_codec ff_old_flac_codec
struct ogg_codec ff_ogm_text_codec
void * av_realloc(void *ptr, size_t size) 1(2)
Allocate or reallocate a block of memory.
static int ogg_read_page(AVFormatContext *s, int *sid)
static struct ogg_codec *const ogg_codecs[]
static int64_t ogg_calc_pts(AVFormatContext *s, int idx, int64_t *dts)
static int ogg_replace_stream(AVFormatContext *s, uint32_t serial, int nsegs)
Replace the current stream with a new one.
static int av_size_mult(size_t a, size_t b, size_t *r)
Multiply two size_t values checking for overflow.
void * av_malloc(size_t size) av_malloc_attrib 1(1)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
int(* packet)(AVFormatContext *, int)
struct ogg_stream * streams
int page_end
current packet is the last one completed in the page
AVInputFormat ff_ogg_demuxer
struct ogg_codec ff_speex_codec
struct ogg_codec ff_vorbis_codec
static int ogg_find_stream(struct ogg *ogg, int serial)
#define AV_LOG_INFO
Standard information.
enum AVMediaType codec_type
struct ogg_codec ff_celt_codec
static int ogg_packet(AVFormatContext *s, int *sid, int *dstart, int *dsize, int64_t *fpos)
find the next Ogg packet
int io_repositioned
IO repositioned flag.
#define AV_EF_EXPLODE
abort decoding on minor error detection
AVIOContext * pb
I/O context.
static int ogg_read_header(AVFormatContext *s)
int nb_header
Number of expected headers.
Recommmends skipping the specified number of samples.
static int ogg_reset(AVFormatContext *s)
This structure contains the data a format has to probe a file.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
int64_t duration
Decoding: duration of the stream, in stream time base.
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
struct ogg_codec ff_ogm_old_codec
int error_recognition
Error recognition; higher values will detect more errors but may misdetect some more or less valid pa...
struct ogg_codec ff_old_dirac_codec
int got_data
1 if the stream got some data (non-initial packets), 0 otherwise
struct ogg_codec ff_flac_codec
#define AVERROR_INVALIDDATA
static int ogg_save(AVFormatContext *s)
int64_t page_pos
file offset of the current page
static int ogg_new_stream(AVFormatContext *s, uint32_t serial)
static void ogg_validate_keyframe(AVFormatContext *s, int idx, int pstart, int psize)
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed...
static int64_t ogg_read_timestamp(AVFormatContext *s, int stream_index, int64_t *pos_arg, int64_t pos_limit)
int64_t duration
Decoding: duration of the stream, in AV_TIME_BASE fractional seconds.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
struct ogg_codec ff_dirac_codec
struct ogg_stream streams[1]
This structure stores compressed data.
int(* header)(AVFormatContext *, int)
Attempt to process a packet as a header.
int64_t pts
Presentation timestamp in AVStream->time_base units; the time at which the decompressed packet will b...
static uint64_t ogg_gptopts(AVFormatContext *s, int i, uint64_t gp, int64_t *dts)
#define AV_NOPTS_VALUE
Undefined timestamp value.
void * av_mallocz(size_t size) av_malloc_attrib 1(1)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...