Mercurial > libavcodec.hg
changeset 1924:d9f751c0f488 libavcodec
pts hack (correct solution would be to pass the pts from the encoder to the muxer)
author | michael |
---|---|
date | Sun, 04 Apr 2004 17:06:30 +0000 |
parents | 04f93474b3bb |
children | 48c1033bd23b |
files | oggvorbis.c |
diffstat | 1 files changed, 19 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/oggvorbis.c Sun Apr 04 15:19:20 2004 +0000 +++ b/oggvorbis.c Sun Apr 04 17:06:30 2004 +0000 @@ -8,7 +8,9 @@ #include "avcodec.h" -//#define OGGVORBIS_FRAME_SIZE 1024 +#undef NDEBUG +#include <assert.h> + #define OGGVORBIS_FRAME_SIZE 64 #define BUFFER_SIZE (1024*64) @@ -19,6 +21,7 @@ vorbis_block vb ; uint8_t buffer[BUFFER_SIZE]; int buffer_index; + int64_t fake_pts; //pts which libavformat will guess, HACK FIXME /* decoder */ vorbis_comment vc ; @@ -130,20 +133,27 @@ } } + l=0; if(context->buffer_index){ ogg_packet *op2= (ogg_packet*)context->buffer; op2->packet = context->buffer + sizeof(ogg_packet); - l= op2->bytes; - - memcpy(packets, op2->packet, l); - context->buffer_index -= l + sizeof(ogg_packet); - memcpy(context->buffer, context->buffer + l + sizeof(ogg_packet), context->buffer_index); - + + if(op2->granulepos <= context->fake_pts /*&& (context->fake_pts || context->buffer_index > 4*1024)*/){ + assert(op2->granulepos == context->fake_pts); + l= op2->bytes; + + memcpy(packets, op2->packet, l); + context->buffer_index -= l + sizeof(ogg_packet); + memcpy(context->buffer, context->buffer + l + sizeof(ogg_packet), context->buffer_index); + } // av_log(avccontext, AV_LOG_DEBUG, "E%d\n", l); - return l; } - return 0; + if(l || context->fake_pts){ + context->fake_pts += avccontext->frame_size; + } + + return l; }