MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / ogg_buffer_data

Function ogg_buffer_data

libavformat/oggenc.c:155–190  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

153}
154
155static int ogg_buffer_data(AVFormatContext *s, AVStream *st,
156 uint8_t *data, unsigned size, int64_t granule)
157{
158 OGGStreamContext *oggstream = st->priv_data;
159 int total_segments = size / 255 + 1;
160 uint8_t *p = data;
161 int i, segments, len;
162
163 for (i = 0; i < total_segments; ) {
164 OGGPage *page = &oggstream->page;
165
166 segments = FFMIN(total_segments - i, 255 - page->segments_count);
167
168 if (i && !page->segments_count)
169 page->flags |= 1; // continued packet
170
171 memset(page->segments+page->segments_count, 255, segments - 1);
172 page->segments_count += segments - 1;
173
174 len = FFMIN(size, segments*255);
175 page->segments[page->segments_count++] = len - (segments-1)*255;
176 memcpy(page->data+page->size, p, len);
177 p += len;
178 size -= len;
179 i += segments;
180 page->size += len;
181
182 if (i == total_segments)
183 page->granule = granule;
184
185 if (page->segments_count == 255) {
186 ogg_buffer_page(s, oggstream);
187 }
188 }
189 return 0;
190}
191
192static uint8_t *ogg_write_vorbiscomment(int offset, int bitexact,
193 int *header_len, AVMetadata *m)

Callers 2

ogg_write_headerFunction · 0.85
ogg_write_packetFunction · 0.85

Calls 1

ogg_buffer_pageFunction · 0.85

Tested by

no test coverage detected