Mercurial > libavformat.hg
comparison avienc.c @ 873:7af647503b67 libavformat
Support for streaming: dont write indexes and dont signal HAS_INDEX in header. Also set filesize to max in this case.
author | alex |
---|---|
date | Sun, 13 Nov 2005 03:32:12 +0000 |
parents | 227caa55d8ea |
children | 476666be9b89 |
comparison
equal
deleted
inserted
replaced
872:441c59f95305 | 873:7af647503b67 |
---|---|
355 } else { | 355 } else { |
356 put_le32(pb, 0); | 356 put_le32(pb, 0); |
357 } | 357 } |
358 put_le32(pb, bitrate / 8); /* XXX: not quite exact */ | 358 put_le32(pb, bitrate / 8); /* XXX: not quite exact */ |
359 put_le32(pb, 0); /* padding */ | 359 put_le32(pb, 0); /* padding */ |
360 put_le32(pb, AVIF_TRUSTCKTYPE | AVIF_HASINDEX | AVIF_ISINTERLEAVED); /* flags */ | 360 if (url_is_streamed(pb)) |
361 put_le32(pb, AVIF_TRUSTCKTYPE | AVIF_ISINTERLEAVED); /* flags */ | |
362 else | |
363 put_le32(pb, AVIF_TRUSTCKTYPE | AVIF_HASINDEX | AVIF_ISINTERLEAVED); /* flags */ | |
361 avi->frames_hdr_all = url_ftell(pb); /* remember this offset to fill later */ | 364 avi->frames_hdr_all = url_ftell(pb); /* remember this offset to fill later */ |
362 put_le32(pb, nb_frames); /* nb frames, filled later */ | 365 put_le32(pb, nb_frames); /* nb frames, filled later */ |
363 put_le32(pb, 0); /* initial frame */ | 366 put_le32(pb, 0); /* initial frame */ |
364 put_le32(pb, s->nb_streams); /* nb streams */ | 367 put_le32(pb, s->nb_streams); /* nb streams */ |
365 put_le32(pb, 1024 * 1024); /* suggested buffer size */ | 368 put_le32(pb, 1024 * 1024); /* suggested buffer size */ |
410 put_le32(pb, au_byterate); /* rate */ | 413 put_le32(pb, au_byterate); /* rate */ |
411 av_set_pts_info(s->streams[i], 64, au_scale, au_byterate); | 414 av_set_pts_info(s->streams[i], 64, au_scale, au_byterate); |
412 | 415 |
413 put_le32(pb, 0); /* start */ | 416 put_le32(pb, 0); /* start */ |
414 avi->frames_hdr_strm[i] = url_ftell(pb); /* remember this offset to fill later */ | 417 avi->frames_hdr_strm[i] = url_ftell(pb); /* remember this offset to fill later */ |
415 put_le32(pb, 0); /* length, XXX: filled later */ | 418 if (url_is_streamed(pb)) |
419 put_le32(pb, AVI_MAX_RIFF_SIZE); /* FIXME: this may be broken, but who cares */ | |
420 else | |
421 put_le32(pb, 0); /* length, XXX: filled later */ | |
416 | 422 |
417 /* suggested buffer size */ //FIXME set at the end to largest chunk | 423 /* suggested buffer size */ //FIXME set at the end to largest chunk |
418 if(stream->codec_type == CODEC_TYPE_VIDEO) | 424 if(stream->codec_type == CODEC_TYPE_VIDEO) |
419 put_le32(pb, 1024 * 1024); | 425 put_le32(pb, 1024 * 1024); |
420 else if(stream->codec_type == CODEC_TYPE_AUDIO) | 426 else if(stream->codec_type == CODEC_TYPE_AUDIO) |
500 AVIContext *avi = s->priv_data; | 506 AVIContext *avi = s->priv_data; |
501 unsigned char tag[5]; | 507 unsigned char tag[5]; |
502 unsigned char ix_tag[] = "ix00"; | 508 unsigned char ix_tag[] = "ix00"; |
503 int i, j; | 509 int i, j; |
504 | 510 |
511 if (url_is_streamed(pb)) | |
512 return -1; | |
513 | |
505 if (avi->riff_id > AVI_MASTER_INDEX_SIZE) | 514 if (avi->riff_id > AVI_MASTER_INDEX_SIZE) |
506 return -1; | 515 return -1; |
507 | 516 |
508 for (i=0;i<s->nb_streams;i++) { | 517 for (i=0;i<s->nb_streams;i++) { |
509 offset_t ix, pos; | 518 offset_t ix, pos; |
636 avi_write_packet(s, &empty_packet); | 645 avi_write_packet(s, &empty_packet); |
637 // av_log(s, AV_LOG_DEBUG, "dup %lld %d\n", pkt->dts, avi->packet_count[stream_index]); | 646 // av_log(s, AV_LOG_DEBUG, "dup %lld %d\n", pkt->dts, avi->packet_count[stream_index]); |
638 } | 647 } |
639 avi->packet_count[stream_index]++; | 648 avi->packet_count[stream_index]++; |
640 | 649 |
641 if (url_ftell(pb) - avi->riff_start > AVI_MAX_RIFF_SIZE) { | 650 // Make sure to put an OpenDML chunk when the file size exceeds the limits |
651 if (!url_is_streamed(pb) && | |
652 (url_ftell(pb) - avi->riff_start > AVI_MAX_RIFF_SIZE)) { | |
653 | |
642 avi_write_ix(s); | 654 avi_write_ix(s); |
643 end_tag(pb, avi->movi_list); | 655 end_tag(pb, avi->movi_list); |
644 | 656 |
645 if (avi->riff_id == 1) | 657 if (avi->riff_id == 1) |
646 avi_write_idx1(s); | 658 avi_write_idx1(s); |
692 ByteIOContext *pb = &s->pb; | 704 ByteIOContext *pb = &s->pb; |
693 int res = 0; | 705 int res = 0; |
694 int i, j, n, nb_frames; | 706 int i, j, n, nb_frames; |
695 offset_t file_size; | 707 offset_t file_size; |
696 | 708 |
709 if (!url_is_streamed(pb)) | |
710 { | |
697 if (avi->riff_id == 1) { | 711 if (avi->riff_id == 1) { |
698 end_tag(pb, avi->movi_list); | 712 end_tag(pb, avi->movi_list); |
699 res = avi_write_idx1(s); | 713 res = avi_write_idx1(s); |
700 end_tag(pb, avi->riff_start); | 714 end_tag(pb, avi->riff_start); |
701 } else { | 715 } else { |
720 } | 734 } |
721 } | 735 } |
722 put_le32(pb, nb_frames); | 736 put_le32(pb, nb_frames); |
723 url_fseek(pb, file_size, SEEK_SET); | 737 url_fseek(pb, file_size, SEEK_SET); |
724 } | 738 } |
739 } | |
725 put_flush_packet(pb); | 740 put_flush_packet(pb); |
726 | 741 |
727 for (i=0; i<MAX_STREAMS; i++) { | 742 for (i=0; i<MAX_STREAMS; i++) { |
728 for (j=0; j<avi->indexes[i].ents_allocated/AVI_INDEX_CLUSTER_SIZE; j++) | 743 for (j=0; j<avi->indexes[i].ents_allocated/AVI_INDEX_CLUSTER_SIZE; j++) |
729 av_free(avi->indexes[i].cluster[j]); | 744 av_free(avi->indexes[i].cluster[j]); |