aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Makefile1
-rw-r--r--av_log.c111
-rw-r--r--av_log.h1
-rwxr-xr-xconfigure2
-rw-r--r--libmpcodecs/vd_ffmpeg.c51
-rw-r--r--libmpcodecs/ve_x264.c2
-rw-r--r--libmpdemux/demux_mkv.c14
-rw-r--r--mencoder.c2
-rw-r--r--mplayer.c2
9 files changed, 125 insertions, 61 deletions
diff --git a/Makefile b/Makefile
index 6a756f1aa1..5e77679c76 100644
--- a/Makefile
+++ b/Makefile
@@ -328,6 +328,7 @@ SRCS_COMMON-$(XVID4) += libmpcodecs/vd_xvid4.c
SRCS_COMMON-$(ZR) += libmpcodecs/vd_zrmjpeg.c \
libmpcodecs/vf_zrmjpeg.c
SRCS_COMMON = asxparser.c \
+ av_log.c \
codec-cfg.c \
cpudetect.c \
defaultopts.c \
diff --git a/av_log.c b/av_log.c
new file mode 100644
index 0000000000..99f6e91a81
--- /dev/null
+++ b/av_log.c
@@ -0,0 +1,111 @@
+/*
+ * av_log to mp_msg converter
+ * Copyright (C) 2006 Michael Niedermayer
+ * Copyright (C) 2009 Uoti Urpala
+ *
+ * This file is part of MPlayer.
+ *
+ * MPlayer is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * MPlayer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with MPlayer; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include <stdlib.h>
+#include <stdbool.h>
+
+#include "config.h"
+#include "mp_msg.h"
+#include <libavutil/log.h>
+
+#ifdef CONFIG_LIBAVCODEC
+#include <libavcodec/avcodec.h>
+#endif
+
+#ifdef CONFIG_LIBAVFORMAT
+#include <libavformat/avformat.h>
+#endif
+
+static int av_log_level_to_mp_level(int av_level)
+{
+ if (av_level > AV_LOG_INFO)
+ return MSGL_V;
+ if (av_level > AV_LOG_WARNING)
+ return MSGL_INFO;
+ if (av_level > AV_LOG_ERROR)
+ return MSGL_WARN;
+ if (av_level > AV_LOG_FATAL)
+ return MSGL_ERR;
+ return MSGL_FATAL;
+}
+
+static int extract_msg_type_from_ctx(void *ptr)
+{
+ if (!ptr)
+ return MSGT_FIXME;
+
+ AVClass *avc = *(AVClass **)ptr;
+
+#ifdef CONFIG_LIBAVCODEC
+ if (!strcmp(avc->class_name, "AVCodecContext")) {
+ AVCodecContext *s = ptr;
+ if (s->codec) {
+ if (s->codec->type == CODEC_TYPE_AUDIO) {
+ if (s->codec->decode)
+ return MSGT_DECAUDIO;
+ } else if (s->codec->type == CODEC_TYPE_VIDEO) {
+ if (s->codec->decode)
+ return MSGT_DECVIDEO;
+ }
+ // FIXME subtitles, encoders
+ // What msgt for them? There is nothing appropriate...
+ }
+ return MSGT_FIXME;
+ }
+#endif
+
+#ifdef CONFIG_LIBAVFORMAT
+ if (!strcmp(avc->class_name, "AVFormatContext")) {
+ AVFormatContext *s = ptr;
+ if (s->iformat)
+ return MSGT_DEMUXER;
+ else if (s->oformat)
+ return MSGT_MUXER;
+ return MSGT_FIXME;
+ }
+#endif
+
+ return MSGT_FIXME;
+}
+
+static void mp_msg_av_log_callback(void *ptr, int level, const char *fmt,
+ va_list vl)
+{
+ static bool print_prefix = 1;
+ AVClass *avc = ptr ? *(AVClass **)ptr : NULL;
+ int mp_level = av_log_level_to_mp_level(level);
+ int type = extract_msg_type_from_ctx(ptr);
+
+ if (!mp_msg_test(type, mp_level))
+ return;
+
+ if (print_prefix && avc)
+ mp_msg(type, mp_level, "[%s @ %p]", avc->item_name(ptr), avc);
+ print_prefix = fmt[strlen(fmt) - 1] == '\n';
+
+ mp_msg_va(type, mp_level, fmt, vl);
+}
+
+void set_av_log_callback(void)
+{
+ av_log_set_callback(mp_msg_av_log_callback);
+}
diff --git a/av_log.h b/av_log.h
new file mode 100644
index 0000000000..baffb276ce
--- /dev/null
+++ b/av_log.h
@@ -0,0 +1 @@
+void set_av_log_callback(void);
diff --git a/configure b/configure
index 53d39c3852..15b0b63654 100755
--- a/configure
+++ b/configure
@@ -6986,7 +6986,7 @@ if test "$_x264" = auto ; then
cat > $TMPC << EOF
#include <inttypes.h>
#include <x264.h>
-#if X264_BUILD < 76
+#if X264_BUILD < 78
#error We do not support old versions of x264. Get the latest from git.
#endif
int main(void) { x264_encoder_open((void*)0); return 0; }
diff --git a/libmpcodecs/vd_ffmpeg.c b/libmpcodecs/vd_ffmpeg.c
index 886a07f3cb..5e22bc6c81 100644
--- a/libmpcodecs/vd_ffmpeg.c
+++ b/libmpcodecs/vd_ffmpeg.c
@@ -138,56 +138,6 @@ static int control(sh_video_t *sh, int cmd, void *arg, ...){
return CONTROL_UNKNOWN;
}
-static void mp_msp_av_log_callback(void *ptr, int level, const char *fmt, va_list vl)
-{
- static int print_prefix=1;
- AVClass *avc= ptr ? *(AVClass **)ptr : NULL;
- int type= MSGT_FIXME;
- int mp_level;
- char buf[256];
-
- switch(level){
- case AV_LOG_DEBUG: mp_level= MSGL_V ; break;
- case AV_LOG_INFO : mp_level= MSGL_INFO; break;
- case AV_LOG_ERROR: mp_level= MSGL_ERR ; break;
- default : mp_level= MSGL_ERR ; break;
- }
-
- if (!mp_msg_test(type, mp_level)) return;
-
- if(ptr){
- if(!strcmp(avc->class_name, "AVCodecContext")){
- AVCodecContext *s= ptr;
- if(s->codec){
- if(s->codec->type == CODEC_TYPE_AUDIO){
- if(s->codec->decode)
- type= MSGT_DECAUDIO;
- }else if(s->codec->type == CODEC_TYPE_VIDEO){
- if(s->codec->decode)
- type= MSGT_DECVIDEO;
- }
- //FIXME subtitles, encoders (what msgt for them? there is no appropriate ...)
- }
- }else if(!strcmp(avc->class_name, "AVFormatContext")){
-#if 0 //needs libavformat include FIXME iam too lazy to do this cleanly, probably the whole should be moved out of this file ...
- AVFormatContext *s= ptr;
- if(s->iformat)
- type= MSGT_DEMUXER;
- else if(s->oformat)
- type= MSGT_MUXER;
-#endif
- }
- }
-
- if(print_prefix && avc) {
- mp_msg(type, mp_level, "[%s @ %p]", avc->item_name(ptr), avc);
- }
-
- print_prefix= strchr(fmt, '\n') != NULL;
- vsnprintf(buf, sizeof(buf), fmt, vl);
- mp_msg(type, mp_level, buf);
-}
-
static void set_format_params(struct AVCodecContext *avctx, enum PixelFormat fmt){
int imgfmt;
imgfmt = pixfmt2imgfmt(fmt);
@@ -219,7 +169,6 @@ static int init(sh_video_t *sh){
avcodec_init();
avcodec_register_all();
avcodec_initialized=1;
- av_log_set_callback(mp_msp_av_log_callback);
}
ctx = sh->context = malloc(sizeof(vd_ffmpeg_ctx));
diff --git a/libmpcodecs/ve_x264.c b/libmpcodecs/ve_x264.c
index 6733b8c641..303acdb6fe 100644
--- a/libmpcodecs/ve_x264.c
+++ b/libmpcodecs/ve_x264.c
@@ -185,7 +185,7 @@ static int config(struct vf_instance* vf, int width, int height, int d_width, in
mod->mux->bih->biSize= sizeof(BITMAPINFOHEADER) + extradata_size;
}
- if (param.i_bframe > 1 && param.b_bframe_pyramid)
+ if (param.i_bframe > 1 && param.i_bframe_pyramid)
mod->mux->decoder_delay = 2;
else
mod->mux->decoder_delay = param.i_bframe ? 1 : 0;
diff --git a/libmpdemux/demux_mkv.c b/libmpdemux/demux_mkv.c
index 8280a8793e..759b8cf92f 100644
--- a/libmpdemux/demux_mkv.c
+++ b/libmpdemux/demux_mkv.c
@@ -1721,7 +1721,6 @@ demux_mkv_open_audio (demuxer_t *demuxer, mkv_track_t *track, int aid)
{
mkv_demuxer_t *mkv_d = (mkv_demuxer_t *) demuxer->priv;
sh_audio_t *sh_a = new_sh_audio_aid(demuxer, track->tnum, aid);
- demux_packet_t *dp;
if(!sh_a) return 1;
mkv_d->audio_tracks[mkv_d->last_aid] = track->tnum;
@@ -2015,17 +2014,16 @@ demux_mkv_open_audio (demuxer_t *demuxer, mkv_track_t *track, int aid)
if (size < 4 || ptr[0] != 'f' || ptr[1] != 'L' ||
ptr[2] != 'a' || ptr[3] != 'C')
{
- dp = new_demux_packet (4);
- memcpy (dp->buffer, "fLaC", 4);
+ sh_a->codecdata = malloc(4);
+ sh_a->codecdata_len = 4;
+ memcpy(sh_a->codecdata, "fLaC", 4);
}
else
{
- dp = new_demux_packet (size);
- memcpy (dp->buffer, ptr, size);
+ sh_a->codecdata = malloc(size);
+ sh_a->codecdata_len = size;
+ memcpy(sh_a->codecdata, ptr, size);
}
- dp->pts = 0;
- dp->flags = 0;
- ds_add_packet (demuxer->audio, dp);
}
else if (track->a_formattag == mmioFOURCC('W', 'V', 'P', 'K') ||
track->a_formattag == mmioFOURCC('T', 'R', 'H', 'D'))
diff --git a/mencoder.c b/mencoder.c
index 78c8494966..8759053358 100644
--- a/mencoder.c
+++ b/mencoder.c
@@ -37,6 +37,7 @@
#include <sys/time.h>
#include "mp_msg.h"
+#include "av_log.h"
#include "help_mp.h"
#include "codec-cfg.h"
@@ -405,6 +406,7 @@ audio_encoding_params_t aparams;
audio_encoder_t *aencoder = NULL;
mp_msg_init();
+ set_av_log_callback();
// Create the config context and register the options
set_default_mencoder_options(&opts);
diff --git a/mplayer.c b/mplayer.c
index b508dc3661..fb9c00470a 100644
--- a/mplayer.c
+++ b/mplayer.c
@@ -39,6 +39,7 @@
#include <errno.h>
#include "mp_msg.h"
+#include "av_log.h"
#define HELP_MP_DEFINE_STATIC
#include "help_mp.h"
@@ -2906,6 +2907,7 @@ int i;
srand(GetTimerMS());
mp_msg_init();
+ set_av_log_callback();
#ifdef CONFIG_X11
mpctx->x11_state = vo_x11_init_state();