annotate av_helpers.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
children 5f1faa91717e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
33871
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
1 #include "libavcodec/avcodec.h"
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
2 #include "libavformat/avformat.h"
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
3 #include "mp_msg.h"
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
4 #include "av_helpers.h"
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
5
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
6 int avcodec_initialized;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
7 int avformat_initialized;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
8
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
9 static void mp_msp_av_log_callback(void *ptr, int level, const char *fmt,
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
10 va_list vl)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
11 {
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
12 static int print_prefix=1;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
13 AVClass *avc= ptr ? *(AVClass **)ptr : NULL;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
14 int type= MSGT_FIXME;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
15 int mp_level;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
16
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
17 switch(level){
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
18 case AV_LOG_VERBOSE: mp_level = MSGL_V ; break;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
19 case AV_LOG_DEBUG: mp_level= MSGL_V ; break;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
20 case AV_LOG_INFO : mp_level= MSGL_INFO; break;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
21 case AV_LOG_ERROR: mp_level= MSGL_ERR ; break;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
22 default : mp_level= level > AV_LOG_DEBUG ? MSGL_DBG2 : MSGL_ERR; break;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
23 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
24
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
25 if (ptr && !avc)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
26 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "libav* called av_log with context containing a broken AVClass!\n");
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
27 if (avc) {
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
28 if(!strcmp(avc->class_name, "AVCodecContext")){
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
29 AVCodecContext *s= ptr;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
30 if(s->codec){
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
31 if(s->codec->type == AVMEDIA_TYPE_AUDIO){
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
32 if(s->codec->decode)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
33 type= MSGT_DECAUDIO;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
34 }else if(s->codec->type == AVMEDIA_TYPE_VIDEO){
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
35 if(s->codec->decode)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
36 type= MSGT_DECVIDEO;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
37 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
38 //FIXME subtitles, encoders (what msgt for them? there is no appropriate ...)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
39 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
40 }else if(!strcmp(avc->class_name, "AVFormatContext")){
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
41 AVFormatContext *s= ptr;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
42 if(s->iformat)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
43 type= MSGT_DEMUXER;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
44 else if(s->oformat)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
45 type= MSGT_MUXER;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
46 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
47 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
48
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
49 if (!mp_msg_test(type, mp_level)) return;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
50
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
51 if(print_prefix && avc) {
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
52 mp_msg(type, mp_level, "[%s @ %p]", avc->item_name(ptr), avc);
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
53 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
54
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
55 print_prefix= strchr(fmt, '\n') != NULL;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
56 mp_msg_va(type, mp_level, fmt, vl);
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
57 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
58
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
59 void init_avcodec(void)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
60 {
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
61 if (!avcodec_initialized) {
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
62 avcodec_init();
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
63 avcodec_register_all();
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
64 avcodec_initialized = 1;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
65 av_log_set_callback(mp_msp_av_log_callback);
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
66 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
67 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
68
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
69 void init_avformat(void)
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
70 {
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
71 if (!avformat_initialized) {
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
72 av_register_all();
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
73 avformat_initialized = 1;
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
74 av_log_set_callback(mp_msp_av_log_callback);
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
75 }
30f5e5cd3676 Move code for setting up libav* logging callbacks from vd_ffmpeg to a
reimar
parents:
diff changeset
76 }