summaryrefslogtreecommitdiffstats
path: root/sub
diff options
context:
space:
mode:
Diffstat (limited to 'sub')
-rw-r--r--sub/ass_mp.c40
-rw-r--r--sub/ass_mp.h6
-rw-r--r--sub/dec_sub.c34
-rw-r--r--sub/dec_sub.h4
-rw-r--r--sub/find_subfiles.c21
-rw-r--r--sub/find_subfiles.h5
-rw-r--r--sub/osd.c10
-rw-r--r--sub/osd.h4
-rw-r--r--sub/osd_libass.c6
-rw-r--r--sub/sd.h1
-rw-r--r--sub/sd_ass.c8
-rw-r--r--sub/sd_lavc.c6
-rw-r--r--sub/sd_lavc_conv.c7
-rw-r--r--sub/sd_spu.c2
-rw-r--r--sub/sd_srt.c12
-rw-r--r--sub/spudec.c53
-rw-r--r--sub/spudec.h3
17 files changed, 121 insertions, 101 deletions
diff --git a/sub/ass_mp.c b/sub/ass_mp.c
index cdf302f959..422da9dc39 100644
--- a/sub/ass_mp.c
+++ b/sub/ass_mp.c
@@ -29,7 +29,7 @@
#include <libavutil/common.h>
-#include "config.h"
+#include "common/global.h"
#include "common/msg.h"
#include "options/path.h"
#include "ass_mp.h"
@@ -150,22 +150,21 @@ void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts,
ass_set_line_spacing(priv, set_line_spacing);
}
-void mp_ass_configure_fonts(ASS_Renderer *priv, struct osd_style_opts *opts)
+void mp_ass_configure_fonts(ASS_Renderer *priv, struct osd_style_opts *opts,
+ struct mpv_global *global, struct mp_log *log)
{
- char *default_font = mp_find_user_config_file("subfont.ttf");
- char *config = mp_find_config_file("fonts.conf");
+ void *tmp = talloc_new(NULL);
+ char *default_font = mp_find_user_config_file(tmp, global, "subfont.ttf");
+ char *config = mp_find_config_file(tmp, global, "fonts.conf");
- if (default_font && !mp_path_exists(default_font)) {
- talloc_free(default_font);
+ if (default_font && !mp_path_exists(default_font))
default_font = NULL;
- }
- mp_msg(MSGT_ASS, MSGL_V, "Setting up fonts...\n");
+ mp_verbose(log, "Setting up fonts...\n");
ass_set_fonts(priv, default_font, opts->font, 1, config, 1);
- mp_msg(MSGT_ASS, MSGL_V, "Done.\n");
+ mp_verbose(log, "Done.\n");
- talloc_free(default_font);
- talloc_free(config);
+ talloc_free(tmp);
}
void mp_ass_render_frame(ASS_Renderer *renderer, ASS_Track *track, double time,
@@ -210,28 +209,31 @@ static int map_ass_level[] = {
MSGL_V,
MSGL_V,
MSGL_V, // 5 application recommended level
- MSGL_DBG2,
- MSGL_DBG3, // 7 "verbose DEBUG"
+ MSGL_DEBUG,
+ MSGL_TRACE, // 7 "verbose DEBUG"
};
static void message_callback(int level, const char *format, va_list va, void *ctx)
{
+ struct mp_log *log = ctx;
+ if (!log)
+ return;
level = map_ass_level[level];
- mp_msg_va(MSGT_ASS, level, format, va);
+ mp_msg_va(log, level, format, va);
// libass messages lack trailing \n
- mp_msg(MSGT_ASS, level, "\n");
+ mp_msg(log, level, "\n");
}
-ASS_Library *mp_ass_init(struct MPOpts *opts)
+ASS_Library *mp_ass_init(struct mpv_global *global, struct mp_log *log)
{
- char *path = mp_find_user_config_file("fonts");
+ char *path = mp_find_user_config_file(NULL, global, "fonts");
ASS_Library *priv = ass_library_init();
if (!priv)
abort();
- ass_set_message_cb(priv, message_callback, NULL);
+ ass_set_message_cb(priv, message_callback, log);
if (path)
ass_set_fonts_dir(priv, path);
- ass_set_extract_fonts(priv, opts->use_embedded_fonts);
+ ass_set_extract_fonts(priv, global->opts->use_embedded_fonts);
talloc_free(path);
return priv;
}
diff --git a/sub/ass_mp.h b/sub/ass_mp.h
index 987efdfe28..8fb9104662 100644
--- a/sub/ass_mp.h
+++ b/sub/ass_mp.h
@@ -41,6 +41,7 @@
#include <ass/ass_types.h>
struct MPOpts;
+struct mpv_global;
struct mp_osd_res;
struct osd_style_opts;
@@ -54,8 +55,9 @@ ASS_Track *mp_ass_default_track(ASS_Library *library, struct MPOpts *opts);
struct MPOpts;
void mp_ass_configure(ASS_Renderer *priv, struct MPOpts *opts,
struct mp_osd_res *dim);
-void mp_ass_configure_fonts(ASS_Renderer *priv, struct osd_style_opts *opts);
-ASS_Library *mp_ass_init(struct MPOpts *opts);
+void mp_ass_configure_fonts(ASS_Renderer *priv, struct osd_style_opts *opts,
+ struct mpv_global *global, struct mp_log *log);
+ASS_Library *mp_ass_init(struct mpv_global *global, struct mp_log *log);
struct sub_bitmap;
struct sub_bitmaps;
diff --git a/sub/dec_sub.c b/sub/dec_sub.c
index 9a948cd036..d94d1f0567 100644
--- a/sub/dec_sub.c
+++ b/sub/dec_sub.c
@@ -27,6 +27,7 @@
#include "sd.h"
#include "dec_sub.h"
#include "options/options.h"
+#include "common/global.h"
#include "common/msg.h"
#include "misc/charset_conv.h"
@@ -56,6 +57,7 @@ static const struct sd_functions *sd_list[] = {
#define MAX_NUM_SD 3
struct dec_sub {
+ struct mp_log *log;
struct MPOpts *opts;
struct sd init_sd;
@@ -71,10 +73,11 @@ struct packet_list {
int num_packets;
};
-struct dec_sub *sub_create(struct MPOpts *opts)
+struct dec_sub *sub_create(struct mpv_global *global)
{
struct dec_sub *sub = talloc_zero(NULL, struct dec_sub);
- sub->opts = opts;
+ sub->log = mp_log_new(sub, global->log, "sub");
+ sub->opts = global->opts;
return sub;
}
@@ -133,13 +136,13 @@ void sub_set_ass_renderer(struct dec_sub *sub, struct ass_library *ass_library,
static void print_chain(struct dec_sub *sub)
{
- mp_msg(MSGT_OSD, MSGL_V, "Subtitle filter chain: ");
+ MP_VERBOSE(sub, "Subtitle filter chain: ");
for (int n = 0; n < sub->num_sd; n++) {
struct sd *sd = sub->sd[n];
- mp_msg(MSGT_OSD, MSGL_V, "%s%s (%s)", n > 0 ? " -> " : "",
+ MP_VERBOSE(sub, "%s%s (%s)", n > 0 ? " -> " : "",
sd->driver->name, sd->codec);
}
- mp_msg(MSGT_OSD, MSGL_V, "\n");
+ MP_VERBOSE(sub, "\n");
}
static int sub_init_decoder(struct dec_sub *sub, struct sd *sd)
@@ -155,6 +158,7 @@ static int sub_init_decoder(struct dec_sub *sub, struct sd *sd)
if (!sd->driver)
return -1;
+ sd->log = mp_log_new(sd, sub->log, sd->driver->name);
if (sd->driver->init(sd) < 0)
return -1;
@@ -198,7 +202,7 @@ void sub_init_from_sh(struct dec_sub *sub, struct sh_stream *sh)
}
sub_uninit(sub);
- mp_msg(MSGT_OSD, MSGL_ERR, "Could not find subtitle decoder for format '%s'.\n",
+ MP_ERR(sub, "Could not find subtitle decoder for format '%s'.\n",
sh->codec ? sh->codec : "<unknown>");
}
@@ -223,12 +227,13 @@ static void decode_chain(struct sd **sd, int num_sd, struct demux_packet *packet
}
}
-static struct demux_packet *recode_packet(struct demux_packet *in,
+static struct demux_packet *recode_packet(struct mp_log *log,
+ struct demux_packet *in,
const char *charset)
{
struct demux_packet *pkt = NULL;
bstr in_buf = {in->buffer, in->len};
- bstr conv = mp_iconv_to_utf8(in_buf, charset, MP_ICONV_VERBOSE);
+ bstr conv = mp_iconv_to_utf8(log, in_buf, charset, MP_ICONV_VERBOSE);
if (conv.start && conv.start != in_buf.start) {
pkt = talloc_ptrtype(NULL, pkt);
talloc_steal(pkt, conv.start);
@@ -249,7 +254,7 @@ static void decode_chain_recode(struct dec_sub *sub, struct sd **sd, int num_sd,
if (num_sd > 0) {
struct demux_packet *recoded = NULL;
if (sub->charset)
- recoded = recode_packet(packet, sub->charset);
+ recoded = recode_packet(sub->log, packet, sub->charset);
decode_chain(sd, num_sd, recoded ? recoded : packet);
talloc_free(recoded);
}
@@ -260,7 +265,8 @@ void sub_decode(struct dec_sub *sub, struct demux_packet *packet)
decode_chain_recode(sub, sub->sd, sub->num_sd, packet);
}
-static const char *guess_sub_cp(struct packet_list *subs, const char *usercp)
+static const char *guess_sub_cp(struct mp_log *log, struct packet_list *subs,
+ const char *usercp)
{
if (!mp_charset_requires_guess(usercp))
return usercp;
@@ -286,7 +292,7 @@ static const char *guess_sub_cp(struct packet_list *subs, const char *usercp)
memcpy(text.start + text.len + pkt->len, sep, sep_len);
text.len += pkt->len + sep_len;
}
- const char *guess = mp_charset_guess(text, usercp, 0);
+ const char *guess = mp_charset_guess(log, text, usercp, 0);
talloc_free(text.start);
return guess;
}
@@ -405,10 +411,10 @@ bool sub_read_all_packets(struct dec_sub *sub, struct sh_stream *sh)
}
if (opts->sub_cp && !sh->sub->is_utf8)
- sub->charset = guess_sub_cp(subs, opts->sub_cp);
+ sub->charset = guess_sub_cp(sub->log, subs, opts->sub_cp);
if (sub->charset && sub->charset[0] && !mp_charset_is_utf8(sub->charset))
- mp_msg(MSGT_OSD, MSGL_INFO, "Using subtitle charset: %s\n", sub->charset);
+ MP_INFO(sub, "Using subtitle charset: %s\n", sub->charset);
double sub_speed = 1.0;
@@ -537,7 +543,7 @@ void sd_conv_add_packet(struct sd *sd, void *data, int data_len, double pts,
return;
out_of_space:
- mp_msg(MSGT_OSD, MSGL_ERR, "Subtitle too big.\n");
+ MP_ERR(sd, "Subtitle too big.\n");
}
struct demux_packet *sd_conv_def_get_converted(struct sd *sd)
diff --git a/sub/dec_sub.h b/sub/dec_sub.h
index 36b947fffa..c659458c04 100644
--- a/sub/dec_sub.h
+++ b/sub/dec_sub.h
@@ -8,7 +8,7 @@
struct sh_stream;
struct ass_track;
-struct MPOpts;
+struct mpv_global;
struct demux_packet;
struct ass_library;
struct ass_renderer;
@@ -22,7 +22,7 @@ enum sd_ctrl {
SD_CTRL_GET_RESOLUTION,
};
-struct dec_sub *sub_create(struct MPOpts *opts);
+struct dec_sub *sub_create(struct mpv_global *global);
void sub_destroy(struct dec_sub *sub);
void sub_set_video_res(struct dec_sub *sub, int w, int h);
diff --git a/sub/find_subfiles.c b/sub/find_subfiles.c
index d5f3078793..e5577c3912 100644
--- a/sub/find_subfiles.c
+++ b/sub/find_subfiles.c
@@ -6,6 +6,7 @@
#include "osdep/io.h"
+#include "common/global.h"
#include "common/msg.h"
#include "options/options.h"
#include "options/path.h"
@@ -89,12 +90,14 @@ static struct bstr guess_lang_from_filename(struct bstr name)
* @param fname Subtitle filename (pattern)
* @param limit_fuzziness Ignore flag when sub_fuziness == 2
*/
-static void append_dir_subtitles(struct MPOpts *opts,
+static void append_dir_subtitles(struct mpv_global *global,
struct subfn **slist, int *nsub,
struct bstr path, const char *fname,
int limit_fuzziness)
{
void *tmpmem = talloc_new(NULL);
+ struct MPOpts *opts = global->opts;
+ struct mp_log *log = mp_log_new(tmpmem, global->log, "find_subfiles");
if (mp_is_url(bstr0(fname)))
goto out;
@@ -112,7 +115,7 @@ static void append_dir_subtitles(struct MPOpts *opts,
DIR *d = opendir(path0);
if (!d)
goto out;
- mp_msg(MSGT_SUBREADER, MSGL_V, "Load subtitles in %.*s\n", BSTR_P(path));
+ mp_verbose(log, "Load subtitles in %.*s\n", BSTR_P(path));
struct dirent *de;
while ((de = readdir(d))) {
struct bstr dename = bstr0(de->d_name);
@@ -158,8 +161,7 @@ static void append_dir_subtitles(struct MPOpts *opts,
}
}
- mp_msg(MSGT_SUBREADER, MSGL_DBG2, "Potential sub file: "
- "\"%s\" Priority: %d\n", de->d_name, prio);
+ mp_dbg(log, "Potential sub file: \"%s\" Priority: %d\n", de->d_name, prio);
if (prio) {
prio += prio;
char *subpath = mp_path_join(*slist, path, dename);
@@ -216,27 +218,28 @@ static void filter_subidx(struct subfn **slist, int *nsub)
// Return a list of subtitles found, sorted by priority.
// Last element is terminated with a fname==NULL entry.
-struct subfn *find_text_subtitles(struct MPOpts *opts, const char *fname)
+struct subfn *find_text_subtitles(struct mpv_global *global, const char *fname)
{
+ struct MPOpts *opts = global->opts;
struct subfn *slist = talloc_array_ptrtype(NULL, slist, 1);
int n = 0;
// Load subtitles from current media directory
- append_dir_subtitles(opts, &slist, &n, mp_dirname(fname), fname, 0);
+ append_dir_subtitles(global, &slist, &n, mp_dirname(fname), fname, 0);
// Load subtitles in dirs specified by sub-paths option
if (opts->sub_paths) {
for (int i = 0; opts->sub_paths[i]; i++) {
char *path = mp_path_join(slist, mp_dirname(fname),
bstr0(opts->sub_paths[i]));
- append_dir_subtitles(opts, &slist, &n, bstr0(path), fname, 0);
+ append_dir_subtitles(global, &slist, &n, bstr0(path), fname, 0);
}
}
// Load subtitles in ~/.mpv/sub limiting sub fuzziness
- char *mp_subdir = mp_find_user_config_file("sub/");
+ char *mp_subdir = mp_find_user_config_file(NULL, global, "sub/");
if (mp_subdir)
- append_dir_subtitles(opts, &slist, &n, bstr0(mp_subdir), fname, 1);
+ append_dir_subtitles(global, &slist, &n, bstr0(mp_subdir), fname, 1);
talloc_free(mp_subdir);
// Sort by name for filter_subidx()
diff --git a/sub/find_subfiles.h b/sub/find_subfiles.h
index fa47864e71..d11c02627b 100644
--- a/sub/find_subfiles.h
+++ b/sub/find_subfiles.h
@@ -19,14 +19,13 @@
#ifndef MPLAYER_FIND_SUBFILES_H
#define MPLAYER_FIND_SUBFILES_H
-struct MPOpts;
-
struct subfn {
int priority;
char *fname;
char *lang;
};
-struct subfn *find_text_subtitles(struct MPOpts *opts, const char *fname);
+struct mpv_global;
+struct subfn *find_text_subtitles(struct mpv_global *global, const char *fname);
#endif /* MPLAYER_FINDFILES_H */
diff --git a/sub/osd.c b/sub/osd.c
index ac2b40499a..72ae5db841 100644
--- a/sub/osd.c
+++ b/sub/osd.c
@@ -31,6 +31,7 @@
#include "talloc.h"
#include "options/options.h"
+#include "common/global.h"
#include "common/msg.h"
#include "osd.h"
#include "dec_sub.h"
@@ -79,11 +80,13 @@ static bool osd_res_equals(struct mp_osd_res a, struct mp_osd_res b)
&& a.display_par == b.display_par;
}
-struct osd_state *osd_create(struct MPOpts *opts)
+struct osd_state *osd_create(struct mpv_global *global)
{
struct osd_state *osd = talloc_zero(NULL, struct osd_state);
*osd = (struct osd_state) {
- .opts = opts,
+ .opts = global->opts,
+ .global = global,
+ .log = mp_log_new(osd, global->log, "osd"),
.osd_text = talloc_strdup(osd, ""),
.sub_text = talloc_strdup(osd, ""),
.progbar_type = -1,
@@ -246,8 +249,7 @@ void osd_draw(struct osd_state *osd, struct mp_osd_res res,
if (formats[imgs.format]) {
cb(cb_ctx, &imgs);
} else {
- mp_msg(MSGT_OSD, MSGL_ERR,
- "Can't render OSD part %d (format %d).\n",
+ MP_ERR(osd, "Can't render OSD part %d (format %d).\n",
obj->type, imgs.format);
}
}
diff --git a/sub/osd.h b/sub/osd.h
index d98d111228..9714a06c18 100644
--- a/sub/osd.h
+++ b/sub/osd.h
@@ -154,6 +154,8 @@ struct osd_state {
void *highlight_priv;
struct MPOpts *opts;
+ struct mpv_global *global;
+ struct mp_log *log;
// Internal to sub.c
struct mp_draw_sub_cache *draw_cache;
@@ -202,7 +204,7 @@ struct osd_style_opts {
extern const struct m_sub_options osd_style_conf;
-struct osd_state *osd_create(struct MPOpts *opts);
+struct osd_state *osd_create(struct mpv_global *global);
void osd_set_text(struct osd_state *osd, const char *text);
void osd_set_sub(struct osd_state *osd, const char *text);
void osd_changed(struct osd_state *osd, int new_value);
diff --git a/sub/osd_libass.c b/sub/osd_libass.c
index 3e6efe6667..48083bc71f 100644
--- a/sub/osd_libass.c
+++ b/sub/osd_libass.c
@@ -48,7 +48,8 @@ static void create_ass_renderer(struct osd_state *osd, struct osd_object *obj)
if (obj->osd_render)
return;
- obj->osd_ass_library = mp_ass_init(osd->opts);
+ struct mp_log *ass_log = mp_log_new(obj, osd->log, "libass");
+ obj->osd_ass_library = mp_ass_init(osd->global, ass_log);
ass_add_font(obj->osd_ass_library, "mpv-osd-symbols", (void *)osd_font_pfb,
sizeof(osd_font_pfb) - 1);
@@ -56,7 +57,8 @@ static void create_ass_renderer(struct osd_state *osd, struct osd_object *obj)
if (!obj->osd_render)
abort();
- mp_ass_configure_fonts(obj->osd_render, osd->opts->osd_style);
+ mp_ass_configure_fonts(obj->osd_render, osd->opts->osd_style,
+ osd->global, ass_log);
ass_set_aspect_ratio(obj->osd_render, 1.0, 1.0);
}
diff --git a/sub/sd.h b/sub/sd.h
index 0ec4bf273d..088dc166d8 100644
--- a/sub/sd.h
+++ b/sub/sd.h
@@ -5,6 +5,7 @@
#include "demux/packet.h"
struct sd {
+ struct mp_log *log;
struct MPOpts *opts;
const struct sd_functions *driver;
diff --git a/sub/sd_ass.c b/sub/sd_ass.c
index 93a3c7e380..4b0c3024c8 100644
--- a/sub/sd_ass.c
+++ b/sub/sd_ass.c
@@ -102,12 +102,12 @@ static void decode(struct sd *sd, struct demux_packet *packet)
}
// plaintext subs
if (packet->pts == MP_NOPTS_VALUE) {
- mp_msg(MSGT_SUBREADER, MSGL_WARN, "Subtitle without pts, ignored\n");
+ MP_WARN(sd, "Subtitle without pts, ignored\n");
return;
}
if (packet->duration <= 0) {
- mp_msg(MSGT_SUBREADER, MSGL_WARN, "Subtitle without duration or "
- "duration set to 0 at pts %f, ignored\n", packet->pts);
+ MP_WARN(sd, "Subtitle without duration or "
+ "duration set to 0 at pts %f, ignored\n", packet->pts);
return;
}
unsigned char *text = packet->buffer;
@@ -390,7 +390,7 @@ static void mangle_colors(struct sd *sd, struct sub_bitmaps *parts)
{
int msgl = basic_conv ? MSGL_V : MSGL_WARN;
ctx->last_params = params;
- mp_msg(MSGT_SUBREADER, msgl, "[sd_ass] mangling colors like vsfilter: "
+ MP_MSG(sd, msgl, "mangling colors like vsfilter: "
"RGB -> %s %s -> %s %s -> RGB\n", mp_csp_names[csp],
mp_csp_levels_names[levels], mp_csp_names[params.colorspace],
mp_csp_levels_names[params.colorlevels]);
diff --git a/sub/sd_lavc.c b/sub/sd_lavc.c
index 1977ca3fff..dda6ac4f1c 100644
--- a/sub/sd_lavc.c
+++ b/sub/sd_lavc.c
@@ -111,8 +111,7 @@ static int init(struct sd *sd)
return 0;
error:
- mp_msg(MSGT_SUBREADER, MSGL_ERR,
- "Could not open libavcodec subtitle decoder\n");
+ MP_FATAL(sd, "Could not open libavcodec subtitle decoder\n");
av_free(ctx);
talloc_free(priv);
return -1;
@@ -202,8 +201,7 @@ static void decode(struct sd *sd, struct demux_packet *packet)
}
break;
default:
- mp_msg(MSGT_SUBREADER, MSGL_ERR, "sd_lavc: unsupported subtitle "
- "type from libavcodec\n");
+ MP_ERR(sd, "unsupported subtitle type from libavcodec\n");
break;
}
}
diff --git a/sub/sd_lavc_conv.c b/sub/sd_lavc_conv.c
index 0fa3986e3d..566f412cf5 100644
--- a/sub/sd_lavc_conv.c
+++ b/sub/sd_lavc_conv.c
@@ -110,8 +110,7 @@ static int init(struct sd *sd)
return 0;
error:
- mp_msg(MSGT_SUBREADER, MSGL_ERR,
- "Could not open libavcodec subtitle converter\n");
+ MP_FATAL(sd, "Could not open libavcodec subtitle converter\n");
av_free(avctx);
talloc_free(priv);
return -1;
@@ -243,7 +242,7 @@ static void decode(struct sd *sd, struct demux_packet *packet)
if (sd->codec && strcmp(sd->codec, "webvtt-webm") == 0) {
if (parse_webvtt(&pkt, &parsed_pkt) < 0) {
- mp_msg(MSGT_OSD, MSGL_ERR, "Error parsing subtitle\n");
+ MP_ERR(sd, "Error parsing subtitle\n");
goto done;
}
pkt = parsed_pkt;
@@ -251,7 +250,7 @@ static void decode(struct sd *sd, struct demux_packet *packet)
ret = avcodec_decode_subtitle2(avctx, &sub, &got_sub, &pkt);
if (ret < 0) {
- mp_msg(MSGT_OSD, MSGL_ERR, "Error decoding subtitle\n");
+ MP_ERR(sd, "Error decoding subtitle\n");
} else if (got_sub) {
for (int i = 0; i < sub.num_rects; i++) {
char *ass_line = sub.rects[i]->ass;
diff --git a/sub/sd_spu.c b/sub/sd_spu.c
index 1f815c93aa..3a7bf09127 100644
--- a/sub/sd_spu.c
+++ b/sub/sd_spu.c
@@ -42,7 +42,7 @@ static bool supports_format(const char *format)
static int init(struct sd *sd)
{
- void *spudec = spudec_new_scaled(sd->sub_video_w, sd->sub_video_h,
+ void *spudec = spudec_new_scaled(sd->log, sd->sub_video_w, sd->sub_video_h,
sd->extradata, sd->extradata_len);
if (!spudec)
return -1;
diff --git a/sub/sd_srt.c b/sub/sd_srt.c
index c08f927c4a..18ef0cce8f 100644
--- a/sub/sd_srt.c
+++ b/sub/sd_srt.c
@@ -273,7 +273,8 @@ static int read_attr(char **s, struct bstr *attr, struct bstr *val)
return 0;
}
-static void convert_subrip(const char *orig, char *dest, int dest_buffer_size)
+static void convert_subrip(struct sd *sd, const char *orig,
+ char *dest, int dest_buffer_size)
{
/* line is not const to avoid warnings with strtol, etc.
* orig content won't be changed */
@@ -392,8 +393,7 @@ static void convert_subrip(const char *orig, char *dest, int dest_buffer_size)
tag->has_color = true;
} else {
// We didn't find any matching color
- mp_msg(MSGT_SUBREADER, MSGL_WARN,
- "SubRip: unknown font color in subtitle: >%s<\n",
+ MP_WARN(sd, "unknown font color in subtitle: >%s<\n",
orig);
append_text(&new_line, "{\\c}");
}
@@ -406,8 +406,8 @@ static void convert_subrip(const char *orig, char *dest, int dest_buffer_size)
tag->has_face = true;
has_valid_attr = true;
} else
- mp_msg(MSGT_SUBREADER, MSGL_WARN,"SubRip: unrecognized "
- "attribute \"%.*s\" in font tag\n", BSTR_P(attr));
+ MP_WARN(sd, "unrecognized attribute \"%.*s\" in font tag\n",
+ BSTR_P(attr));
}
if (!has_valid_attr || *line != '>') { /* Not valid font tag */
@@ -463,7 +463,7 @@ static void decode(struct sd *sd, struct demux_packet *packet)
{
char dest[SD_MAX_LINE_LEN];
// Assume input buffer is padded with 0
- convert_subrip(packet->buffer, dest, sizeof(dest));
+ convert_subrip(sd, packet->buffer, dest, sizeof(dest));
sd_conv_add_packet(sd, dest, strlen(dest), packet->pts, packet->duration);
}
diff --git a/sub/spudec.c b/sub/spudec.c
index 79b0b2eb93..ea990553a2 100644
--- a/sub/spudec.c
+++ b/sub/spudec.c
@@ -67,6 +67,7 @@ struct spu_packet_t {
};
typedef struct {
+ struct mp_log *log;
packet_t *queue_head;
packet_t *queue_tail;
unsigned int global_palette[16];
@@ -143,12 +144,12 @@ static void next_line(packet_t *packet)
packet->deinterlace_oddness = (packet->deinterlace_oddness + 1) % 2;
}
-static inline unsigned char get_nibble(packet_t *packet)
+static inline unsigned char get_nibble(spudec_handle_t *this, packet_t *packet)
{
unsigned char nib;
unsigned int *nibblep = packet->current_nibble + packet->deinterlace_oddness;
if (*nibblep / 2 >= packet->control_start) {
- mp_msg(MSGT_SPUDEC,MSGL_WARN, "SPUdec: ERROR: get_nibble past end of packet\n");
+ MP_WARN(this, "SPUdec: ERROR: get_nibble past end of packet\n");
return 0;
}
nib = packet->packet[*nibblep / 2];
@@ -273,14 +274,14 @@ static void spudec_process_data(spudec_handle_t *this, packet_t *packet)
&& y < this->pal_height) {
unsigned int len, color;
unsigned int rle = 0;
- rle = get_nibble(packet);
+ rle = get_nibble(this, packet);
if (rle < 0x04) {
if (rle == 0) {
- rle = (rle << 4) | get_nibble(packet);
+ rle = (rle << 4) | get_nibble(this, packet);
if (rle < 0x04)
- rle = (rle << 4) | get_nibble(packet);
+ rle = (rle << 4) | get_nibble(this, packet);
}
- rle = (rle << 4) | get_nibble(packet);
+ rle = (rle << 4) | get_nibble(this, packet);
}
color = 3 - (rle & 0x3);
len = rle >> 2;
@@ -371,14 +372,14 @@ static void spudec_process_control(spudec_handle_t *this, int pts100)
start_off = next_off;
date = get_be16(this->packet + start_off) * 1024;
next_off = get_be16(this->packet + start_off + 2);
- mp_msg(MSGT_SPUDEC,MSGL_DBG2, "date=%d\n", date);
+ MP_DBG(this, "date=%d\n", date);
off = start_off + 4;
for (type = this->packet[off++]; type != 0xff; type = this->packet[off++]) {
- mp_msg(MSGT_SPUDEC,MSGL_DBG2, "cmd=%d ",type);
+ MP_DBG(this, "cmd=%d ",type);
switch(type) {
case 0x00:
/* Menu ID, 1 byte */
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Menu ID\n");
+ MP_DBG(this, "Menu ID\n");
/* shouldn't a Menu ID type force display start? */
start_pts = pts100 < 0 && -pts100 >= date ? 0 : pts100 + date;
end_pts = UINT_MAX;
@@ -387,7 +388,7 @@ static void spudec_process_control(spudec_handle_t *this, int pts100)
break;
case 0x01:
/* Start display */
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Start display!\n");
+ MP_DBG(this, "Start display!\n");
start_pts = pts100 < 0 && -pts100 >= date ? 0 : pts100 + date;
end_pts = UINT_MAX;
display = 1;
@@ -395,7 +396,7 @@ static void spudec_process_control(spudec_handle_t *this, int pts100)
break;
case 0x02:
/* Stop display */
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Stop display!\n");
+ MP_DBG(this, "Stop display!\n");
end_pts = pts100 < 0 && -pts100 >= date ? 0 : pts100 + date;
break;
case 0x03:
@@ -404,7 +405,7 @@ static void spudec_process_control(spudec_handle_t *this, int pts100)
this->palette[1] = this->packet[off] & 0xf;
this->palette[2] = this->packet[off + 1] >> 4;
this->palette[3] = this->packet[off + 1] & 0xf;
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Palette %d, %d, %d, %d\n",
+ MP_DBG(this, "Palette %d, %d, %d, %d\n",
this->palette[0], this->palette[1], this->palette[2], this->palette[3]);
off+=2;
break;
@@ -426,7 +427,7 @@ static void spudec_process_control(spudec_handle_t *this, int pts100)
this->alpha[1] = b;
this->alpha[2] = c;
this->alpha[3] = d;
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Alpha %d, %d, %d, %d\n",
+ MP_DBG(this, "Alpha %d, %d, %d, %d\n",
this->alpha[0], this->alpha[1], this->alpha[2], this->alpha[3]);
off+=2;
break;
@@ -441,7 +442,7 @@ static void spudec_process_control(spudec_handle_t *this, int pts100)
start_row = b >> 12;
end_row = b & 0xfff;
height = (end_row < start_row) ? 0 : end_row - start_row /* + 1 */;
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Coords col: %d - %d row: %d - %d (%dx%d)\n",
+ MP_DBG(this, "Coords col: %d - %d row: %d - %d (%dx%d)\n",
start_col, end_col, start_row, end_row,
width, height);
off+=6;
@@ -450,12 +451,12 @@ static void spudec_process_control(spudec_handle_t *this, int pts100)
/* Graphic lines */
current_nibble[0] = 2 * get_be16(this->packet + off);
current_nibble[1] = 2 * get_be16(this->packet + off + 2);
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"Graphic offset 1: %d offset 2: %d\n",
+ MP_DBG(this, "Graphic offset 1: %d offset 2: %d\n",
current_nibble[0] / 2, current_nibble[1] / 2);
off+=4;
break;
default:
- mp_msg(MSGT_SPUDEC,MSGL_WARN,"spudec: Error determining control type 0x%02x. Skipping %d bytes.\n",
+ MP_WARN(this, "spudec: Error determining control type 0x%02x. Skipping %d bytes.\n",
type, next_off - off);
goto next_control;
}
@@ -502,12 +503,13 @@ int spudec_changed(void * this)
return spu->spu_changed || spu->now_pts > spu->end_pts;
}
-void spudec_assemble(void *this, unsigned char *packet, unsigned int len, int pts100)
+void spudec_assemble(void *idontknowc, unsigned char *packet, unsigned int len, int pts100)
{
+ spudec_handle_t *this = idontknowc;
spudec_handle_t *spu = this;
// spudec_heartbeat(this, pts100);
if (len < 2) {
- mp_msg(MSGT_SPUDEC,MSGL_WARN,"SPUasm: packet too short\n");
+ MP_WARN(this, "SPUasm: packet too short\n");
return;
}
spu->packet_pts = pts100;
@@ -522,7 +524,7 @@ void spudec_assemble(void *this, unsigned char *packet, unsigned int len, int pt
if (spu->packet != NULL) {
spu->packet_size = len2;
if (len > len2) {
- mp_msg(MSGT_SPUDEC,MSGL_WARN,"SPUasm: invalid frag len / len2: %d / %d \n", len, len2);
+ MP_WARN(this, "SPUasm: invalid frag len / len2: %d / %d \n", len, len2);
return;
}
memcpy(spu->packet, packet, len);
@@ -532,7 +534,7 @@ void spudec_assemble(void *this, unsigned char *packet, unsigned int len, int pt
} else {
// Continue current fragment
if (spu->packet_size < spu->packet_offset + len){
- mp_msg(MSGT_SPUDEC,MSGL_WARN,"SPUasm: invalid fragment\n");
+ MP_WARN(this, "SPUasm: invalid fragment\n");
spu->packet_size = spu->packet_offset = 0;
return;
} else {
@@ -549,16 +551,16 @@ void spudec_assemble(void *this, unsigned char *packet, unsigned int len, int pt
unsigned int x=0,y;
while(x+4<=spu->packet_offset){
y=get_be16(spu->packet+x+2); // next control pointer
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"SPUtest: x=%d y=%d off=%d size=%d\n",x,y,spu->packet_offset,spu->packet_size);
+ MP_DBG(this, "SPUtest: x=%d y=%d off=%d size=%d\n",x,y,spu->packet_offset,spu->packet_size);
if(x>=4 && x==y){ // if it points to self - we're done!
// we got it!
- mp_msg(MSGT_SPUDEC,MSGL_DBG2,"SPUgot: off=%d size=%d \n",spu->packet_offset,spu->packet_size);
+ MP_DBG(this, "SPUgot: off=%d size=%d \n",spu->packet_offset,spu->packet_size);
spudec_decode(spu, pts100);
spu->packet_offset = 0;
break;
}
if(y<=x || y>=spu->packet_size){ // invalid?
- mp_msg(MSGT_SPUDEC,MSGL_WARN,"SPUtest: broken packet!!!!! y=%d < x=%d\n",y,x);
+ MP_WARN(this, "SPUtest: broken packet!!!!! y=%d < x=%d\n",y,x);
spu->packet_size = spu->packet_offset = 0;
break;
}
@@ -750,10 +752,11 @@ static void spudec_parse_extradata(spudec_handle_t *this,
free(buffer);
}
-void *spudec_new_scaled(unsigned int frame_width, unsigned int frame_height, uint8_t *extradata, int extradata_len)
+void *spudec_new_scaled(struct mp_log *log, unsigned int frame_width, unsigned int frame_height, uint8_t *extradata, int extradata_len)
{
spudec_handle_t *this = calloc(1, sizeof(spudec_handle_t));
if (this){
+ this->log = log;
this->orig_frame_height = frame_height;
this->orig_frame_width = frame_width;
// set up palette:
@@ -773,7 +776,7 @@ void *spudec_new_scaled(unsigned int frame_width, unsigned int frame_height, uin
}
}
else
- mp_msg(MSGT_SPUDEC,MSGL_FATAL, "FATAL: spudec_init: calloc");
+ MP_FATAL(this, "FATAL: spudec_init: calloc");
return this;
}
diff --git a/sub/spudec.h b/sub/spudec.h
index 55071d823e..197102b360 100644
--- a/sub/spudec.h
+++ b/sub/spudec.h
@@ -23,11 +23,12 @@
struct sub_bitmaps;
struct mp_osd_res;
+struct mp_log;
void spudec_heartbeat(void *this, unsigned int pts100);
void spudec_assemble(void *this, unsigned char *packet, unsigned int len, int pts100);
void spudec_get_indexed(void *this, struct mp_osd_res *dim, double xstretch, double ystretch, struct sub_bitmaps *res);
-void *spudec_new_scaled(unsigned int frame_width, unsigned int frame_height, uint8_t *extradata, int