[Ffmpeg-cvslog] r7110 - trunk/libavformat/avidec.c
michael
subversion
Fri Nov 17 00:36:55 CET 2006
Author: michael
Date: Fri Nov 17 00:36:54 2006
New Revision: 7110
Modified:
trunk/libavformat/avidec.c
Log:
fix support for avis with sample_size > packet size
Modified: trunk/libavformat/avidec.c
==============================================================================
--- trunk/libavformat/avidec.c (original)
+++ trunk/libavformat/avidec.c Fri Nov 17 00:36:54 2006
@@ -145,10 +145,10 @@
if(last_pos == pos || pos == base - 8)
avi->non_interleaved= 1;
else
- av_add_index_entry(st, pos, ast->cum_len, len, 0, key ? AVINDEX_KEYFRAME : 0);
+ av_add_index_entry(st, pos, ast->cum_len / FFMAX(1, ast->sample_size), len, 0, key ? AVINDEX_KEYFRAME : 0);
if(ast->sample_size)
- ast->cum_len += len / ast->sample_size;
+ ast->cum_len += len;
else
ast->cum_len ++;
last_pos= pos;
@@ -355,6 +355,7 @@
get_le32(pb); /* buffer size */
get_le32(pb); /* quality */
ast->sample_size = get_le32(pb); /* sample ssize */
+ ast->cum_len *= FFMAX(1, ast->sample_size);
// av_log(NULL, AV_LOG_DEBUG, "%d %d %d %d\n", ast->rate, ast->scale, ast->start, ast->sample_size);
switch(tag1) {
@@ -378,7 +379,7 @@
av_log(s, AV_LOG_ERROR, "unknown stream type %X\n", tag1);
goto fail;
}
- ast->frame_offset= ast->cum_len * FFMAX(ast->sample_size, 1);
+ ast->frame_offset= ast->cum_len;
url_fskip(pb, size - 12 * 4);
break;
case MKTAG('s', 't', 'r', 'f'):
@@ -805,9 +806,9 @@
if(last_pos == pos)
avi->non_interleaved= 1;
else
- av_add_index_entry(st, pos, ast->cum_len, len, 0, (flags&AVIIF_INDEX) ? AVINDEX_KEYFRAME : 0);
+ av_add_index_entry(st, pos, ast->cum_len / FFMAX(1, ast->sample_size), len, 0, (flags&AVIIF_INDEX) ? AVINDEX_KEYFRAME : 0);
if(ast->sample_size)
- ast->cum_len += len / ast->sample_size;
+ ast->cum_len += len;
else
ast->cum_len ++;
last_pos= pos;
More information about the ffmpeg-cvslog
mailing list