Mercurial > libavformat.hg
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; |