Changeset 4056


Ignore:
Timestamp:
Apr 17, 2012 2:48:29 AM (7 years ago)
Author:
nanang
Message:

Misc (re #1446): redirect ffmpeg logging with custom log callback.

Location:
pjproject/trunk/pjmedia/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjmedia/src/pjmedia-codec/ffmpeg_vid_codecs.c

    r4049 r4056  
    594594        goto on_error; 
    595595 
     596    pjmedia_ffmpeg_add_ref(); 
    596597    avcodec_init(); 
    597598    avcodec_register_all(); 
    598     av_log_set_level(AV_LOG_ERROR); 
    599599 
    600600    /* Enum FFMPEG codecs */ 
     
    855855    ffmpeg_factory.pool = NULL; 
    856856 
     857    pjmedia_ffmpeg_dec_ref(); 
     858 
    857859    return status; 
    858860} 
  • pjproject/trunk/pjmedia/src/pjmedia/converter_libswscale.c

    r3757 r4056  
    185185{ 
    186186    libswscale_factory.op = &libswscale_factory_op; 
     187    pjmedia_ffmpeg_add_ref(); 
    187188    return pjmedia_converter_mgr_register_factory(mgr, &libswscale_factory); 
    188189} 
     
    194195{ 
    195196    PJ_UNUSED_ARG(pool); 
     197    pjmedia_ffmpeg_dec_ref(); 
    196198    return pjmedia_converter_mgr_unregister_factory(mgr, &libswscale_factory, 
    197199                                                    PJ_TRUE); 
  • pjproject/trunk/pjmedia/src/pjmedia/ffmpeg_util.c

    r4044 r4056  
    1919#include <pjmedia/types.h> 
    2020#include <pj/errno.h> 
     21#include <pj/log.h> 
     22#include <pj/string.h> 
    2123 
    2224#if PJMEDIA_HAS_LIBAVFORMAT && PJMEDIA_HAS_LIBAVUTIL 
     
    7577static int pjmedia_ffmpeg_ref_cnt; 
    7678 
     79static void ffmpeg_log_cb(void* ptr, int level, const char* fmt, va_list vl); 
     80 
    7781void pjmedia_ffmpeg_add_ref() 
    7882{ 
    7983    if (pjmedia_ffmpeg_ref_cnt++ == 0) { 
     84        av_log_set_level(AV_LOG_ERROR); 
     85        av_log_set_callback(&ffmpeg_log_cb); 
    8086        av_register_all(); 
    8187    } 
     
    9096    if (pjmedia_ffmpeg_ref_cnt < 0) pjmedia_ffmpeg_ref_cnt = 0; 
    9197} 
     98 
     99 
     100static void ffmpeg_log_cb(void* ptr, int level, const char* fmt, va_list vl) 
     101{ 
     102    const char *LOG_SENDER = "ffmpeg"; 
     103    enum { LOG_LEVEL = 5 }; 
     104    char buf[100]; 
     105    int bufsize = sizeof(buf), len; 
     106    pj_str_t fmt_st; 
     107 
     108    /* Custom callback needs to filter log level by itself */ 
     109    if (level > av_log_get_level()) 
     110        return; 
     111     
     112    /* Add original ffmpeg sender to log format */ 
     113    if (ptr) { 
     114        AVClass* avc = *(AVClass**)ptr; 
     115        len = pj_ansi_snprintf(buf, bufsize, "%s: ", avc->item_name(ptr)); 
     116        bufsize -= len; 
     117    } 
     118 
     119    /* Copy original log format */ 
     120    len = pj_ansi_strlen(fmt); 
     121    if (len > bufsize-1) 
     122        len = bufsize-1; 
     123    pj_memcpy(buf+sizeof(buf)-bufsize, fmt, len); 
     124    bufsize -= len; 
     125 
     126    /* Trim log format */ 
     127    pj_strset(&fmt_st, buf, sizeof(buf)-bufsize); 
     128    pj_strrtrim(&fmt_st); 
     129    buf[fmt_st.slen] = '\0'; 
     130 
     131    pj_log(LOG_SENDER, LOG_LEVEL, buf, vl); 
     132} 
     133 
    92134 
    93135pj_status_t pjmedia_format_id_to_PixelFormat(pjmedia_format_id fmt_id, 
Note: See TracChangeset for help on using the changeset viewer.