mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2024-12-25 04:11:44 +00:00
Added automatic conversion of language index codes in the VobSub reader.
This commit is contained in:
parent
36fed2d646
commit
07f4ac6132
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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)) {
|
||||
|
Loading…
Reference in New Issue
Block a user