Mercurial > libavformat.hg
changeset 2325:2829faf72879 libavformat
write stream headers
author | michael |
---|---|
date | Thu, 09 Aug 2007 10:45:19 +0000 |
parents | 919efc8760a0 |
children | e05364bd370c |
files | nutenc.c |
diffstat | 1 files changed, 54 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/nutenc.c Thu Aug 09 01:12:48 2007 +0000 +++ b/nutenc.c Thu Aug 09 10:45:19 2007 +0000 @@ -251,6 +251,12 @@ nut->time_base[j]= nut->stream[i].time_base; if(j==nut->time_base_count) nut->time_base_count++; + + if(av_q2d(nut->stream[i].time_base) >= 0.001) + nut->stream[i].msb_pts_shift = 7; + else + nut->stream[i].msb_pts_shift = 14; + nut->stream[i].max_pts_distance= FFMAX(1/av_q2d(nut->stream[i].time_base), 1); } //FIXME make nut->stream[i].time_base pointers into nut->time_base @@ -320,9 +326,55 @@ update_packetheader(nut, bc, 0, 1); + for (i=0; i < s->nb_streams; i++){ + codec = s->streams[i]->codec; + + put_be64(bc, STREAM_STARTCODE); + put_packetheader(nut, bc, 120/*FIXME check*/ + codec->extradata_size, 1); + put_v(bc, i); + switch(codec->codec_type){ + case CODEC_TYPE_VIDEO: put_v(bc, 0); break; + case CODEC_TYPE_AUDIO: put_v(bc, 1); break; +// case CODEC_TYPE_TEXT : put_v(bc, 2); break; + default : put_v(bc, 3); break; + } + put_v(bc, 4); + if (codec->codec_tag){ + put_le32(bc, codec->codec_tag); + }else + return -1; + + put_v(bc, 0); //FIXME + put_v(bc, nut->stream[i].msb_pts_shift); + put_v(bc, nut->stream[i].max_pts_distance); + put_v(bc, codec->has_b_frames); + put_byte(bc, 0); /* flags: 0x1 - fixed_fps, 0x2 - index_present */ + + put_v(bc, codec->extradata_size); + put_buffer(bc, codec->extradata, codec->extradata_size); + + switch(codec->codec_type){ + case CODEC_TYPE_AUDIO: + put_v(bc, codec->sample_rate); + put_v(bc, 1); + put_v(bc, codec->channels); + break; + case CODEC_TYPE_VIDEO: + put_v(bc, codec->width); + put_v(bc, codec->height); + put_v(bc, codec->sample_aspect_ratio.num); + put_v(bc, codec->sample_aspect_ratio.den); + put_v(bc, 0); /* csp type -- unknown */ + break; + default: + break; + } + update_packetheader(nut, bc, 0, 1); + } + put_flush_packet(bc); - //FIXME stream header, ... + //FIXME info header, header repeation, header packet CRC, ... return 0; } @@ -350,4 +402,5 @@ write_packet, // write_trailer, .flags = AVFMT_GLOBALHEADER, + .codec_tag= (const AVCodecTag*[]){codec_bmp_tags, codec_wav_tags, 0}, };