2005-04-09 18:32:58 +03:00
|
|
|
/**
|
|
|
|
Copyright (C) 2005 Michael Ahlberg, Måns Rullgård
|
|
|
|
|
|
|
|
Permission is hereby granted, free of charge, to any person
|
|
|
|
obtaining a copy of this software and associated documentation
|
|
|
|
files (the "Software"), to deal in the Software without
|
|
|
|
restriction, including without limitation the rights to use, copy,
|
|
|
|
modify, merge, publish, distribute, sublicense, and/or sell copies
|
|
|
|
of the Software, and to permit persons to whom the Software is
|
|
|
|
furnished to do so, subject to the following conditions:
|
|
|
|
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
|
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
|
|
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
|
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
|
|
DEALINGS IN THE SOFTWARE.
|
|
|
|
**/
|
|
|
|
|
2007-11-07 22:22:32 +02:00
|
|
|
#ifndef FFMPEG_OGGDEC_H
|
|
|
|
#define FFMPEG_OGGDEC_H
|
2005-04-09 18:32:58 +03:00
|
|
|
|
|
|
|
#include "avformat.h"
|
|
|
|
|
|
|
|
typedef struct ogg_codec {
|
2008-02-04 14:32:25 +02:00
|
|
|
const int8_t *magic;
|
2005-04-09 18:32:58 +03:00
|
|
|
uint8_t magicsize;
|
2008-02-04 14:32:25 +02:00
|
|
|
const int8_t *name;
|
2005-04-09 18:32:58 +03:00
|
|
|
int (*header)(AVFormatContext *, int);
|
|
|
|
int (*packet)(AVFormatContext *, int);
|
2005-05-11 19:38:34 +03:00
|
|
|
uint64_t (*gptopts)(AVFormatContext *, int, uint64_t);
|
2005-04-09 18:32:58 +03:00
|
|
|
} ogg_codec_t;
|
|
|
|
|
|
|
|
typedef struct ogg_stream {
|
|
|
|
uint8_t *buf;
|
|
|
|
unsigned int bufsize;
|
|
|
|
unsigned int bufpos;
|
|
|
|
unsigned int pstart;
|
|
|
|
unsigned int psize;
|
2007-11-11 23:56:18 +02:00
|
|
|
unsigned int pflags;
|
2005-04-09 18:32:58 +03:00
|
|
|
uint32_t serial;
|
|
|
|
uint32_t seq;
|
|
|
|
uint64_t granule, lastgp;
|
|
|
|
int flags;
|
|
|
|
ogg_codec_t *codec;
|
|
|
|
int header;
|
|
|
|
int nsegs, segp;
|
|
|
|
uint8_t segments[255];
|
2005-05-11 19:38:34 +03:00
|
|
|
void *private;
|
2005-04-09 18:32:58 +03:00
|
|
|
} ogg_stream_t;
|
|
|
|
|
|
|
|
typedef struct ogg_state {
|
|
|
|
uint64_t pos;
|
|
|
|
int curidx;
|
|
|
|
struct ogg_state *next;
|
2007-01-16 00:05:22 +02:00
|
|
|
int nstreams;
|
2005-04-10 02:27:48 +03:00
|
|
|
ogg_stream_t streams[1];
|
2005-04-09 18:32:58 +03:00
|
|
|
} ogg_state_t;
|
|
|
|
|
|
|
|
typedef struct ogg {
|
|
|
|
ogg_stream_t *streams;
|
|
|
|
int nstreams;
|
|
|
|
int headers;
|
|
|
|
int curidx;
|
|
|
|
uint64_t size;
|
|
|
|
ogg_state_t *state;
|
|
|
|
} ogg_t;
|
|
|
|
|
|
|
|
#define OGG_FLAG_CONT 1
|
|
|
|
#define OGG_FLAG_BOS 2
|
|
|
|
#define OGG_FLAG_EOS 4
|
|
|
|
|
2005-05-12 01:47:26 +03:00
|
|
|
extern ogg_codec_t flac_codec;
|
2005-04-09 18:32:58 +03:00
|
|
|
extern ogg_codec_t ogm_audio_codec;
|
|
|
|
extern ogg_codec_t ogm_old_codec;
|
2008-02-02 16:55:57 +02:00
|
|
|
extern ogg_codec_t ogm_text_codec;
|
|
|
|
extern ogg_codec_t ogm_video_codec;
|
|
|
|
extern ogg_codec_t old_flac_codec;
|
2008-02-06 14:37:37 +02:00
|
|
|
extern ogg_codec_t speex_codec;
|
2008-02-02 16:55:57 +02:00
|
|
|
extern ogg_codec_t theora_codec;
|
|
|
|
extern ogg_codec_t vorbis_codec;
|
2005-04-09 18:32:58 +03:00
|
|
|
|
2006-09-27 22:47:39 +03:00
|
|
|
extern int vorbis_comment(AVFormatContext *ms, uint8_t *buf, int size);
|
2005-04-09 18:32:58 +03:00
|
|
|
|
2007-11-07 22:22:32 +02:00
|
|
|
#endif /* FFMPEG_OGGDEC_H */
|