Mercurial > mplayer.hg
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 |
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 } |