Added automatic conversion of language index codes in the VobSub reader.

This commit is contained in:
Moritz Bunkus 2003-09-22 13:14:30 +00:00
parent 36fed2d646
commit 07f4ac6132
3 changed files with 38 additions and 7 deletions

View File

@ -24,7 +24,7 @@
#include "common.h"
#include "iso639.h"
iso639_language_t iso639_languages[] =
const iso639_language_t iso639_languages[] =
{{"Abkhazian", "abk", "ab"},
{"Achinese", "ace", NULL},
{"Acoli", "ach", NULL},
@ -535,7 +535,7 @@ iso639_language_t iso639_languages[] =
{"Zuni", "zun", NULL},
{NULL, NULL, NULL}};
char *get_iso639_english_name(const char *iso639_2_code) {
const char *get_iso639_english_name(const char *iso639_2_code) {
int i;
i = 0;
@ -579,3 +579,24 @@ void list_iso639_languages() {
i++;
}
}
const char *map_iso639_1_to_iso639_2(const char *iso639_1_code) {
uint32_t i;
for (i = 0; iso639_languages[i].iso639_2_code != NULL; i++)
if ((iso639_languages[i].iso639_1_code != NULL) &&
!strcmp(iso639_1_code, iso639_languages[i].iso639_1_code))
return iso639_languages[i].iso639_2_code;
return NULL;
}
const char *map_iso639_2_to_iso639_1(const char *iso639_2_code) {
uint32_t i;
for (i = 0; iso639_languages[i].iso639_2_code != NULL; i++)
if (!strcmp(iso639_2_code, iso639_languages[i].iso639_2_code))
return iso639_languages[i].iso639_1_code;
return NULL;
}

View File

@ -22,13 +22,15 @@
#define __ISO639_H
typedef struct {
char *english_name, *iso639_2_code, *iso639_1_code;
const char *english_name, *iso639_2_code, *iso639_1_code;
} iso639_language_t;
extern iso639_language_t iso639_languages[];
extern const iso639_language_t iso639_languages[];
int is_valid_iso639_2_code(const char *iso639_2_code);
char *get_iso639_english_name(const char *iso639_2_code);
const char *get_iso639_english_name(const char *iso639_2_code);
const char *map_iso639_1_to_iso639_2(const char *iso639_1_code);
const char *map_iso639_2_to_iso639_1(const char *iso639_2_code);
void list_iso639_languages();
#endif // __ISO639_H

View File

@ -25,6 +25,7 @@
#include <errno.h>
#include "common.h"
#include "iso639.h"
#include "mm_io.h"
#include "p_vobsub.h"
#include "r_vobsub.h"
@ -148,13 +149,19 @@ vobsub_reader_c::~vobsub_reader_c() {
void vobsub_reader_c::create_packetizers() {
uint32_t i, k;
int64_t avg_duration;
char language[4];
const char *c;
for (i = 0; i < tracks.size(); i++) {
if (!demuxing_requested('s', i))
continue;
ti->id = i;
// ti.language = tracks[i]->language;
if ((c = map_iso639_1_to_iso639_2(tracks[i]->language)) != NULL) {
strcpy(language, c);
ti->language = language;
} else
ti->language = NULL;
tracks[i]->packetizer =
new vobsub_packetizer_c(this, idx_data.c_str(), idx_data.length(),
COMPRESSION_ZLIB, COMPRESSION_NONE, ti);
@ -215,7 +222,8 @@ void vobsub_reader_c::parse_headers() {
continue;
}
if (!strncasecmp(sline, "alt:", 4))
if (!strncasecmp(sline, "alt:", 4) ||
!strncasecmp(sline, "langidx:", 8))
continue;
if ((version == 7) && isvobsubline_v7(sline)) {