diff options
author | Aurelien Jacobs <aurel@gnuage.org> | 2007-07-09 13:33:34 +0000 |
---|---|---|
committer | Aurelien Jacobs <aurel@gnuage.org> | 2007-07-09 13:33:34 +0000 |
commit | 463d5bcc29380dfa267ebd22b2843400bcd22a93 (patch) | |
tree | 3a9466cd48de60488e3a92b98b526a634c8079b7 | |
parent | 93f4823935581ea388f404887eb4d559f5745d4f (diff) | |
download | ffmpeg-463d5bcc29380dfa267ebd22b2843400bcd22a93.tar.gz |
properly set AVStream.language according to Matroska track header
Originally committed as revision 9557 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/matroskadec.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index fc447316e6..b1785294b6 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -44,7 +44,7 @@ typedef struct Track { int stream_index; char *name; - char *language; + char language[4]; char *codec_id; char *codec_name; @@ -994,6 +994,7 @@ matroska_add_stream (MatroskaDemuxContext *matroska) /* Allocate a generic track. As soon as we know its type we'll realloc. */ track = av_mallocz(MAX_TRACK_SIZE); matroska->num_tracks++; + strcpy(track->language, "eng"); /* start with the master */ if ((res = ebml_read_master(matroska, &id)) < 0) @@ -1353,10 +1354,14 @@ matroska_add_stream (MatroskaDemuxContext *matroska) /* language (matters for audio/subtitles, mostly) */ case MATROSKA_ID_TRACKLANGUAGE: { - char *text; + char *text, *end; if ((res = ebml_read_utf8(matroska, &id, &text)) < 0) break; - track->language = text; + if ((end = strchr(text, '-'))) + *end = '\0'; + if (strlen(text) == 3) + strcpy(track->language, text); + av_free(text); break; } @@ -2158,6 +2163,8 @@ matroska_read_header (AVFormatContext *s, st->codec->codec_id = codec_id; st->start_time = 0; + if (strcmp(track->language, "und")) + strcpy(st->language, track->language); if (track->default_duration) av_reduce(&st->codec->time_base.num, &st->codec->time_base.den, @@ -2702,7 +2709,6 @@ matroska_read_close (AVFormatContext *s) av_free(track->codec_name); av_free(track->codec_priv); av_free(track->name); - av_free(track->language); if (track->type == MATROSKA_TRACK_TYPE_AUDIO) { MatroskaAudioTrack *audiotrack = (MatroskaAudioTrack *)track; |