comparison matroskaenc.c @ 2463:f4c247d28e9d libavformat

Simplify
author conrad
date Wed, 05 Sep 2007 00:23:53 +0000
parents 2ffe818df0c6
children 84e8a36ab497
comparison
equal deleted inserted replaced
2462:2ffe818df0c6 2463:f4c247d28e9d
569 569
570 static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt) 570 static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt)
571 { 571 {
572 MatroskaMuxContext *mkv = s->priv_data; 572 MatroskaMuxContext *mkv = s->priv_data;
573 ByteIOContext *pb = &s->pb; 573 ByteIOContext *pb = &s->pb;
574 AVCodecContext *codec = s->streams[pkt->stream_index]->codec;
574 int keyframe = !!(pkt->flags & PKT_FLAG_KEY); 575 int keyframe = !!(pkt->flags & PKT_FLAG_KEY);
575 576
576 // start a new cluster every 5 MB or 5 sec 577 // start a new cluster every 5 MB or 5 sec
577 if (url_ftell(pb) > mkv->cluster + 5*1024*1024 || pkt->pts > mkv->cluster_pts + 5000) { 578 if (url_ftell(pb) > mkv->cluster + 5*1024*1024 || pkt->pts > mkv->cluster_pts + 5000) {
578 end_ebml_master(pb, mkv->cluster); 579 end_ebml_master(pb, mkv->cluster);
584 mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER); 585 mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER);
585 put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, pkt->pts); 586 put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, pkt->pts);
586 mkv->cluster_pts = pkt->pts; 587 mkv->cluster_pts = pkt->pts;
587 } 588 }
588 589
589 if (s->streams[pkt->stream_index]->codec->codec_type != CODEC_TYPE_SUBTITLE) { 590 if (codec->codec_type != CODEC_TYPE_SUBTITLE) {
590 mkv_write_block(s, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe << 7); 591 mkv_write_block(s, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe << 7);
591 } else { 592 } else {
592 offset_t blockgroup = start_ebml_master(pb, MATROSKA_ID_BLOCKGROUP); 593 offset_t blockgroup = start_ebml_master(pb, MATROSKA_ID_BLOCKGROUP);
593 mkv_write_block(s, MATROSKA_ID_BLOCK, pkt, 0); 594 mkv_write_block(s, MATROSKA_ID_BLOCK, pkt, 0);
594 put_ebml_uint(pb, MATROSKA_ID_DURATION, pkt->duration); 595 put_ebml_uint(pb, MATROSKA_ID_DURATION, pkt->duration);
595 end_ebml_master(pb, blockgroup); 596 end_ebml_master(pb, blockgroup);
596 } 597 }
597 598
598 if (s->streams[pkt->stream_index]->codec->codec_type == CODEC_TYPE_VIDEO && keyframe) { 599 if (codec->codec_type == CODEC_TYPE_VIDEO && keyframe) {
599 if (mkv_add_cuepoint(mkv->cues, pkt, mkv->cluster_pos) < 0) 600 if (mkv_add_cuepoint(mkv->cues, pkt, mkv->cluster_pos) < 0)
600 return -1; 601 return -1;
601 } 602 }
602 603
603 mkv->duration = pkt->pts + pkt->duration; 604 mkv->duration = pkt->pts + pkt->duration;