oggdec.h
Go to the documentation of this file.
1 
25 #ifndef AVFORMAT_OGGDEC_H
26 #define AVFORMAT_OGGDEC_H
27 
28 #include "avformat.h"
29 #include "metadata.h"
30 
31 struct ogg_codec {
32  const int8_t *magic;
33  uint8_t magicsize;
34  const int8_t *name;
41  int (*header)(AVFormatContext *, int);
42  int (*packet)(AVFormatContext *, int);
48  uint64_t (*gptopts)(AVFormatContext *, int, uint64_t, int64_t *dts);
57  int nb_header;
58  void (*cleanup)(AVFormatContext *s, int idx);
59 };
60 
61 struct ogg_stream {
62  uint8_t *buf;
63  unsigned int bufsize;
64  unsigned int bufpos;
65  unsigned int pstart;
66  unsigned int psize;
67  unsigned int pflags;
68  unsigned int pduration;
69  uint32_t serial;
70  uint64_t granule;
71  int64_t lastpts;
72  int64_t lastdts;
73  int64_t sync_pos;
74  int64_t page_pos;
75  int flags;
76  const struct ogg_codec *codec;
77  int header;
78  int nsegs, segp;
79  uint8_t segments[255];
80  int incomplete;
81  int page_end;
83  void *private;
84 };
85 
86 struct ogg_state {
87  uint64_t pos;
88  int curidx;
89  struct ogg_state *next;
90  int nstreams;
91  struct ogg_stream streams[1];
92 };
93 
94 struct ogg {
96  int nstreams;
97  int headers;
98  int curidx;
99  struct ogg_state *state;
100 };
101 
102 #define OGG_FLAG_CONT 1
103 #define OGG_FLAG_BOS 2
104 #define OGG_FLAG_EOS 4
105 
106 extern const struct ogg_codec ff_celt_codec;
107 extern const struct ogg_codec ff_dirac_codec;
108 extern const struct ogg_codec ff_flac_codec;
109 extern const struct ogg_codec ff_ogm_audio_codec;
110 extern const struct ogg_codec ff_ogm_old_codec;
111 extern const struct ogg_codec ff_ogm_text_codec;
112 extern const struct ogg_codec ff_ogm_video_codec;
113 extern const struct ogg_codec ff_old_dirac_codec;
114 extern const struct ogg_codec ff_old_flac_codec;
115 extern const struct ogg_codec ff_skeleton_codec;
116 extern const struct ogg_codec ff_speex_codec;
117 extern const struct ogg_codec ff_theora_codec;
118 extern const struct ogg_codec ff_vorbis_codec;
119 
120 int ff_vorbis_comment(AVFormatContext *ms, AVDictionary **m, const uint8_t *buf, int size);
121 
122 static inline int
123 ogg_find_stream (struct ogg * ogg, int serial)
124 {
125  int i;
126 
127  for (i = 0; i < ogg->nstreams; i++)
128  if (ogg->streams[i].serial == serial)
129  return i;
130 
131  return -1;
132 }
133 
134 static inline uint64_t
135 ogg_gptopts (AVFormatContext * s, int i, uint64_t gp, int64_t *dts)
136 {
137  struct ogg *ogg = s->priv_data;
138  struct ogg_stream *os = ogg->streams + i;
139  uint64_t pts = AV_NOPTS_VALUE;
140 
141  if(os->codec && os->codec->gptopts){
142  pts = os->codec->gptopts(s, i, gp, dts);
143  } else {
144  pts = gp;
145  if (dts)
146  *dts = pts;
147  }
148 
149  return pts;
150 }
151 
152 #endif /* AVFORMAT_OGGDEC_H */
int headers
Definition: oggdec.h:97
int header
Definition: oggdec.h:77
int granule_is_start
1 if granule is the start time of the associated packet.
Definition: oggdec.h:53
int size
int nstreams
Definition: oggdec.h:96
Copyright (C) 2005 Michael Ahlberg, Måns Rullgård.
Definition: oggdec.h:31
unsigned int bufsize
Definition: oggdec.h:63
unsigned int pflags
Definition: oggdec.h:67
const struct ogg_codec ff_celt_codec
Definition: oggparsecelt.c:92
const struct ogg_codec * codec
Definition: oggdec.h:76
void(* cleanup)(AVFormatContext *s, int idx)
Definition: oggdec.h:58
int flags
Definition: oggdec.h:75
int64_t lastpts
Definition: oggdec.h:71
const struct ogg_codec ff_ogm_old_codec
Definition: oggparseogm.c:187
Format I/O context.
Definition: avformat.h:863
unsigned int psize
Definition: oggdec.h:66
int64_t sync_pos
file offset of the first page needed to reconstruct the current packet
Definition: oggdec.h:73
uint64_t pos
Definition: oggdec.h:87
internal metadata API header see avformat.h or the public API!
const struct ogg_codec ff_ogm_video_codec
Definition: oggparseogm.c:163
int64_t page_pos
file offset of the current page
Definition: oggdec.h:74
struct ogg_state * state
Definition: oggdec.h:99
int nstreams
Definition: oggdec.h:90
int ff_vorbis_comment(AVFormatContext *ms, AVDictionary **m, const uint8_t *buf, int size)
const struct ogg_codec ff_skeleton_codec
uint8_t segments[255]
Definition: oggdec.h:79
int incomplete
whether we're expecting a continuation in the next page
Definition: oggdec.h:80
uint32_t serial
Definition: oggdec.h:69
uint64_t granule
Definition: oggdec.h:70
unsigned int pstart
Definition: oggdec.h:65
int(* packet)(AVFormatContext *, int)
Definition: oggdec.h:42
struct ogg_stream * streams
Definition: oggdec.h:95
int segp
Definition: oggdec.h:78
const struct ogg_codec ff_vorbis_codec
int page_end
current packet is the last one completed in the page
Definition: oggdec.h:81
const struct ogg_codec ff_ogm_audio_codec
Definition: oggparseogm.c:171
const struct ogg_codec ff_theora_codec
static int ogg_find_stream(struct ogg *ogg, int serial)
Definition: oggdec.h:123
unsigned int pduration
Definition: oggdec.h:68
int nsegs
Definition: oggdec.h:78
const int8_t * name
Definition: oggdec.h:34
const struct ogg_codec ff_flac_codec
Definition: oggparseflac.c:87
const struct ogg_codec ff_old_dirac_codec
static void(WINAPI *cond_broadcast)(pthread_cond_t *cond)
struct ogg_state * next
Definition: oggdec.h:89
int nb_header
Number of expected headers.
Definition: oggdec.h:57
int64_t lastdts
Definition: oggdec.h:72
const struct ogg_codec ff_old_flac_codec
Definition: oggparseflac.c:93
int curidx
Definition: oggdec.h:88
const int8_t * magic
Definition: oggdec.h:32
const struct ogg_codec ff_dirac_codec
uint8_t * buf
Definition: oggdec.h:62
const struct ogg_codec ff_speex_codec
Main libavformat public API header.
uint64_t(* gptopts)(AVFormatContext *, int, uint64_t, int64_t *dts)
Translate a granule into a timestamp.
Definition: oggdec.h:48
const struct ogg_codec ff_ogm_text_codec
Definition: oggparseogm.c:179
int keyframe_seek
Definition: oggdec.h:82
Definition: oggdec.h:94
void * priv_data
Format private data.
Definition: avformat.h:883
uint8_t magicsize
Definition: oggdec.h:33
#define gp
Definition: regdef.h:62
int curidx
Definition: oggdec.h:98
struct ogg_stream streams[1]
Definition: oggdec.h:91
int(* header)(AVFormatContext *, int)
Attempt to process a packet as a header.
Definition: oggdec.h:41
unsigned int bufpos
Definition: oggdec.h:64
static uint64_t ogg_gptopts(AVFormatContext *s, int i, uint64_t gp, int64_t *dts)
Definition: oggdec.h:135
#define AV_NOPTS_VALUE
Undefined timestamp value.
Definition: avutil.h:271