static int avi_write_counters(AVFormatContext* s, int riff_id)
{
- ByteIOContext *pb = &s->pb;
+ ByteIOContext *pb = s->pb;
AVIContext *avi = s->priv_data;
int n, au_byterate, au_ssize, au_scale, nb_frames = 0;
offset_t file_size;
static int avi_write_header(AVFormatContext *s)
{
AVIContext *avi = s->priv_data;
- ByteIOContext *pb = &s->pb;
+ ByteIOContext *pb = s->pb;
int bitrate, n, i, nb_frames, au_byterate, au_ssize, au_scale;
AVCodecContext *stream, *video_enc;
offset_t list1, list2, strh, strf;
stream = s->streams[i]->codec;
- /* FourCC should really be set by the codec itself */
- if (! stream->codec_tag) {
- stream->codec_tag = codec_get_bmp_tag(stream->codec_id);
- }
-
/* stream generic header */
strh = start_tag(pb, "strh");
switch(stream->codec_type) {
break;
case CODEC_TYPE_AUDIO:
if (put_wav_header(pb, stream) < 0) {
- av_free(avi);
return -1;
}
break;
end_tag(pb, avi->indexes[i].indx_start);
}
+ if( stream->codec_type == CODEC_TYPE_VIDEO
+ && s->streams[i]->sample_aspect_ratio.num>0
+ && s->streams[i]->sample_aspect_ratio.den>0){
+ int vprp= start_tag(pb, "vprp");
+ AVRational dar = av_mul_q(s->streams[i]->sample_aspect_ratio,
+ (AVRational){stream->width, stream->height});
+ int num, den;
+ av_reduce(&num, &den, dar.num, dar.den, 0xFFFF);
+
+ put_le32(pb, 0); //video format = unknown
+ put_le32(pb, 0); //video standard= unknown
+ put_le32(pb, lrintf(1.0/av_q2d(stream->time_base)));
+ put_le32(pb, stream->width );
+ put_le32(pb, stream->height);
+ put_le16(pb, den);
+ put_le16(pb, num);
+ put_le32(pb, stream->width );
+ put_le32(pb, stream->height);
+ put_le32(pb, 1); //progressive FIXME
+
+ put_le32(pb, stream->height);
+ put_le32(pb, stream->width );
+ put_le32(pb, stream->height);
+ put_le32(pb, stream->width );
+ put_le32(pb, 0);
+ put_le32(pb, 0);
+
+ put_le32(pb, 0);
+ put_le32(pb, 0);
+ end_tag(pb, vprp);
+ }
+
end_tag(pb, list2);
}
static int avi_write_ix(AVFormatContext *s)
{
- ByteIOContext *pb = &s->pb;
+ ByteIOContext *pb = s->pb;
AVIContext *avi = s->priv_data;
char tag[5];
char ix_tag[] = "ix00";
static int avi_write_idx1(AVFormatContext *s)
{
- ByteIOContext *pb = &s->pb;
+ ByteIOContext *pb = s->pb;
AVIContext *avi = s->priv_data;
offset_t idx_chunk;
int i;
static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
{
AVIContext *avi = s->priv_data;
- ByteIOContext *pb = &s->pb;
+ ByteIOContext *pb = s->pb;
unsigned char tag[5];
unsigned int flags=0;
const int stream_index= pkt->stream_index;
avi->audio_strm_length[stream_index] += size;
}
- if (!url_is_streamed(&s->pb)) {
+ if (!url_is_streamed(s->pb)) {
AVIIndex* idx = &avi->indexes[stream_index];
int cl = idx->entry / AVI_INDEX_CLUSTER_SIZE;
int id = idx->entry % AVI_INDEX_CLUSTER_SIZE;
static int avi_write_trailer(AVFormatContext *s)
{
AVIContext *avi = s->priv_data;
- ByteIOContext *pb = &s->pb;
+ ByteIOContext *pb = s->pb;
int res = 0;
int i, j, n, nb_frames;
offset_t file_size;
AVOutputFormat avi_muxer = {
"avi",
- "avi format",
+ NULL_IF_CONFIG_SMALL("AVI format"),
"video/x-msvideo",
"avi",
sizeof(AVIContext),
avi_write_header,
avi_write_packet,
avi_write_trailer,
- .codec_tag= (const AVCodecTag*[]){codec_bmp_tags, codec_wav_tags, 0},
+ .codec_tag= (const AVCodecTag* const []){codec_bmp_tags, codec_wav_tags, 0},
};
#endif //CONFIG_AVI_MUXER