Hi people, Last problem is a simple API question. The granulepos in Theora is a combination of keyframe number + frames since the last keyframe. This is nice for seeking to the last keyframe. But why isn't this available in the public API of libtheora? I had to include codec_internal.h (the name does suggest to me that this is bad) and code this: ogg_int64_t framesSinceKeyframe(theora_state *th,ogg_int64_t granulepos) { CP_INSTANCE *cpi=(CP_INSTANCE *)(th->internal_encode); PB_INSTANCE *pbi=(PB_INSTANCE *)(th->internal_decode); if(cpi) pbi=&cpi->pb; if (granulepos>=0) { ogg_int64_t iframe = granulepos >> pbi->keyframe_granule_shift; return granulepos - (iframe << pbi->keyframe_granule_shift); } return(-1); } ogg_int64_t keyframeNumber(theora_state *th,ogg_int64_t granulepos) { CP_INSTANCE *cpi=(CP_INSTANCE *)(th->internal_encode); PB_INSTANCE *pbi=(PB_INSTANCE *)(th->internal_decode); if(cpi) pbi=&cpi->pb; if (granulepos>=0) { return granulepos >> pbi->keyframe_granule_shift; } return(-1); } It would have been nice if these were part of the library. Feel free to grab the code and include it, if you agree. Bo Thorsen. -- Thorsen Consulting ApS - Qt consulting services http://www.thorsen-consulting.dk