# HG changeset patch # User reimar # Date 1312919820 0 # Node ID 30f5e5cd36763b289522703b0e213ced8bc3d964 # Parent 15e182c0768990f52011326beb63b8e052f9a7ff Move code for setting up libav* logging callbacks from vd_ffmpeg to a separate file and also use it when only initializing libavformat. diff -r 15e182c07689 -r 30f5e5cd3676 Makefile --- a/Makefile Tue Aug 09 19:23:41 2011 +0000 +++ b/Makefile Tue Aug 09 19:57:00 2011 +0000 @@ -60,6 +60,7 @@ SRCS_COMMON-$(FAAD) += libmpcodecs/ad_faad.c SRCS_COMMON-$(FASTMEMCPY) += libvo/aclib.c SRCS_COMMON-$(FFMPEG) += av_opts.c \ + av_helpers.c \ libaf/af_lavcresample.c \ libmpcodecs/ad_ffmpeg.c \ libmpcodecs/vd_ffmpeg.c \ diff -r 15e182c07689 -r 30f5e5cd3676 av_helpers.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/av_helpers.c Tue Aug 09 19:57:00 2011 +0000 @@ -0,0 +1,76 @@ +#include "libavcodec/avcodec.h" +#include "libavformat/avformat.h" +#include "mp_msg.h" +#include "av_helpers.h" + +int avcodec_initialized; +int avformat_initialized; + +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; + + switch(level){ + case AV_LOG_VERBOSE: mp_level = MSGL_V ; break; + 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= level > AV_LOG_DEBUG ? MSGL_DBG2 : MSGL_ERR; break; + } + + if (ptr && !avc) + mp_msg(MSGT_DECVIDEO, MSGL_ERR, "libav* called av_log with context containing a broken AVClass!\n"); + if (avc) { + if(!strcmp(avc->class_name, "AVCodecContext")){ + AVCodecContext *s= ptr; + if(s->codec){ + if(s->codec->type == AVMEDIA_TYPE_AUDIO){ + if(s->codec->decode) + type= MSGT_DECAUDIO; + }else if(s->codec->type == AVMEDIA_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")){ + AVFormatContext *s= ptr; + if(s->iformat) + type= MSGT_DEMUXER; + else if(s->oformat) + type= MSGT_MUXER; + } + } + + 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= strchr(fmt, '\n') != NULL; + mp_msg_va(type, mp_level, fmt, vl); +} + +void init_avcodec(void) +{ + if (!avcodec_initialized) { + avcodec_init(); + avcodec_register_all(); + avcodec_initialized = 1; + av_log_set_callback(mp_msp_av_log_callback); + } +} + +void init_avformat(void) +{ + if (!avformat_initialized) { + av_register_all(); + avformat_initialized = 1; + av_log_set_callback(mp_msp_av_log_callback); + } +} diff -r 15e182c07689 -r 30f5e5cd3676 av_helpers.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/av_helpers.h Tue Aug 09 19:57:00 2011 +0000 @@ -0,0 +1,7 @@ +#ifndef MPLAYER_AV_HELPERS_H +#define MPLAYER_AV_HELPERS_H + +void init_avcodec(void); +void init_avformat(void); + +#endif /* MPLAYER_AV_HELPERS_H */ diff -r 15e182c07689 -r 30f5e5cd3676 libaf/af_lavcac3enc.c --- a/libaf/af_lavcac3enc.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libaf/af_lavcac3enc.c Tue Aug 09 19:57:00 2011 +0000 @@ -25,11 +25,11 @@ #include #include -#include "libmpcodecs/vd_ffmpeg.h" #include "config.h" #include "af.h" #include "help_mp.h" #include "reorder_ch.h" +#include "av_helpers.h" #include "libavcodec/avcodec.h" #include "libavcodec/ac3.h" diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/ad_ffmpeg.c --- a/libmpcodecs/ad_ffmpeg.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/ad_ffmpeg.c Tue Aug 09 19:57:00 2011 +0000 @@ -26,7 +26,7 @@ #include "ad_internal.h" #include "dec_audio.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" #include "libaf/reorder_ch.h" #include "fmt-conversion.h" diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/ae_lavc.c --- a/libmpcodecs/ae_lavc.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/ae_lavc.c Tue Aug 09 19:57:00 2011 +0000 @@ -30,7 +30,7 @@ #include "stream/stream.h" #include "libmpdemux/muxer.h" #include "ae_lavc.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" #include "ve.h" #include "help_mp.h" #include "av_opts.h" diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/vd_ffmpeg.c --- a/libmpcodecs/vd_ffmpeg.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/vd_ffmpeg.c Tue Aug 09 19:57:00 2011 +0000 @@ -25,6 +25,7 @@ #include "mp_msg.h" #include "help_mp.h" #include "av_opts.h" +#include "av_helpers.h" #include "libavutil/common.h" #include "libavutil/intreadwrite.h" @@ -32,7 +33,6 @@ #include "fmt-conversion.h" #include "vd_internal.h" -#include "vd_ffmpeg.h" static const vd_info_t info = { "FFmpeg's libavcodec codec family", @@ -54,8 +54,6 @@ #include "libavcodec/xvmc.h" #endif -int avcodec_initialized=0; - typedef struct { AVCodecContext *avctx; AVFrame *pic; @@ -181,59 +179,6 @@ 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; - - switch(level){ - case AV_LOG_VERBOSE: mp_level = MSGL_V ; break; - 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= level > AV_LOG_DEBUG ? MSGL_DBG2 : MSGL_ERR; break; - } - - if (ptr && !avc) - mp_msg(MSGT_DECVIDEO, MSGL_ERR, "libav* called av_log with context containing a broken AVClass!\n"); - if (avc) { - if(!strcmp(avc->class_name, "AVCodecContext")){ - AVCodecContext *s= ptr; - if(s->codec){ - if(s->codec->type == AVMEDIA_TYPE_AUDIO){ - if(s->codec->decode) - type= MSGT_DECAUDIO; - }else if(s->codec->type == AVMEDIA_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")){ - type= MSGT_DEMUXER; -#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 (!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= strchr(fmt, '\n') != NULL; - mp_msg_va(type, mp_level, fmt, vl); -} - static void set_format_params(struct AVCodecContext *avctx, enum PixelFormat fmt){ int imgfmt; if (fmt == PIX_FMT_NONE) @@ -261,16 +206,6 @@ } } -void init_avcodec(void) -{ - if (!avcodec_initialized) { - avcodec_init(); - avcodec_register_all(); - avcodec_initialized = 1; - av_log_set_callback(mp_msp_av_log_callback); - } -} - // init driver static int init(sh_video_t *sh){ AVCodecContext *avctx; diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/vd_ffmpeg.h --- a/libmpcodecs/vd_ffmpeg.h Tue Aug 09 19:23:41 2011 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/* - * 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. - */ - -#ifndef MPLAYER_VD_FFMPEG_H -#define MPLAYER_VD_FFMPEG_H - -void init_avcodec(void); - -#endif /* MPLAYER_VD_FFMPEG_H */ diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/ve_lavc.c --- a/libmpcodecs/ve_lavc.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/ve_lavc.c Tue Aug 09 19:57:00 2011 +0000 @@ -47,7 +47,7 @@ #include "mp_image.h" #include "ve.h" #include "vf.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" //===========================================================================// diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/vf_fspp.c --- a/libmpcodecs/vf_fspp.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/vf_fspp.c Tue Aug 09 19:57:00 2011 +0000 @@ -45,7 +45,7 @@ #include "img_format.h" #include "mp_image.h" #include "vf.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" #include "libvo/fastmemcpy.h" #include "libavutil/internal.h" diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/vf_lavc.c --- a/libmpcodecs/vf_lavc.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/vf_lavc.c Tue Aug 09 19:57:00 2011 +0000 @@ -28,7 +28,7 @@ #include "img_format.h" #include "mp_image.h" #include "vf.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" #include "libavcodec/avcodec.h" diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/vf_lavcdeint.c --- a/libmpcodecs/vf_lavcdeint.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/vf_lavcdeint.c Tue Aug 09 19:57:00 2011 +0000 @@ -28,7 +28,7 @@ #include "img_format.h" #include "mp_image.h" #include "vf.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" #include "libavcodec/avcodec.h" diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/vf_mcdeint.c --- a/libmpcodecs/vf_mcdeint.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/vf_mcdeint.c Tue Aug 09 19:57:00 2011 +0000 @@ -66,7 +66,7 @@ #include "img_format.h" #include "mp_image.h" #include "vf.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" #define MIN(a,b) ((a) > (b) ? (b) : (a)) #define MAX(a,b) ((a) < (b) ? (b) : (a)) diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/vf_spp.c --- a/libmpcodecs/vf_spp.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/vf_spp.c Tue Aug 09 19:57:00 2011 +0000 @@ -49,7 +49,7 @@ #include "img_format.h" #include "mp_image.h" #include "vf.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" #include "libvo/fastmemcpy.h" #define XMIN(a,b) ((a) < (b) ? (a) : (b)) diff -r 15e182c07689 -r 30f5e5cd3676 libmpcodecs/vf_uspp.c --- a/libmpcodecs/vf_uspp.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpcodecs/vf_uspp.c Tue Aug 09 19:57:00 2011 +0000 @@ -35,7 +35,7 @@ #include "img_format.h" #include "mp_image.h" #include "vf.h" -#include "vd_ffmpeg.h" +#include "av_helpers.h" #include "libvo/fastmemcpy.h" #define XMIN(a,b) ((a) < (b) ? (a) : (b)) diff -r 15e182c07689 -r 30f5e5cd3676 libmpdemux/demux_lavf.c --- a/libmpdemux/demux_lavf.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpdemux/demux_lavf.c Tue Aug 09 19:57:00 2011 +0000 @@ -27,6 +27,7 @@ #include "mp_msg.h" #include "help_mp.h" #include "av_opts.h" +#include "av_helpers.h" #include "stream/stream.h" #include "aviprint.h" @@ -154,7 +155,7 @@ demuxer->priv=calloc(sizeof(lavf_priv_t),1); priv= demuxer->priv; - av_register_all(); + init_avformat(); if (opt_format) { if (strcmp(opt_format, "help") == 0) { diff -r 15e182c07689 -r 30f5e5cd3676 libmpdemux/demuxer.c --- a/libmpdemux/demuxer.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpdemux/demuxer.c Tue Aug 09 19:57:00 2011 +0000 @@ -44,7 +44,6 @@ #include "libmpcodecs/dec_audio.h" #include "libmpcodecs/dec_video.h" #include "libmpcodecs/dec_teletext.h" -#include "libmpcodecs/vd_ffmpeg.h" #ifdef CONFIG_ASS #include "libass/ass.h" @@ -56,6 +55,7 @@ #if MP_INPUT_BUFFER_PADDING_SIZE < FF_INPUT_BUFFER_PADDING_SIZE #error MP_INPUT_BUFFER_PADDING_SIZE is too small! #endif +#include "av_helpers.h" #endif // This is quite experimental, in particular it will mess up the pts values diff -r 15e182c07689 -r 30f5e5cd3676 libmpdemux/muxer_lavf.c --- a/libmpdemux/muxer_lavf.c Tue Aug 09 19:23:41 2011 +0000 +++ b/libmpdemux/muxer_lavf.c Tue Aug 09 19:57:00 2011 +0000 @@ -29,6 +29,7 @@ #include "aviheader.h" #include "ms_hdr.h" #include "av_opts.h" +#include "av_helpers.h" #include "stream/stream.h" #include "muxer.h" @@ -317,7 +318,7 @@ muxer_priv_t *priv; AVOutputFormat *fmt = NULL; - av_register_all(); + init_avformat(); if (conf_format && strcmp(conf_format, "help") == 0) { list_formats(); diff -r 15e182c07689 -r 30f5e5cd3676 stream/stream_ffmpeg.c --- a/stream/stream_ffmpeg.c Tue Aug 09 19:23:41 2011 +0000 +++ b/stream/stream_ffmpeg.c Tue Aug 09 19:57:00 2011 +0000 @@ -24,6 +24,7 @@ #include "stream.h" #include "m_option.h" #include "m_struct.h" +#include "av_helpers.h" static int fill_buffer(stream_t *s, char *buffer, int max_len) { @@ -87,7 +88,7 @@ int64_t size; int dummy; - av_register_all(); + init_avformat(); if (mode == STREAM_READ) flags = URL_RDONLY; else if (mode == STREAM_WRITE)