39 #define MAX_PAGE_SIZE 65307
40 #define DECODER_BUFFER_SIZE MAX_PAGE_SIZE
83 for (i = 0; i < ogg->
nstreams; i++) {
143 for (i = 0; i < ogg->
nstreams; i++) {
157 if (start_pos <= s->internal->data_offset) {
175 for (i = 0; ogg_codecs[i]; i++)
178 return ogg_codecs[i];
206 for (i = 0; i < ogg->
nstreams; i++) {
232 memset(os, 0,
sizeof(*os));
253 "in between Ogg context save/restore operations.\n");
263 memset(os, 0,
sizeof(*os));
336 if (sync[sp & 3] ==
'O' &&
337 sync[(sp + 1) & 3] ==
'g' &&
338 sync[(sp + 2) & 3] ==
'g' && sync[(sp + 3) & 3] ==
'S')
402 for (i = 0; i <
nsegs; i++)
509 if (!complete && os->
segp == os->
nsegs) {
522 "Page at %"PRId64
" is missing granule\n",
544 for (i = 0; i < ogg->
nstreams; i++) {
664 for (i = 0; i < ogg->
nstreams; i++) {
697 for (i = 0; i < ogg->
nstreams; i++) {
705 "Headers mismatch for stream %d: "
706 "expected %d received %d.\n",
783 int64_t fpos,
pts, dts;
793 ret =
ogg_packet(s, &idx, &pstart, &psize, &fpos);
796 }
while (idx < 0 || !s->streams[idx]);
814 memcpy(pkt->
data, os->
buf + pstart, psize);
851 int64_t *pos_arg, int64_t pos_limit)
863 && !
ogg_packet(s, &i, &pstart, &psize, pos_arg)) {
864 if (i == stream_index) {
892 int64_t timestamp,
int flags)
911 os = ogg->
streams + stream_index;
919 if (!memcmp(
"OggS", p->
buf, 5) && p->
buf[5] <= 0x7)
927 .priv_data_size =
sizeof(
struct ogg),
int granule_is_start
1 if granule is the start time of the associated packet.
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
int64_t avio_size(AVIOContext *s)
Get the filesize.
A list of zero terminated key/value strings.
void av_free_packet(AVPacket *pkt)
Free a packet.
Copyright (C) 2005 Michael Ahlberg, Måns Rullgård.
static const struct ogg_codec * ogg_find_codec(uint8_t *buf, int size)
const struct ogg_codec ff_celt_codec
#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
const struct ogg_codec * codec
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
AVFormatInternal * internal
An opaque field for libavformat internal usage.
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
void(* cleanup)(AVFormatContext *s, int idx)
static int ogg_get_length(AVFormatContext *s)
static int ogg_probe(AVProbeData *p)
static const struct ogg_codec *const ogg_codecs[]
static int ogg_read_packet(AVFormatContext *s, AVPacket *pkt)
const struct ogg_codec ff_ogm_old_codec
static int ogg_restore(AVFormatContext *s, int discard)
int64_t sync_pos
file offset of the first page needed to reconstruct the current packet
#define av_assert0(cond)
assert() equivalent, that is always enabled.
const struct ogg_codec ff_ogm_video_codec
static int data_packets_seen(const struct ogg *ogg)
#define AV_LOG_TRACE
Extremely verbose debugging, useful for libav* development.
static av_cold int end(AVCodecContext *avctx)
int id
Format-specific stream ID.
AVStream * avformat_new_stream(AVFormatContext *s, const AVCodec *c)
Add a new stream to a media file.
int64_t page_pos
file offset of the current page
AVStream ** streams
A list of all streams in the file.
#define AVERROR_EOF
End of file.
int end_trimming
set the number of packets to drop from the end
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
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.
int avio_read(AVIOContext *s, unsigned char *buf, int size)
Read size bytes from AVIOContext into buf.
const struct ogg_codec ff_skeleton_codec
#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.
#define AV_EF_EXPLODE
abort decoding on minor error detection
unsigned int avio_rl32(AVIOContext *s)
#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)
simple assert() macros that are a bit more flexible than ISO C assert().
const struct ogg_codec ff_opus_codec
int flags
A combination of AV_PKT_FLAG values.
int avio_r8(AVIOContext *s)
AVCodecContext * codec
Codec context associated with this stream.
int incomplete
whether we're expecting a continuation in the next page
unsigned char * buf
Buffer must have AVPROBE_PADDING_SIZE of extra allocated bytes filled with zero.
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
unsigned int new_metadata_size
static int ogg_read_page(AVFormatContext *s, int *sid)
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.
int(* packet)(AVFormatContext *, int)
struct ogg_stream * streams
const struct ogg_codec ff_vorbis_codec
const struct ogg_codec ff_vp8_codec
int page_end
current packet is the last one completed in the page
AVInputFormat ff_ogg_demuxer
const struct ogg_codec ff_ogm_audio_codec
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
const struct ogg_codec ff_theora_codec
static int ogg_find_stream(struct ogg *ogg, int serial)
#define AV_LOG_INFO
Standard information.
enum AVMediaType codec_type
AVIOContext * pb
I/O context.
static int ogg_packet(AVFormatContext *s, int *sid, int *dstart, int *dsize, int64_t *fpos)
find the next Ogg packet
const struct ogg_codec ff_flac_codec
const struct ogg_codec ff_old_dirac_codec
int io_repositioned
IO repositioned flag.
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
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.
const struct ogg_codec ff_old_flac_codec
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
static int64_t pts
Global timestamp for the audio frames.
const struct ogg_codec ff_dirac_codec
int64_t duration
Decoding: duration of the stream, in stream time base.
const struct ogg_codec ff_speex_codec
void * av_realloc(void *ptr, size_t size)
Allocate or reallocate a block of memory.
int64_t start_time
Decoding: pts of the first frame of the stream in presentation order, in stream time base...
int error_recognition
Error recognition; higher values will detect more errors but may misdetect some more or less valid pa...
int got_data
1 if the stream got some data (non-initial packets), 0 otherwise
const struct ogg_codec ff_ogm_text_codec
#define AV_INPUT_BUFFER_PADDING_SIZE
Required number of additionally allocated bytes at the end of the input bitstream for decoding...
static int ogg_save(AVFormatContext *s)
int64_t page_pos
file offset of the current page
void * priv_data
Format private data.
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
Duration of the stream, in AV_TIME_BASE fractional seconds.
int avio_feof(AVIOContext *s)
feof() equivalent for AVIOContext.
uint8_t * av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, int size)
Allocate new information of a packet.
struct ogg_stream streams[1]
This structure stores compressed data.
uint64_t avio_rl64(AVIOContext *s)
void * av_mallocz(size_t size)
Allocate a block of size bytes with alignment suitable for all memory accesses (including vectors if ...
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.