Re: Theora integration question
"Timothy B. Terriberry" <[email protected]> Tue, 16 Oct 2012 20:25:27 -0700
| Newsgroups | gmane.comp.multimedia.ogg.theora.devel |
|---|---|
| Message-ID | <[email protected]> |
Engineering wrote: > For example, I'm not quite sure what 'dct_tokens' is, but mallocing that in > oc_dec_init() seems to be putting me over the edge. I notice that the size > of those mallocs looks similar to what I'd expect the RGB pixel data to take > for each movie. The total size of dct_tokens is targeted towards the worst-case, with the expectation that the OS will support overcommit semantics, so that a much smaller number of pages actually get allocated. Since you know what movies you're playing back, you could potentially instrument things and use a much smaller buffer, but that might need to be updated as you add more movies, and would also require more extensive code changes to make sure you're using the right portions of the buffer (it is split into 64 pieces, one for each zig-zag index). > Changing > // _dec->dct_tokens=(unsigned char *)_ogg_malloc((64+64+1)* > _dec->state.nfrags*sizeof(_dec->dct_tokens[0])); > > To > unsigned char sambuf[MB(8)]; // global > _dec->dct_tokens=(unsigned char *)&sambuf[0]; > > 'seems' to work, but not knowing the internals of theora, makes me nervous > that I have broken something. This will work fine. dct_tokens is only used while decoding a single frame. Its contents do not need to be remembered from frame to frame, so as long as you are not decoding two frames simultaneously using the same "sambuf" buffer, you should have no problem. If it were me, I would check that MB(8) was at least as large as (64+64+1)*_dec->state.nfrags*sizeof(_dec->dct_tokens[0]), however.