Mercurial > libavformat.hg
changeset 2330:c25f63f009a8 libavformat
move stream header writing into its own function
author | michael |
---|---|
date | Thu, 09 Aug 2007 12:25:58 +0000 |
parents | 57a352c5b051 |
children | 4d1a56112d92 |
files | nutenc.c |
diffstat | 1 files changed, 43 insertions(+), 38 deletions(-) [+] |
line wrap: on
line diff
--- a/nutenc.c Thu Aug 09 12:22:02 2007 +0000 +++ b/nutenc.c Thu Aug 09 12:25:58 2007 +0000 @@ -281,6 +281,48 @@ } } +static int write_streamheader(NUTContext *nut, ByteIOContext *bc, AVCodecContext *codec, int i){ + 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, (nut->stream[i].time_base - nut->time_base)/sizeof(AVRational)); + 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; + } + return 0; +} + static int write_header(AVFormatContext *s){ NUTContext *nut = s->priv_data; ByteIOContext *bc = &s->pb; @@ -334,44 +376,7 @@ 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, (nut->stream[i].time_base - nut->time_base)/sizeof(AVRational)); - 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; - } + write_streamheader(nut, bc, codec, i); update_packetheader(nut, bc, 0, 1); }