[SCM] libav/experimental: pts hack (correct solution would be to pass the pts from the encoder to the muxer)
siretart at users.alioth.debian.org
siretart at users.alioth.debian.org
Sun Jun 30 15:39:47 UTC 2013
The following commit has been merged in the experimental branch:
commit 3f4993f19b609180ff0f92486ea8bbac9e531db2
Author: Michael Niedermayer <michaelni at gmx.at>
Date: Sun Apr 4 17:06:30 2004 +0000
pts hack (correct solution would be to pass the pts from the encoder to the muxer)
Originally committed as revision 2957 to svn://svn.ffmpeg.org/ffmpeg/trunk
diff --git a/libavcodec/oggvorbis.c b/libavcodec/oggvorbis.c
index 38145cc..c241e8f 100644
--- a/libavcodec/oggvorbis.c
+++ b/libavcodec/oggvorbis.c
@@ -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 @@ typedef struct OggVorbisContext {
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 @@ static int oggvorbis_encode_frame(AVCodecContext *avccontext,
}
}
+ 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;
}
--
Libav/FFmpeg packaging
More information about the pkg-multimedia-commits
mailing list