[Ffmpeg-cvslog] r5512 - in trunk: ffmpeg.c libavcodec/avcodec.h
michael
subversion
Sat Jun 24 11:25:22 CEST 2006
Author: michael
Date: Sat Jun 24 11:25:21 2006
New Revision: 5512
Modified:
trunk/ffmpeg.c
trunk/libavcodec/avcodec.h
Log:
CODEC_CAP_SMALL_LAST_FRAME patch by Justin Ruggles jruggle earthlink net
Modified: trunk/ffmpeg.c
==============================================================================
--- trunk/ffmpeg.c (original)
+++ trunk/ffmpeg.c Sat Jun 24 11:25:21 2006
@@ -1358,12 +1358,29 @@
if (ost->encoding_needed) {
for(;;) {
AVPacket pkt;
+ int fifo_bytes;
av_init_packet(&pkt);
pkt.stream_index= ost->index;
switch(ost->st->codec->codec_type) {
case CODEC_TYPE_AUDIO:
- ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, NULL);
+ fifo_bytes = fifo_size(&ost->fifo, NULL);
+ ret = 0;
+ /* encode any samples remaining in fifo */
+ if(fifo_bytes > 0 && enc->codec->capabilities & CODEC_CAP_SMALL_LAST_FRAME) {
+ int fs_tmp = enc->frame_size;
+ enc->frame_size = fifo_bytes / (2 * enc->channels);
+ if(fifo_read(&ost->fifo, (uint8_t *)samples, fifo_bytes,
+ &ost->fifo.rptr) == 0) {
+ ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, samples);
+ }
+ enc->frame_size = fs_tmp;
+ if(ret <= 0) {
+ ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, NULL);
+ }
+ } else {
+ ret = avcodec_encode_audio(enc, bit_buffer, bit_buffer_size, NULL);
+ }
audio_size += ret;
pkt.flags |= PKT_FLAG_KEY;
break;
Modified: trunk/libavcodec/avcodec.h
==============================================================================
--- trunk/libavcodec/avcodec.h (original)
+++ trunk/libavcodec/avcodec.h Sat Jun 24 11:25:21 2006
@@ -365,6 +365,11 @@
* if this is not set, the codec is guranteed to never be feeded with NULL data
*/
#define CODEC_CAP_DELAY 0x0020
+/**
+ * Codec can be fed a final frame with a smaller size.
+ * This can be used to prevent truncation of the last audio samples.
+ */
+#define CODEC_CAP_SMALL_LAST_FRAME 0x0040
//the following defines may change, don't expect compatibility if you use them
#define MB_TYPE_INTRA4x4 0x0001
More information about the ffmpeg-cvslog
mailing list