Revision 0809b51e
libavformat/nutenc.c | ||
---|---|---|
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 | 326 |
static int write_header(AVFormatContext *s){ |
285 | 327 |
NUTContext *nut = s->priv_data; |
286 | 328 |
ByteIOContext *bc = &s->pb; |
... | ... | |
334 | 376 |
|
335 | 377 |
put_be64(bc, STREAM_STARTCODE); |
336 | 378 |
put_packetheader(nut, bc, 120/*FIXME check*/ + codec->extradata_size, 1); |
337 |
put_v(bc, 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 |
} |
|
379 |
write_streamheader(nut, bc, codec, i); |
|
375 | 380 |
update_packetheader(nut, bc, 0, 1); |
376 | 381 |
} |
377 | 382 |
|
Also available in: Unified diff