mirror of
https://github.com/zoriya/Kyoo.Transcoder.git
synced 2025-12-18 04:05:12 +00:00
Cleaning support of undefined language for subtitles
This commit is contained in:
@@ -12,12 +12,12 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
|
||||||
// @return -2 on error, -1 if track has alreaady been extracted, 0 on success.
|
// @return -2 on error, -1 if track has alreaady been extracted, 0 on success.
|
||||||
int create_out_path(stream *track, const char *out_path)
|
int create_out_path(stream *track, const char *out_path, int track_id)
|
||||||
{
|
{
|
||||||
char *folder_path;
|
char *folder_path;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
|
|
||||||
asprintf(&folder_path, "%s/Subtitles/%s", out_path, track->language);
|
asprintf(&folder_path, "%s/Subtitles/%s", out_path, track->language ? track->language : "und");
|
||||||
if (!folder_path)
|
if (!folder_path)
|
||||||
return -2;
|
return -2;
|
||||||
tmp = strrchr(folder_path, '/');
|
tmp = strrchr(folder_path, '/');
|
||||||
@@ -37,9 +37,14 @@ int create_out_path(stream *track, const char *out_path)
|
|||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
free(track->path);
|
free(track->path);
|
||||||
asprintf(&track->path, "%s/%s.%s%s%s%s", folder_path,
|
|
||||||
|
char identifier[8];
|
||||||
|
if (!track->language)
|
||||||
|
snprintf(identifier, 8, "%d", track_id);
|
||||||
|
asprintf(&track->path, "%s/%s.%s%s%s%s",
|
||||||
|
folder_path,
|
||||||
file_name,
|
file_name,
|
||||||
track->language,
|
track->language ? track->language : identifier,
|
||||||
track->is_default ? ".default" : "",
|
track->is_default ? ".default" : "",
|
||||||
track->is_forced ? ".forced" : "",
|
track->is_forced ? ".forced" : "",
|
||||||
extension);
|
extension);
|
||||||
@@ -77,7 +82,7 @@ void extract_track(stream *track,
|
|||||||
AVFormatContext *in_ctx,
|
AVFormatContext *in_ctx,
|
||||||
AVFormatContext **out_ctx)
|
AVFormatContext **out_ctx)
|
||||||
{
|
{
|
||||||
if (create_out_path(track, out_path) != 0)
|
if (create_out_path(track, out_path, stream->id) != 0)
|
||||||
return;
|
return;
|
||||||
extract_stream(out_ctx, track, in_ctx, stream);
|
extract_stream(out_ctx, track, in_ctx, stream);
|
||||||
}
|
}
|
||||||
@@ -101,7 +106,7 @@ void extract_font(stream *font, const char *out_path, AVStream *stream)
|
|||||||
if (count > 0)
|
if (count > 0)
|
||||||
font->title = strndup(filename->value, count);
|
font->title = strndup(filename->value, count);
|
||||||
|
|
||||||
int fd = open(font->path, O_WRONLY | O_CREAT, 0744);
|
int fd = open(font->path, O_WRONLY | O_CREAT, 0644);
|
||||||
if (fd == -1)
|
if (fd == -1)
|
||||||
return perror("Kyoo couldn't extract a subtitle's font");
|
return perror("Kyoo couldn't extract a subtitle's font");
|
||||||
write(fd, stream->codecpar->extradata, stream->codecpar->extradata_size);
|
write(fd, stream->codecpar->extradata, stream->codecpar->extradata_size);
|
||||||
@@ -129,7 +134,7 @@ void extract_chapters(AVFormatContext *ctx, const char *out_path)
|
|||||||
*tmp = '\0';
|
*tmp = '\0';
|
||||||
strcat(path, ".txt");
|
strcat(path, ".txt");
|
||||||
|
|
||||||
int fd = open(path, O_WRONLY | O_CREAT, 0744);
|
int fd = open(path, O_WRONLY | O_CREAT, 0644);
|
||||||
|
|
||||||
for (unsigned i = 0; i < ctx->nb_chapters; i++) {
|
for (unsigned i = 0; i < ctx->nb_chapters; i++) {
|
||||||
AVDictionaryEntry *name = av_dict_get(ctx->chapters[i]->metadata, "title", NULL, 0);
|
AVDictionaryEntry *name = av_dict_get(ctx->chapters[i]->metadata, "title", NULL, 0);
|
||||||
|
|||||||
Reference in New Issue
Block a user