diff options
-rw-r--r-- | Makefile | 1 | ||||
-rw-r--r-- | av_log.c | 111 | ||||
-rw-r--r-- | av_log.h | 1 | ||||
-rwxr-xr-x | configure | 2 | ||||
-rw-r--r-- | libmpcodecs/vd_ffmpeg.c | 51 | ||||
-rw-r--r-- | libmpcodecs/ve_x264.c | 2 | ||||
-rw-r--r-- | libmpdemux/demux_mkv.c | 14 | ||||
-rw-r--r-- | mencoder.c | 2 | ||||
-rw-r--r-- | mplayer.c | 2 |
9 files changed, 125 insertions, 61 deletions
@@ -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); @@ -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); @@ -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(); |