FFmpeg  1.2.12
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;
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 {
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  uint64_t start_granule;
72  int64_t lastpts;
73  int64_t lastdts;
74  int64_t sync_pos;
75  int64_t page_pos;
76  int flags;
77  const struct ogg_codec *codec;
78  int header;
79  int nsegs, segp;
81  int incomplete;
82  int page_end;
84  int got_start;
85  int got_data;
86  int nb_header;
87  void *private;
88 };
89 
90 struct ogg_state {
91  uint64_t pos;
92  int curidx;
93  struct ogg_state *next;
94  int nstreams;
95  struct ogg_stream streams[1];
96 };
97 
98 struct ogg {
100  int nstreams;
101  int headers;
102  int curidx;
103  int64_t page_pos;
104  struct ogg_state *state;
105 };
106 
107 #define OGG_FLAG_CONT 1
108 #define OGG_FLAG_BOS 2
109 #define OGG_FLAG_EOS 4
110 
111 #define OGG_NOGRANULE_VALUE (-1ull)
112 
113 extern const struct ogg_codec ff_celt_codec;
114 extern const struct ogg_codec ff_dirac_codec;
115 extern const struct ogg_codec ff_flac_codec;
116 extern const struct ogg_codec ff_ogm_audio_codec;
117 extern const struct ogg_codec ff_ogm_old_codec;
118 extern const struct ogg_codec ff_ogm_text_codec;
119 extern const struct ogg_codec ff_ogm_video_codec;
120 extern const struct ogg_codec ff_old_dirac_codec;
121 extern const struct ogg_codec ff_old_flac_codec;
122 extern const struct ogg_codec ff_opus_codec;
123 extern const struct ogg_codec ff_skeleton_codec;
124 extern const struct ogg_codec ff_speex_codec;
125 extern const struct ogg_codec ff_theora_codec;
126 extern const struct ogg_codec ff_vorbis_codec;
127 
128 int ff_vorbis_comment(AVFormatContext *ms, AVDictionary **m, const uint8_t *buf, int size);
129 
130 static inline int
131 ogg_find_stream (struct ogg * ogg, int serial)
132 {
133  int i;
134 
135  for (i = 0; i < ogg->nstreams; i++)
136  if (ogg->streams[i].serial == serial)
137  return i;
138 
139  return -1;
140 }
141 
142 static inline uint64_t
143 ogg_gptopts (AVFormatContext * s, int i, uint64_t gp, int64_t *dts)
144 {
145  struct ogg *ogg = s->priv_data;
146  struct ogg_stream *os = ogg->streams + i;
147  uint64_t pts = AV_NOPTS_VALUE;
148 
149  if(os->codec && os->codec->gptopts){
150  pts = os->codec->gptopts(s, i, gp, dts);
151  } else {
152  pts = gp;
153  if (dts)
154  *dts = pts;
155  }
156 
157  return pts;
158 }
159 
160 #endif /* AVFORMAT_OGGDEC_H */