Mercurial > libavformat.hg
comparison matroskaenc.c @ 2460:c13388c21c2d libavformat
Move writing a block to its own function
author | conrad |
---|---|
date | Wed, 05 Sep 2007 00:23:47 +0000 |
parents | 784c7327ef24 |
children | 3a1ecd4ad76d |
comparison
equal
deleted
inserted
replaced
2459:784c7327ef24 | 2460:c13388c21c2d |
---|---|
549 return -1; | 549 return -1; |
550 | 550 |
551 return 0; | 551 return 0; |
552 } | 552 } |
553 | 553 |
554 static void mkv_write_block(AVFormatContext *s, unsigned int blockid, AVPacket *pkt, int flags) | |
555 { | |
556 MatroskaMuxContext *mkv = s->priv_data; | |
557 ByteIOContext *pb = &s->pb; | |
558 | |
559 put_ebml_id(pb, blockid); | |
560 put_ebml_size(pb, pkt->size + 4, 0); | |
561 put_byte(pb, 0x80 | (pkt->stream_index + 1)); // this assumes stream_index is less than 126 | |
562 put_be16(pb, pkt->pts - mkv->cluster_pts); | |
563 put_byte(pb, flags); | |
564 put_buffer(pb, pkt->data, pkt->size); | |
565 } | |
566 | |
554 static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt) | 567 static int mkv_write_packet(AVFormatContext *s, AVPacket *pkt) |
555 { | 568 { |
556 MatroskaMuxContext *mkv = s->priv_data; | 569 MatroskaMuxContext *mkv = s->priv_data; |
557 ByteIOContext *pb = &s->pb; | 570 ByteIOContext *pb = &s->pb; |
558 int keyframe = !!(pkt->flags & PKT_FLAG_KEY); | 571 int keyframe = !!(pkt->flags & PKT_FLAG_KEY); |
568 mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER); | 581 mkv->cluster = start_ebml_master(pb, MATROSKA_ID_CLUSTER); |
569 put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, pkt->pts); | 582 put_ebml_uint(pb, MATROSKA_ID_CLUSTERTIMECODE, pkt->pts); |
570 mkv->cluster_pts = pkt->pts; | 583 mkv->cluster_pts = pkt->pts; |
571 } | 584 } |
572 | 585 |
573 put_ebml_id(pb, MATROSKA_ID_SIMPLEBLOCK); | 586 mkv_write_block(s, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe << 7); |
574 put_ebml_size(pb, pkt->size + 4, 0); | |
575 put_byte(pb, 0x80 | (pkt->stream_index + 1)); // this assumes stream_index is less than 126 | |
576 put_be16(pb, pkt->pts - mkv->cluster_pts); | |
577 put_byte(pb, keyframe << 7); | |
578 put_buffer(pb, pkt->data, pkt->size); | |
579 | 587 |
580 if (s->streams[pkt->stream_index]->codec->codec_type == CODEC_TYPE_VIDEO && keyframe) { | 588 if (s->streams[pkt->stream_index]->codec->codec_type == CODEC_TYPE_VIDEO && keyframe) { |
581 if (mkv_add_cuepoint(mkv->cues, pkt, mkv->cluster_pos) < 0) | 589 if (mkv_add_cuepoint(mkv->cues, pkt, mkv->cluster_pos) < 0) |
582 return -1; | 590 return -1; |
583 } | 591 } |