Mercurial > mplayer.hg
diff libmpcodecs/vd_ffmpeg.c @ 33871:30f5e5cd3676
Move code for setting up libav* logging callbacks from vd_ffmpeg to a
separate file and also use it when only initializing libavformat.
author | reimar |
---|---|
date | Tue, 09 Aug 2011 19:57:00 +0000 |
parents | 15e182c07689 |
children | a5f1aaf21790 |
line wrap: on
line diff
--- 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;