[FFmpeg-devel] [PATCH] libavf/avienc: store language metadata for XSUB streams
Erik Olofsson
eaj.olofsson at gmail.com
Sat Nov 9 16:57:39 CET 2013
Formatted in such a way that DivX certified players can decode it.
Verified on Sony Playstation 3 and Philips DVP3380.
Fixes ticket 2385
Signed-off-by: Erik Olofsson <eaj.olofsson at gmail.com>
---
libavformat/avienc.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index 27db3f1..0e43920 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -26,6 +26,8 @@
#include "avi.h"
#include "avio_internal.h"
#include "riff.h"
+#include "libavformat/avlanguage.h"
+#include "libavutil/avstring.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/dict.h"
#include "libavutil/avassert.h"
@@ -152,6 +154,8 @@ static int avi_write_header(AVFormatContext *s)
AVCodecContext *stream, *video_enc;
int64_t list1, list2, strh, strf;
AVDictionaryEntry *t = NULL;
+ char* str;
+ const char* langstr;
if (s->nb_streams > AVI_MAX_STREAM_COUNT) {
av_log(s, AV_LOG_ERROR, "AVI does not support >%d streams\n",
@@ -309,6 +313,16 @@ static int avi_write_header(AVFormatContext *s)
ff_riff_write_info_tag(s->pb, "strn", t->value);
t = NULL;
}
+ if(stream->codec_id == AV_CODEC_ID_XSUB
+ && (t = av_dict_get(s->streams[i]->metadata, "language", NULL, 0))) {
+ langstr = av_convert_lang_to(t->value, AV_LANG_ISO639_1);
+ t = NULL;
+ if (langstr) {
+ str = av_asprintf("Subtitle - %s-xx;02", langstr);
+ ff_riff_write_info_tag(s->pb, "strn", str);
+ av_free(str);
+ }
+ }
}
if (pb->seekable) {
--
1.8.3.1
More information about the ffmpeg-devel
mailing list