diff --git a/libavformat/matroskaenc.c b/libavformat/matroskaenc.c
index 3b525ad..f07851e 100644
|
a
|
b
|
static int mkv_write_tracks(AVFormatContext *s)
|
| 1047 | 1047 | ebml_master tracks; |
| 1048 | 1048 | int i, ret, default_stream_exists = 0; |
| 1049 | 1049 | |
| | 1050 | if (s->pb->seekable) { |
| 1050 | 1051 | ret = mkv_add_seekhead_entry(mkv->main_seekhead, MATROSKA_ID_TRACKS, avio_tell(pb)); |
| 1051 | 1052 | if (ret < 0) |
| 1052 | 1053 | return ret; |
| | 1054 | } |
| 1053 | 1055 | |
| 1054 | 1056 | tracks = start_ebml_master(pb, MATROSKA_ID_TRACKS, 0); |
| 1055 | 1057 | for (i = 0; i < s->nb_streams; i++) { |
| … |
… |
static int mkv_write_chapters(AVFormatContext *s)
|
| 1076 | 1078 | if (!s->nb_chapters || mkv->wrote_chapters) |
| 1077 | 1079 | return 0; |
| 1078 | 1080 | |
| | 1081 | if (s->pb->seekable) { |
| 1079 | 1082 | ret = mkv_add_seekhead_entry(mkv->main_seekhead, MATROSKA_ID_CHAPTERS, avio_tell(pb)); |
| 1080 | 1083 | if (ret < 0) return ret; |
| | 1084 | } |
| 1081 | 1085 | |
| 1082 | 1086 | chapters = start_ebml_master(pb, MATROSKA_ID_CHAPTERS , 0); |
| 1083 | 1087 | editionentry = start_ebml_master(pb, MATROSKA_ID_EDITIONENTRY, 0); |
| … |
… |
static int mkv_write_tag(AVFormatContext *s, AVDictionary *m, unsigned int eleme
|
| 1160 | 1164 | int ret; |
| 1161 | 1165 | |
| 1162 | 1166 | if (!tags->pos) { |
| | 1167 | if (s->pb->seekable) { |
| 1163 | 1168 | ret = mkv_add_seekhead_entry(mkv->main_seekhead, MATROSKA_ID_TAGS, avio_tell(s->pb)); |
| 1164 | 1169 | if (ret < 0) return ret; |
| | 1170 | } |
| 1165 | 1171 | |
| 1166 | 1172 | *tags = start_ebml_master(s->pb, MATROSKA_ID_TAGS, 0); |
| 1167 | 1173 | } |
| … |
… |
static int mkv_write_packet_internal(AVFormatContext *s, AVPacket *pkt, int add_
|
| 1772 | 1778 | |
| 1773 | 1779 | if (codec->codec_type != AVMEDIA_TYPE_SUBTITLE) { |
| 1774 | 1780 | mkv_write_block(s, pb, MATROSKA_ID_SIMPLEBLOCK, pkt, keyframe); |
| 1775 | | if (codec->codec_type == AVMEDIA_TYPE_VIDEO && keyframe || add_cue) { |
| | 1781 | if (s->pb->seekable && (codec->codec_type == AVMEDIA_TYPE_VIDEO && keyframe || add_cue)) { |
| 1776 | 1782 | ret = mkv_add_cuepoint(mkv->cues, pkt->stream_index, dash_tracknum, ts, mkv->cluster_pos, relative_packet_pos, -1); |
| 1777 | 1783 | if (ret < 0) return ret; |
| 1778 | 1784 | } |
| … |
… |
static int mkv_write_packet_internal(AVFormatContext *s, AVPacket *pkt, int add_
|
| 1792 | 1798 | end_ebml_master(pb, blockgroup); |
| 1793 | 1799 | } |
| 1794 | 1800 | |
| | 1801 | if (s->pb->seekable) { |
| 1795 | 1802 | ret = mkv_add_cuepoint(mkv->cues, pkt->stream_index, dash_tracknum, ts, |
| 1796 | 1803 | mkv->cluster_pos, relative_packet_pos, duration); |
| 1797 | 1804 | if (ret < 0) |
| 1798 | 1805 | return ret; |
| 1799 | 1806 | } |
| | 1807 | } |
| 1800 | 1808 | |
| 1801 | 1809 | mkv->duration = FFMAX(mkv->duration, ts + duration); |
| 1802 | 1810 | return 0; |