summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRudolf Polzer <divverent@xonotic.org>2013-04-15 13:25:51 +0200
committerRudolf Polzer <divverent@xonotic.org>2013-04-15 13:30:21 +0200
commit0c1d95e81b100464d42e8c08c5293cf0729d118d (patch)
tree06b7c082a75ec85cd880176652fb4697aba2c309
parentdf8a481eba2316f8171ec0cde4e8e192765aad16 (diff)
downloadmpv-0c1d95e81b100464d42e8c08c5293cf0729d118d.tar.bz2
mpv-0c1d95e81b100464d42e8c08c5293cf0729d118d.tar.xz
encoding: when output is pipe: or pipe:1, avoid mp_msg to stdout
I am aware this detection may occur too late, depending on other settings, but at least it usually works and is portable. Where the output fd can be changed, though, it'd be better to force a similar behaviour via file descriptor use: use pipe:3 as output to FD 3, and change the calling program to expect the stream on FD 3.
-rw-r--r--core/encode_lavc.c5
-rw-r--r--core/mp_msg.c5
-rw-r--r--core/mp_msg.h2
3 files changed, 11 insertions, 1 deletions
diff --git a/core/encode_lavc.c b/core/encode_lavc.c
index 9bb1abcdcd..457f6ab987 100644
--- a/core/encode_lavc.c
+++ b/core/encode_lavc.c
@@ -117,6 +117,11 @@ struct encode_lavc_context *encode_lavc_init(struct encode_output_conf *options)
{
struct encode_lavc_context *ctx;
+ if (options->file && (
+ !strcmp(options->file, "pipe:") ||
+ !strcmp(options->file, "pipe:1")))
+ mp_msg_stdout_in_use = 1;
+
ctx = talloc_zero(NULL, struct encode_lavc_context);
encode_lavc_discontinuity(ctx);
ctx->options = options;
diff --git a/core/mp_msg.c b/core/mp_msg.c
index 0661416c55..1f5847e97c 100644
--- a/core/mp_msg.c
+++ b/core/mp_msg.c
@@ -37,6 +37,8 @@
#include "core/mp_msg.h"
+bool mp_msg_stdout_in_use = 0;
+
/* maximum message length of mp_msg */
#define MSGSIZE_MAX 6144
@@ -225,7 +227,8 @@ static void print_msg_module(FILE* stream, int mod)
void mp_msg_va(int mod, int lev, const char *format, va_list va)
{
char tmp[MSGSIZE_MAX];
- FILE *stream = lev == MSGL_STATUS ? stderr : stdout;
+ FILE *stream =
+ (mp_msg_stdout_in_use || (lev == MSGL_STATUS)) ? stderr : stdout;
static int header = 1;
// indicates if last line printed was a status line
static int statusline;
diff --git a/core/mp_msg.h b/core/mp_msg.h
index 320912dd4c..392adcf01f 100644
--- a/core/mp_msg.h
+++ b/core/mp_msg.h
@@ -142,4 +142,6 @@ void mp_msg(int mod, int lev, const char *format, ... ) PRINTF_ATTRIBUTE(3, 4);
void mp_tmsg(int mod, int lev, const char *format, ... ) PRINTF_ATTRIBUTE(3, 4);
#define mp_dbg mp_msg
+extern bool mp_msg_stdout_in_use;
+
#endif /* MPLAYER_MP_MSG_H */