diff options
Diffstat (limited to 'contrib/ffmpeg/A03-mp4-track-title.patch')
-rw-r--r-- | contrib/ffmpeg/A03-mp4-track-title.patch | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/contrib/ffmpeg/A03-mp4-track-title.patch b/contrib/ffmpeg/A03-mp4-track-title.patch deleted file mode 100644 index 25ad12cb6..000000000 --- a/contrib/ffmpeg/A03-mp4-track-title.patch +++ /dev/null @@ -1,133 +0,0 @@ -diff --git a/libavformat/movenc.c b/libavformat/movenc.c -index 0c688f6..f89b630 100644 ---- a/libavformat/movenc.c -+++ b/libavformat/movenc.c -@@ -76,6 +76,17 @@ static const AVClass flavor ## _muxer_class = {\ - .version = LIBAVUTIL_VERSION_INT,\ - }; - -+static int utf8len(const uint8_t *b) -+{ -+ int len = 0; -+ int val; -+ while (*b) { -+ GET_UTF8(val, *b++, return -1;) -+ len++; -+ } -+ return len; -+} -+ - //FIXME support 64 bit variant with wide placeholders - static int64_t update_size(AVIOContext *pb, int64_t pos) - { -@@ -1325,6 +1336,15 @@ static int mov_write_hdlr_tag(AVIOContext *pb, MOVTrack *track) - "Unknown hldr_type for %s / 0x%04X, writing dummy values\n", - tag_buf, track->enc->codec_tag); - } -+ if (track->st) { -+ // hdlr.name is used by some players to identify the content title -+ // of the track. So if an alternate handler description is -+ // specified, use it. -+ AVDictionaryEntry *t; -+ t = av_dict_get(track->st->metadata, "handler", NULL, 0); -+ if (t && utf8len(t->value)) -+ descr = t->value; -+ } - } - - avio_wb32(pb, 0); /* size */ -@@ -1623,6 +1643,47 @@ static int mov_write_udta_sdp(AVIOContext *pb, MOVTrack *track) - return len + 24; - } - -+static int mov_write_track_metadata(AVIOContext *pb, AVStream *st, -+ const char *tag, const char *str) -+{ -+ int64_t pos = avio_tell(pb); -+ AVDictionaryEntry *t = av_dict_get(st->metadata, str, NULL, 0); -+ if (!t || !utf8len(t->value)) -+ return 0; -+ -+ avio_wb32(pb, 0); /* size */ -+ ffio_wfourcc(pb, tag); /* type */ -+ avio_write(pb, t->value, strlen(t->value)); /* UTF8 string value */ -+ return update_size(pb, pos); -+} -+ -+static int mov_write_track_udta_tag(AVIOContext *pb, MOVMuxContext *mov, -+ AVStream *st) -+{ -+ AVIOContext *pb_buf; -+ int ret, size; -+ uint8_t *buf; -+ -+ if (st == NULL) -+ return 0; -+ -+ ret = avio_open_dyn_buf(&pb_buf); -+ if (ret < 0) -+ return ret; -+ -+ if (mov->mode & MODE_MP4) -+ mov_write_track_metadata(pb_buf, st, "name", "title"); -+ -+ if ((size = avio_close_dyn_buf(pb_buf, &buf)) > 0) { -+ avio_wb32(pb, size + 8); -+ ffio_wfourcc(pb, "udta"); -+ avio_write(pb, buf, size); -+ } -+ av_free(buf); -+ -+ return 0; -+} -+ - static int mov_write_trak_tag(AVIOContext *pb, MOVMuxContext *mov, - MOVTrack *track, AVStream *st) - { -@@ -1647,6 +1708,7 @@ static int mov_write_trak_tag(AVIOContext *pb, MOVMuxContext *mov, - if (0.0 != sample_aspect_ratio && 1.0 != sample_aspect_ratio) - mov_write_tapt_tag(pb, track); - } -+ mov_write_track_udta_tag(pb, mov, st); - return update_size(pb, pos); - } - -@@ -1904,17 +1966,6 @@ static int mov_write_meta_tag(AVIOContext *pb, MOVMuxContext *mov, - return size; - } - --static int utf8len(const uint8_t *b) --{ -- int len = 0; -- int val; -- while (*b) { -- GET_UTF8(val, *b++, return -1;) -- len++; -- } -- return len; --} -- - static int ascii_to_wc(AVIOContext *pb, const uint8_t *b) - { - int val; -@@ -3266,6 +3317,7 @@ static int mov_write_header(AVFormatContext *s) - MOVTrack *track= &mov->tracks[i]; - AVDictionaryEntry *lang = av_dict_get(st->metadata, "language", NULL,0); - -+ track->st = st; - track->enc = st->codec; - track->language = ff_mov_iso639_to_lang(lang?lang->value:"und", mov->mode!=MODE_MOV); - if (track->language < 0) -diff --git a/libavformat/movenc.h b/libavformat/movenc.h -index 226a28f..687299e 100644 ---- a/libavformat/movenc.h -+++ b/libavformat/movenc.h -@@ -133,6 +133,8 @@ typedef struct MOVTrack { - int packet_entry; - int slices; - } vc1_info; -+ -+ AVStream *st; - } MOVTrack; - - typedef struct MOVMuxContext { |