改变VLC模块参数

 
改变VLC模块参数
一、动态改变参数:
    查询得到对象,直接设置参数。
1、filter参数
        libvlc_media_player_t *p_mediaplayer; // 输入播放器指针
        vout_thread_t *p_vout = GetVout( p_mediaplayer, p_e );

         if( p_vout )
        {
                filter_t *p_filter = filter_chain_GetFilter( p_vout->p->p_vf2_chain, 0, psz_filter_name );

                 if ( p_filter )
                {
    // .....
    int i_ret = var_Set( p_filter, psz_param, val);
}
        }

 

2、subfilter参数
        libvlc_media_player_t *p_mediaplayer; // 输入播放器指针
        input_thread_t *p_input;
        vlc_object_t *p_obj;
        vlc_value_t val;
        p_input = libvlc_get_input_thread( p_mi, p_e );
         if( !p_input )
                return;

        p_obj    = vlc_object_find_name( p_input, psz_filter_name, FIND_CHILD );
         if( p_obj )
        {            
    // .....
    int i_ret = var_Set( p_obj , psz_param, val);
        }

 
3、Media player参数
  
    vout_thread_t *p_vout = GetVout( p_mi, p_e );
         if(p_vout)
         {            
    // .....
    int i_ret = var_Set(p_vout , psz_param, val);
        }
 
4、Instance参数(实例参数)
 
        libvlc_instance_t *p_instance;    // 输入实例指针
         libvlc_int_t *p_libvlc = p_instance->p_libvlc_int;
         if (p_libvlc)
         {            
    // .....
    int i_ret = var_Set(p_libvlc, psz_param, val);
        }
 
二、改变默认参数:
模块调用前(例如打开媒体前),静态设置。
(1) 可以通过VLC.exe的命令行传入默认参数;
vlc.exe -vvv --extraintf=logger
 
(2) 也可以在调用libvlc_new函数创建实例时,传入默认参数;
           const char* vlc_args[32] = {};
    int vlc_args_num =0;

      vlc_args[vlc_args_num++] = "-vvv";          // 日志输出的级别
      vlc_args[vlc_args_num++] = "--extraintf=logger";  // 日志输出

    /* init vlc modules, should be done only once */
    m_pInstance = libvlc_new (vlc_args_num , vlc_args, &ex);
 
(3)  也可以在打开媒体前,传入默认参数; 
      szOption = ":deinterlace-mode=blend";            // Deinterlace滤镜参数:反交错参数
      libvlc_media_add_option(m,szOption ,&ex);

    /* Create a media player playing environement */
    m_pMediaPlayer = libvlc_media_player_new_from_media (m, &ex);
 
(4) 也可以运行时程序改变;
默认参数存储在模块树中。用程序改变默认参数,可使用下列函数:
#define config_GetType(a,b) __config_GetType(VLC_OBJECT(a),b)
#define config_GetInt(a,b) __config_GetInt(VLC_OBJECT(a),b)
#define config_PutInt(a,b,c) __config_PutInt(VLC_OBJECT(a),b,c)
#define config_GetFloat(a,b) __config_GetFloat(VLC_OBJECT(a),b)
#define config_PutFloat(a,b,c) __config_PutFloat(VLC_OBJECT(a),b,c)
#define config_GetPsz(a,b) __config_GetPsz(VLC_OBJECT(a),b)
#define config_PutPsz(a,b,c) __config_PutPsz(VLC_OBJECT(a),b,c)

程序示例:
        libvlc_instance_t *p_instance;    // 输入实例指针
         vlc_value_t value;        // 输入值
         libvlc_int_t *p_libvlc = p_instance->p_libvlc_int;
         if (p_libvlc)
         {            
    // .....
    config_PutInt(p_libvlc, psz_param, value.i_int);
        }
 
三、说明
1、如果要动态改变参数,VLC模块中最好创建为“实例参数”(VLC Instance Param)。
   例如:Demux模块中,创建"my-log-receive"模块参数:
bool b_log_receive = var_CreateGetBool( p_demux->p_libvlc, "my-log-receive");
 
2、模块中创建参数的流程如下:
   (1) 对象是否已创建该参数?有则返回。
   (2) 访问父对象或Instance对象,如果有则引用,并返回。
   (3) 访问模块的默认参数,判断是否是模块参数?是则创建。

 

你可能感兴趣的:(静态,职场,动态,改变,VLC,休闲,模块参数)