Mercurial > libavformat.hg
comparison nutenc.c @ 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 |
comparison
equal
deleted
inserted
replaced
2329:57a352c5b051 | 2330:c25f63f009a8 |
---|---|
279 if(tmp_fields>4) put_v(bc, 0 /*tmp_res*/); | 279 if(tmp_fields>4) put_v(bc, 0 /*tmp_res*/); |
280 if(tmp_fields>5) put_v(bc, j); | 280 if(tmp_fields>5) put_v(bc, j); |
281 } | 281 } |
282 } | 282 } |
283 | 283 |
284 static int write_streamheader(NUTContext *nut, ByteIOContext *bc, AVCodecContext *codec, int i){ | |
285 put_v(bc, i); | |
286 switch(codec->codec_type){ | |
287 case CODEC_TYPE_VIDEO: put_v(bc, 0); break; | |
288 case CODEC_TYPE_AUDIO: put_v(bc, 1); break; | |
289 // case CODEC_TYPE_TEXT : put_v(bc, 2); break; | |
290 default : put_v(bc, 3); break; | |
291 } | |
292 put_v(bc, 4); | |
293 if (codec->codec_tag){ | |
294 put_le32(bc, codec->codec_tag); | |
295 }else | |
296 return -1; | |
297 | |
298 put_v(bc, (nut->stream[i].time_base - nut->time_base)/sizeof(AVRational)); | |
299 put_v(bc, nut->stream[i].msb_pts_shift); | |
300 put_v(bc, nut->stream[i].max_pts_distance); | |
301 put_v(bc, codec->has_b_frames); | |
302 put_byte(bc, 0); /* flags: 0x1 - fixed_fps, 0x2 - index_present */ | |
303 | |
304 put_v(bc, codec->extradata_size); | |
305 put_buffer(bc, codec->extradata, codec->extradata_size); | |
306 | |
307 switch(codec->codec_type){ | |
308 case CODEC_TYPE_AUDIO: | |
309 put_v(bc, codec->sample_rate); | |
310 put_v(bc, 1); | |
311 put_v(bc, codec->channels); | |
312 break; | |
313 case CODEC_TYPE_VIDEO: | |
314 put_v(bc, codec->width); | |
315 put_v(bc, codec->height); | |
316 put_v(bc, codec->sample_aspect_ratio.num); | |
317 put_v(bc, codec->sample_aspect_ratio.den); | |
318 put_v(bc, 0); /* csp type -- unknown */ | |
319 break; | |
320 default: | |
321 break; | |
322 } | |
323 return 0; | |
324 } | |
325 | |
284 static int write_header(AVFormatContext *s){ | 326 static int write_header(AVFormatContext *s){ |
285 NUTContext *nut = s->priv_data; | 327 NUTContext *nut = s->priv_data; |
286 ByteIOContext *bc = &s->pb; | 328 ByteIOContext *bc = &s->pb; |
287 AVCodecContext *codec; | 329 AVCodecContext *codec; |
288 int i, j; | 330 int i, j; |
332 for (i=0; i < s->nb_streams; i++){ | 374 for (i=0; i < s->nb_streams; i++){ |
333 codec = s->streams[i]->codec; | 375 codec = s->streams[i]->codec; |
334 | 376 |
335 put_be64(bc, STREAM_STARTCODE); | 377 put_be64(bc, STREAM_STARTCODE); |
336 put_packetheader(nut, bc, 120/*FIXME check*/ + codec->extradata_size, 1); | 378 put_packetheader(nut, bc, 120/*FIXME check*/ + codec->extradata_size, 1); |
337 put_v(bc, i); | 379 write_streamheader(nut, bc, codec, i); |
338 switch(codec->codec_type){ | |
339 case CODEC_TYPE_VIDEO: put_v(bc, 0); break; | |
340 case CODEC_TYPE_AUDIO: put_v(bc, 1); break; | |
341 // case CODEC_TYPE_TEXT : put_v(bc, 2); break; | |
342 default : put_v(bc, 3); break; | |
343 } | |
344 put_v(bc, 4); | |
345 if (codec->codec_tag){ | |
346 put_le32(bc, codec->codec_tag); | |
347 }else | |
348 return -1; | |
349 | |
350 put_v(bc, (nut->stream[i].time_base - nut->time_base)/sizeof(AVRational)); | |
351 put_v(bc, nut->stream[i].msb_pts_shift); | |
352 put_v(bc, nut->stream[i].max_pts_distance); | |
353 put_v(bc, codec->has_b_frames); | |
354 put_byte(bc, 0); /* flags: 0x1 - fixed_fps, 0x2 - index_present */ | |
355 | |
356 put_v(bc, codec->extradata_size); | |
357 put_buffer(bc, codec->extradata, codec->extradata_size); | |
358 | |
359 switch(codec->codec_type){ | |
360 case CODEC_TYPE_AUDIO: | |
361 put_v(bc, codec->sample_rate); | |
362 put_v(bc, 1); | |
363 put_v(bc, codec->channels); | |
364 break; | |
365 case CODEC_TYPE_VIDEO: | |
366 put_v(bc, codec->width); | |
367 put_v(bc, codec->height); | |
368 put_v(bc, codec->sample_aspect_ratio.num); | |
369 put_v(bc, codec->sample_aspect_ratio.den); | |
370 put_v(bc, 0); /* csp type -- unknown */ | |
371 break; | |
372 default: | |
373 break; | |
374 } | |
375 update_packetheader(nut, bc, 0, 1); | 380 update_packetheader(nut, bc, 0, 1); |
376 } | 381 } |
377 | 382 |
378 put_flush_packet(bc); | 383 put_flush_packet(bc); |
379 | 384 |