Go to the documentation of this file.
   28 #include "config_components.h" 
   55 #define AVI_INDEX_CLUSTER_SIZE 16384 
   56 #define AVI_MASTER_INDEX_PREFIX_SIZE    (8+2+1+1+4+8+4+4) 
   57 #define AVI_MASTER_INDEX_ENTRY_SIZE     16   
   58 #define AVI_MASTER_INDEX_SIZE_DEFAULT   256  
  114     AVIStream *avist = 
s->streams[stream_index]->priv_data;
 
  162                                   const char *riff_tag, 
const char *list_tag)
 
  169     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  205     int n, au_byterate, au_ssize, au_scale, nb_frames = 0;
 
  210     for (n = 0; n < 
s->nb_streams; n++) {
 
  214         par = 
s->streams[n]->codecpar;
 
  241     unsigned char tag[5];
 
  263     int bitrate, n, 
i, nb_frames, au_byterate, au_ssize, au_scale;
 
  264     int64_t max_stream_duration = 0;
 
  267     int64_t list1, list2, strh, strf;
 
  279     for (n = 0; n < 
s->nb_streams; n++) {
 
  281         if (!
s->streams[n]->priv_data)
 
  295     for (n = 0; n < 
s->nb_streams; n++) {
 
  301             max_stream_duration = 
FFMAX(stream_duration, max_stream_duration);
 
  311         double duration_est, filesize_est;
 
  314         else if (max_stream_duration > 0)
 
  317             duration_est = 10 * 60 * 60; 
 
  318         filesize_est = duration_est * (
bitrate / 8) * 1.10; 
 
  321         av_log(
s, 
AV_LOG_DEBUG, 
"duration_est:%0.3f, filesize_est:%0.1fGiB, master_index_max_size:%d\n",
 
  354     for (
i = 0; 
i < n; 
i++) {
 
  399             && au_byterate > 1000LL*au_scale) {
 
  405             au_scale = au_byterate = 0;
 
  463                     av_log(
s, 
AV_LOG_ERROR, 
"%s rawvideo cannot be written to avi, output file will be unreadable\n",
 
  481                     "Invalid or not supported codec type '%s' found in the input\n",
 
  542                     start_line = (
i == 0) ? 0 : 1;
 
  544                     start_line = (
i == 0) ? 1 : 0;
 
  579     padding = 
s->metadata_header_padding;
 
  600     AVIStream *avist = 
s->streams[stream_index]->priv_data;
 
  602     int au_byterate, au_ssize, au_scale;
 
  615     if (
s->streams[stream_index]->codecpar->codec_type == 
AVMEDIA_TYPE_AUDIO && au_ssize > 0) {
 
  621         avio_wl32(pb, audio_segm_size / au_ssize);  
 
  633     char ix_tag[] = 
"ix00";
 
  638     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  653     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  678                           (ie->
flags & 0x10 ? 0 : 0x80000000));
 
  697         int empty, stream_id = -1;
 
  700         for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  701             avist        = 
s->streams[
i]->priv_data;
 
  707             for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  708                 avist = 
s->streams[
i]->priv_data;
 
  713                 if (empty || tie->pos < ie->
pos) {
 
  720                 avist = 
s->streams[stream_id]->priv_data;
 
  725                                   s->streams[stream_id]->codecpar->codec_type);
 
  744     AVIStream *avist    = 
s->streams[stream_index]->priv_data;
 
  783         AVIStream *avist = 
s->streams[stream_index]->priv_data;
 
  789             int expected_stride = ((par->
width * bpc + 31) >> 5)*4;
 
  791             if (reshuffle_ret < 0)
 
  792                 return reshuffle_ret;
 
  808                     for (
i = 0; 
i < pal_size; 
i++) {
 
  817                     unsigned char tag[5];
 
  819                     tag[2] = 
'p'; 
tag[3] = 
'c';
 
  837                     for (
i = 0; 
i < pal_size; 
i++) {
 
  861     unsigned char tag[5];
 
  862     unsigned int flags = 0;
 
  867     AVIStream *avist    = 
s->streams[stream_index]->priv_data;
 
  918     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  938             for (n = nb_frames = 0; n < 
s->nb_streams; n++) {
 
  943                     if (nb_frames < avist->packet_count)
 
  962                "consider re-muxing with 'reserve_index_space' option value >= %d\n",
 
  966     for (
i = 0; 
i < 
s->nb_streams; 
i++) {
 
  979     for (
int i = 0; 
i < 
s->nb_streams; 
i++) {
 
  990 #define OFFSET(x) offsetof(AVIContext, x) 
  991 #define ENC AV_OPT_FLAG_ENCODING_PARAM 
  993     { 
"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 },
 
  994     { 
"write_channel_mask", 
"write channel mask into wave format header", 
OFFSET(write_channel_mask), 
AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, 
ENC },
 
  995     { 
"flipped_raw_rgb", 
"Raw RGB bitmaps are stored bottom-up", 
OFFSET(flipped_raw_rgb), 
AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, 
ENC },
 
 1009     .mime_type      = 
"video/x-msvideo",
 
 1010     .extensions     = 
"avi",
 
  
int64_t strh_flags_offset
 
static const AVOption options[]
 
@ AV_LANG_ISO639_1
3-char terminological language codes as per ISO-IEC 639-2
 
static char * avi_stream2fourcc(char *tag, int index, enum AVMediaType type)
 
#define AV_LOG_WARNING
Something somehow does not look correct.
 
AVPixelFormat
Pixel format.
 
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
 
enum AVMediaType codec_type
General type of the encoded data.
 
static av_always_inline void ffio_wfourcc(AVIOContext *pb, const uint8_t *s)
 
This struct describes the properties of an encoded stream.
 
static int64_t avi_start_new_riff(AVFormatContext *s, AVIOContext *pb, const char *riff_tag, const char *list_tag)
 
#define AVI_MASTER_INDEX_SIZE_DEFAULT
 
void ff_put_bmp_header(AVIOContext *pb, AVCodecParameters *par, int for_asf, int ignore_extradata, int rgb_frame_is_flipped)
 
#define AV_TIME_BASE_Q
Internal time base represented as fractional value.
 
char * av_asprintf(const char *fmt,...)
 
static AVIIentry * avi_get_ientry(const AVIIndex *idx, int ent_id)
 
static void deinit(AVFormatContext *s)
 
void avio_wl64(AVIOContext *s, uint64_t val)
 
int64_t duration
Duration of this packet in AVStream->time_base units, 0 if unknown.
 
uint32_t codec_tag
Additional information about the codec (corresponds to the AVI FOURCC).
 
static int avi_write_counters(AVFormatContext *s, int riff_id)
 
#define AV_PKT_FLAG_KEY
The packet contains a keyframe.
 
void av_packet_free(AVPacket **pkt)
Free the packet, if the packet is reference counted, it will be unreferenced first.
 
int64_t audio_strm_offset
 
uint32_t palette[AVPALETTE_COUNT]
 
void avio_wl16(AVIOContext *s, unsigned int val)
 
static const AVClass avi_muxer_class
 
static av_always_inline int64_t avio_tell(AVIOContext *s)
ftell() equivalent for AVIOContext.
 
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
 
static int avi_add_ientry(AVFormatContext *s, int stream_index, char *tag, unsigned int flags, unsigned int size)
 
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
 
int64_t duration
Decoding: duration of the stream, in stream time base.
 
static int avi_write_trailer(AVFormatContext *s)
 
int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max)
Reduce a fraction.
 
int64_t ff_start_tag(AVIOContext *pb, const char *tag)
 
static __device__ float ceil(float a)
 
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
 
uint32_t old_palette[AVPALETTE_COUNT]
 
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
 
static int avi_write_header(AVFormatContext *s)
 
static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
 
static av_cold int avi_init(struct AVFormatContext *s)
 
#define AVI_MASTER_INDEX_PREFIX_SIZE
 
#define av_assert0(cond)
assert() equivalent, that is always enabled.
 
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
 
int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq)
Rescale a 64-bit integer by 2 rational numbers.
 
static enum AVPixelFormat pix_fmt
 
@ AVMEDIA_TYPE_DATA
Opaque data information usually continuous.
 
static int avi_write_idx1(AVFormatContext *s)
 
the definition of that something depends on the semantic of the filter The callback must examine the status of the filter s links and proceed accordingly The status of output links is stored in the status_in and status_out fields and tested by the then the processing requires a frame on this link and the filter is expected to make efforts in that direction The status of input links is stored by the fifo and status_out fields
 
#define av_realloc_f(p, o, n)
 
AVCodecParameters * codecpar
Codec parameters associated with this stream.
 
#define LIBAVUTIL_VERSION_INT
 
#define AVISF_VIDEO_PALCHANGES
 
Describe the class of an AVClass context structure.
 
AVRational time_base
This is the fundamental unit of time (in seconds) in terms of which frame timestamps are represented.
 
int ff_put_wav_header(AVFormatContext *s, AVIOContext *pb, AVCodecParameters *par, int flags)
Write WAVEFORMAT header structure.
 
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
 
static void update_odml_entry(AVFormatContext *s, int stream_index, int64_t ix, int size)
 
static int write_trailer(AVFormatContext *s1)
 
#define AVI_MAX_RIFF_SIZE
 
Rational number (pair of numerator and denominator).
 
const char * av_default_item_name(void *ptr)
Return the context name.
 
static void avi_deinit(AVFormatContext *s)
 
#define AVI_MAX_STREAM_COUNT
 
void avio_w8(AVIOContext *s, int b)
 
void ffio_fill(AVIOContext *s, int b, int64_t count)
 
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
 
enum AVPixelFormat avpriv_pix_fmt_find(enum PixelFormatTagLists list, unsigned fourcc)
 
void ff_riff_write_info_tag(AVIOContext *pb, const char *tag, const char *str)
Write a single RIFF info tag.
 
int seekable
A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
 
const char * ff_convert_lang_to(const char *lang, enum AVLangCodespace target_codespace)
Convert a language code to a target codespace.
 
#define AV_NOPTS_VALUE
Undefined timestamp value.
 
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
 
#define FF_PUT_WAV_HEADER_SKIP_CHANNELMASK
Tell ff_put_wav_header() to write an empty channel mask.
 
const AVOutputFormat ff_avi_muxer
 
AVRational sample_aspect_ratio
sample aspect ratio (0 if unknown)
 
int64_t dts
Decompression timestamp in AVStream->time_base units; the time at which the packet is decompressed.
 
void avio_write(AVIOContext *s, const unsigned char *buf, int size)
 
void avio_wb32(AVIOContext *s, unsigned int val)
 
void avio_wl32(AVIOContext *s, unsigned int val)
 
int flags
A combination of AV_PKT_FLAG values.
 
void ff_end_tag(AVIOContext *pb, int64_t start)
 
static int avi_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
 
@ AV_PIX_FMT_RGB555LE
packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
 
#define i(width, name, range_min, range_max)
 
#define AVI_MASTER_INDEX_ENTRY_SIZE
 
#define AV_TIME_BASE
Internal time base represented as integer.
 
int block_align
Audio only.
 
#define av_assert1(cond)
assert() equivalent, that does not lie in speed critical code.
 
int ff_get_packet_palette(AVFormatContext *s, AVPacket *pkt, int ret, uint32_t *palette)
Retrieves the palette from a packet, either from side data, or appended to the video data in the pack...
 
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
 
#define AVI_INDEX_CLUSTER_SIZE
 
enum AVFieldOrder field_order
Video only.
 
int ff_check_h264_startcode(AVFormatContext *s, const AVStream *st, const AVPacket *pkt)
Check presence of H264 startcode.
 
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
 
int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
fseek() equivalent for AVIOContext.
 
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
 
void ff_parse_specific_params(AVStream *st, int *au_rate, int *au_ssize, int *au_scale)
 
static void write_odml_master(AVFormatContext *s, int stream_index)
 
int master_odml_riff_id_base
 
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.
 
#define AVIO_SEEKABLE_NORMAL
Seeking works like for a local file.
 
void ff_riff_write_info(AVFormatContext *s)
Write all recognized RIFF tags from s->metadata.
 
AVRational av_mul_q(AVRational b, AVRational c)
Multiply two rationals.
 
int64_t avio_skip(AVIOContext *s, int64_t offset)
Skip given number of bytes forward.
 
int ff_reshuffle_raw_rgb(AVFormatContext *s, AVPacket **ppkt, AVCodecParameters *par, int expected_stride)
Reshuffles the lines to use the user specified stride.
 
int bits_per_coded_sample
The number of bits per sample in the codedwords.
 
AVPacket * pkt
Used to hold temporary packets for the generic demuxing code.
 
#define avpriv_request_sample(...)
 
enum AVCodecID codec_id
Specific type of the encoded data (the codec used).
 
This structure stores compressed data.
 
#define AVIF_ISINTERLEAVED
 
#define flags(name, subs,...)
 
int64_t bit_rate
The average bitrate of the encoded data (in bits per second).
 
#define av_ts2str(ts)
Convenience macro, the return value should be used only directly in function arguments but never stan...
 
#define MKTAG(a, b, c, d)
 
static int write_packet(AVFormatContext *s1, AVPacket *pkt)
 
static void write_header(FFV1Context *f)
 
int64_t audio_strm_length
 
const AVCodecTag *const ff_riff_codec_tags_list[]
 
static int write_skip_frames(AVFormatContext *s, int stream_index, int64_t dts)
 
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_pix_fmt_name(enum AVPixelFormat pix_fmt)
Return the short name for a pixel format, NULL in case pix_fmt is unknown.
 
int master_index_max_size
 
static int avi_write_ix(AVFormatContext *s)