#include "libavutil/opt.h"
#include "libavutil/dict.h"
#include "libavutil/avstring.h"
+#include "libavutil/avassert.h"
#include "avformat.h"
#include "internal.h"
#include "avi.h"
#include "dv.h"
#include "riff.h"
-#undef NDEBUG
-#include <assert.h>
-
typedef struct AVIStream {
int64_t frame_offset; /* current frame (video) or byte (audio) counter
(used to compute the pts) */
int remaining;
int packet_size;
- int scale;
- int rate;
+ uint32_t scale;
+ uint32_t rate;
int sample_size; /* size of one sample (or packet) (in the rate/scale sense) in bytes */
int64_t cum_len; /* temporary storage (used during seek) */
};
static const AVClass demuxer_class = {
- "AVI demuxer",
- av_default_item_name,
- options,
- LIBAVUTIL_VERSION_INT,
+ .class_name = "avi",
+ .item_name = av_default_item_name,
+ .option = options,
+ .version = LIBAVUTIL_VERSION_INT,
+ .category = AV_CLASS_CATEGORY_DEMUXER,
};
break;
}
- assert(stream_index < s->nb_streams);
+ av_assert0(stream_index < s->nb_streams);
st->codec->stream_codec_tag= handler;
avio_rl32(pb); /* flags */
return AVERROR_EOF;
// av_log(s, AV_LOG_DEBUG, "pos=%"PRId64"\n", pos);
- assert(best_ast->remaining <= best_ast->packet_size);
+ av_assert0(best_ast->remaining <= best_ast->packet_size);
avi->stream_index= best_stream_index;
if(!best_ast->remaining)
if (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) {
AVIndexEntry *e;
int index;
- assert(st->index_entries);
+ av_assert0(st->index_entries);
index= av_index_search_timestamp(st, ast->frame_offset, 0);
e= &st->index_entries[index];
unsigned last_pos= -1;
unsigned last_idx= -1;
int64_t idx1_pos, first_packet_pos = 0, data_offset = 0;
+ int anykey = 0;
nb_index_entries = size / 16;
if (nb_index_entries <= 0)
}
ast->cum_len += get_duration(ast, len);
last_pos= pos;
+ anykey |= flags&AVIIF_INDEX;
+ }
+ if (!anykey) {
+ for (index = 0; index < s->nb_streams; index++) {
+ st = s->streams[index];
+ if (st->nb_index_entries)
+ st->index_entries[0].flags |= AVINDEX_KEYFRAME;
+ }
}
return 0;
}
avi_load_index(s);
avi->index_loaded |= 1;
}
- assert(stream_index>= 0);
+ av_assert0(stream_index>= 0);
st = s->streams[stream_index];
ast= st->priv_data;
/* One and only one real stream for DV in AVI, and it has video */
/* offsets. Calling with other stream indexes should have failed */
/* the av_index_search_timestamp call above. */
- assert(stream_index == 0);
+ av_assert0(stream_index == 0);
if(avio_seek(s->pb, pos, SEEK_SET) < 0)
return -1;
if (st2->nb_index_entries <= 0)
continue;
-// assert(st2->codec->block_align);
- assert((int64_t)st2->time_base.num*ast2->rate == (int64_t)st2->time_base.den*ast2->scale);
+// av_assert1(st2->codec->block_align);
+ av_assert0((int64_t)st2->time_base.num*ast2->rate == (int64_t)st2->time_base.den*ast2->scale);
index = av_index_search_timestamp(
st2,
av_rescale_q(timestamp, st->time_base, st2->time_base) * FFMAX(ast2->sample_size, 1),
AVInputFormat ff_avi_demuxer = {
.name = "avi",
- .long_name = NULL_IF_CONFIG_SMALL("AVI format"),
+ .long_name = NULL_IF_CONFIG_SMALL("AVI (Audio Video Interleaved)"),
.priv_data_size = sizeof(AVIContext),
.read_probe = avi_probe,
.read_header = avi_read_header,