53 #define AVI_INDEX_CLUSTER_SIZE 16384
54 #define AVI_MASTER_INDEX_PREFIX_SIZE (8+2+1+1+4+8+4+4)
55 #define AVI_MASTER_INDEX_ENTRY_SIZE 16
56 #define AVI_MASTER_INDEX_SIZE_DEFAULT 256
112 AVIStream *avist =
s->streams[stream_index]->priv_data;
160 const char *riff_tag,
const char *list_tag)
167 for (
i = 0;
i <
s->nb_streams;
i++) {
203 int n, au_byterate, au_ssize, au_scale, nb_frames = 0;
208 for (n = 0; n <
s->nb_streams; n++) {
212 par =
s->streams[n]->codecpar;
239 unsigned char tag[5];
264 int bitrate, n,
i, nb_frames, au_byterate, au_ssize, au_scale;
265 int64_t max_stream_duration = 0;
268 int64_t list1, list2, strh, strf;
282 for (n = 0; n <
s->nb_streams; n++) {
284 if (!
s->streams[n]->priv_data)
298 for (n = 0; n <
s->nb_streams; n++) {
304 max_stream_duration =
FFMAX(stream_duration, max_stream_duration);
314 double duration_est, filesize_est;
317 else if (max_stream_duration > 0)
318 duration_est = (double)max_stream_duration /
AV_TIME_BASE;
320 duration_est = 10 * 60 * 60;
321 filesize_est = duration_est * (
bitrate / 8) * 1.10;
324 av_log(
s,
AV_LOG_DEBUG,
"duration_est:%0.3f, filesize_est:%0.1fGiB, master_index_max_size:%d\n",
360 for (
i = 0;
i < n;
i++) {
405 && au_byterate > 1000LL*au_scale) {
411 au_scale = au_byterate = 0;
465 av_log(
s,
AV_LOG_ERROR,
"%s rawvideo cannot be written to avi, output file will be unreadable\n",
483 "Invalid or not supported codec type '%s' found in the input\n",
517 int num, den, fields,
i;
538 for (
i = 0;
i < fields;
i++) {
544 start_line = (
i == 0) ? 0 : 1;
546 start_line = (
i == 0) ? 1 : 0;
572 for (
i = 0;
i < 248;
i += 4)
582 padding =
s->metadata_header_padding;
589 for (
i = padding;
i > 0;
i -= 4)
604 AVIStream *avist =
s->streams[stream_index]->priv_data;
606 int au_byterate, au_ssize, au_scale;
619 if (
s->streams[stream_index]->codecpar->codec_type ==
AVMEDIA_TYPE_AUDIO && au_ssize > 0) {
625 avio_wl32(pb, audio_segm_size / au_ssize);
637 char ix_tag[] =
"ix00";
642 for (
i = 0;
i <
s->nb_streams;
i++) {
657 for (
i = 0;
i <
s->nb_streams;
i++) {
682 (ie->
flags & 0x10 ? 0 : 0x80000000));
701 int empty, stream_id = -1;
704 for (
i = 0;
i <
s->nb_streams;
i++) {
705 avist =
s->streams[
i]->priv_data;
711 for (
i = 0;
i <
s->nb_streams;
i++) {
712 avist =
s->streams[
i]->priv_data;
717 if (empty || tie->pos < ie->
pos) {
724 avist =
s->streams[stream_id]->priv_data;
729 s->streams[stream_id]->codecpar->codec_type);
748 AVIStream *avist =
s->streams[stream_index]->priv_data;
787 AVIStream *avist =
s->streams[stream_index]->priv_data;
793 int expected_stride = ((par->
width * bpc + 31) >> 5)*4;
795 if (reshuffle_ret < 0)
796 return reshuffle_ret;
812 for (
i = 0;
i < pal_size;
i++) {
821 unsigned char tag[5];
823 tag[2] =
'p';
tag[3] =
'c';
841 for (
i = 0;
i < pal_size;
i++) {
865 unsigned char tag[5];
866 unsigned int flags = 0;
871 AVIStream *avist =
s->streams[stream_index]->priv_data;
922 for (
i = 0;
i <
s->nb_streams;
i++) {
942 for (n = nb_frames = 0; n <
s->nb_streams; n++) {
947 if (nb_frames < avist->packet_count)
966 "consider re-muxing with 'reserve_index_space' option value >= %d\n",
970 for (
i = 0;
i <
s->nb_streams;
i++) {
987 for (
int i = 0;
i <
s->nb_streams;
i++) {
998 #define OFFSET(x) offsetof(AVIContext, x)
999 #define ENC AV_OPT_FLAG_ENCODING_PARAM
1001 {
"reserve_index_space",
"reserve space (in bytes) at the beginning of the file for each stream index",
OFFSET(reserve_index_space),
AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX,
ENC },
1002 {
"write_channel_mask",
"write channel mask into wave format header",
OFFSET(write_channel_mask),
AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1,
ENC },
1003 {
"flipped_raw_rgb",
"Raw RGB bitmaps are stored bottom-up",
OFFSET(flipped_raw_rgb),
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1,
ENC },
1017 .mime_type =
"video/x-msvideo",
1018 .extensions =
"avi",
simple assert() macros that are a bit more flexible than ISO C assert().
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
#define av_assert0(cond)
assert() equivalent, that is always enabled.
#define AVISF_VIDEO_PALCHANGES
#define AVI_MAX_STREAM_COUNT
#define AVIF_ISINTERLEAVED
#define AVI_MAX_RIFF_SIZE
static void avi_deinit(AVFormatContext *s)
static const AVOption options[]
static int avi_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
static int64_t avi_start_new_riff(AVFormatContext *s, AVIOContext *pb, const char *riff_tag, const char *list_tag)
#define AVI_INDEX_CLUSTER_SIZE
static av_cold int avi_init(struct AVFormatContext *s)
static int avi_write_counters(AVFormatContext *s, int riff_id)
static AVIIentry * avi_get_ientry(const AVIIndex *idx, int ent_id)
static int write_skip_frames(AVFormatContext *s, int stream_index, int64_t dts)
static void update_odml_entry(AVFormatContext *s, int stream_index, int64_t ix, int size)
static int avi_write_ix(AVFormatContext *s)
static const AVClass avi_muxer_class
AVOutputFormat ff_avi_muxer
static int avi_write_trailer(AVFormatContext *s)
#define AVI_MASTER_INDEX_SIZE_DEFAULT
static int avi_add_ientry(AVFormatContext *s, int stream_index, char *tag, unsigned int flags, unsigned int size)
#define AVI_MASTER_INDEX_ENTRY_SIZE
static int avi_write_idx1(AVFormatContext *s)
static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
static char * avi_stream2fourcc(char *tag, int index, enum AVMediaType type)
static int avi_write_header(AVFormatContext *s)
#define AVI_MASTER_INDEX_PREFIX_SIZE
static void write_odml_master(AVFormatContext *s, int stream_index)
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
void avio_wl64(AVIOContext *s, uint64_t val)
void avio_wl32(AVIOContext *s, unsigned int val)
void avio_wl16(AVIOContext *s, unsigned int val)
void avio_w8(AVIOContext *s, int b)
void avio_wb32(AVIOContext *s, unsigned int val)
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
static av_always_inline void ffio_wfourcc(AVIOContext *pb, const uint8_t *s)
const char * ff_convert_lang_to(const char *lang, enum AVLangCodespace target_codespace)
Convert a language code to a target codespace.
@ AV_LANG_ISO639_1
3-char terminological language codes as per ISO-IEC 639-2
static av_cold int init(AVCodecContext *avctx)
char * av_asprintf(const char *fmt,...)
Convenience header that includes libavutil's core.
#define flags(name, subs,...)
#define MKTAG(a, b, c, d)
#define CONFIG_LIBMP3LAME
static __device__ float ceil(float a)
static enum AVPixelFormat pix_fmt
static void write_packet(OutputFile *of, AVPacket *pkt, OutputStream *ost, int unqueue)
static void write_header(FFV1Context *f)
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
AVPacket * av_packet_alloc(void)
Allocate an AVPacket and set its fields to default values.
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
const char * av_default_item_name(void *ptr)
Return the context name.
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
static void * av_x_if_null(const void *p, const void *x)
Return x default pointer in case p is NULL.
const char * av_get_media_type_string(enum AVMediaType media_type)
Return a string describing the media_type enum, NULL if media_type is unknown.
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
#define AV_NOPTS_VALUE
Undefined timestamp value.
#define AV_TIME_BASE
Internal time base represented as integer.
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
#define LIBAVUTIL_VERSION_INT
common internal API header
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
int ff_check_h264_startcode(AVFormatContext *s, const AVStream *st, const AVPacket *pkt)
Check presence of H264 startcode.
const char * av_get_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
AVPixelFormat
Pixel format.
@ AV_PIX_FMT_RGB555LE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
const PixelFormatTag avpriv_pix_fmt_bps_avi[]
enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, unsigned int fourcc)
internal header for RIFF based (de)muxers do NOT include this in end user applications
void ff_end_tag(AVIOContext *pb, int64_t start)
void ff_riff_write_info_tag(AVIOContext *pb, const char *tag, const char *str)
Write a single RIFF info tag.
void ff_riff_write_info(AVFormatContext *s)
Write all recognized RIFF tags from s->metadata.
void ff_put_bmp_header(AVIOContext *pb, AVCodecParameters *par, int for_asf, int ignore_extradata, int rgb_frame_is_flipped)
int64_t ff_start_tag(AVIOContext *pb, const char *tag)
void ff_parse_specific_params(AVStream *st, int *au_rate, int *au_ssize, int *au_scale)
int ff_put_wav_header(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, int flags)
Write WAVEFORMAT header structure.
#define FF_PUT_WAV_HEADER_SKIP_CHANNELMASK
Tell ff_put_wav_header() to write an empty channel mask.
const AVCodecTag *const ff_riff_codec_tags_list[]
Describe the class of an AVClass context structure.
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
This struct describes the properties of an encoded stream.
enum AVFieldOrder field_order
Video only.
int bits_per_coded_sample
The number of bits per sample in the codedwords.
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
enum AVMediaType codec_type
General type of the encoded data.
int block_align
Audio only.
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
int master_index_max_size
int master_odml_riff_id_base
int64_t audio_strm_offset
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
int64_t audio_strm_length
int64_t strh_flags_offset
uint32_t old_palette[AVPALETTE_COUNT]
uint32_t palette[AVPALETTE_COUNT]
This structure stores compressed data.
int flags
A combination of AV_PKT_FLAG values.
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
Rational number (pair of numerator and denominator).
AVCodecParameters * codecpar
Codec parameters associated with this stream.
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
int64_t duration
Decoding: duration of the stream, in stream time base.
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
#define av_realloc_f(p, o, n)
#define avpriv_request_sample(...)
timestamp utils, mostly useful for debugging/logging purposes
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
static int write_trailer(AVFormatContext *s1)