モジュールの書き方
ディスクリプタの記述
vlc_module_begin()とvlc_module_end ()で囲み、基本的な情報をset_xxx()で与える
vlc_module_begin() set_shortname(N_("Hello")) set_description(N_("Hello interface")) set_capability("interface", 0) set_callbacks(Open, Close) set_category(CAT_INTERFACE) add_string("hello-who", "world", "Target", "Whom to say hello to.", false) vlc_module_end()
ショートネーム
モジュールの名前を短く記述する。
set_shortname(N_("Hello"))
ディスクリプション
モジュールの概要を記述する。
set_description(N_("Hello interface"))
機能とスコア
以下の種類の機能とスコア(整数値)を与えてどのロードするモジュールの機能を特定する。
機能 | 機能概要 |
audio filter | イコライザーなどの音声フィルタ |
audio mixer | 音声チャンネルミキサーなど |
audio output | DirectXなどのような音声出力 |
decoder | デコーダー |
demux | ファイルフォーマットなど |
encoder | x264などのようなエンコーダー |
interface | Qt4などのインターフェース |
meta reader | メタ情報リーダー |
packetizer | パケット化モジュール |
playlist export | m3uのようなプレイリスト出力 |
services_discovery | UpnpやDLNAなどのようなPCやネットワークからの外部コンテンツを取得するモジュール |
sout access | ストリーミングのアクセス用 |
sout mux | ストリーミングやエンコーディングのときの合成モジュール |
stream_filter | ストリームフィルタ |
text renderer | 字幕やタイトルなどのOSD表示モジュール |
video filter | コントラスト調整などの映像フィルタ |
visualization2 | 音楽から作成するビジュアライザー |
vout display | Direct3DやXvのようなビデオ出力モジュール |
set_capability("機能", スコア)
カテゴリの種類
以下のカテゴリの種類を記述する。
CAT_INTERFACE
CAT_AUDIO
CAT_VIDEO
CAT_INPUT
CAT_SOUT
CAT_ADVANCED
CAT_PLAYLIST
set_category(カテゴリ)
コールバックの登録
VLC coreがどうやってインスタンス化と実行するかを知るためにモジュールの有効化と無効化の処理を登録する
set_callbacks(Open, Close)
モジュールの開始
モジュールの開始(有効化)させる処理で、成功したらVLC_SUCCESSを返す。開始中に、
static int Open(vlc_object_t *obj) { intf_thread_t *intf = (intf_thread_t *)obj; /* Allocate internal state */ intf_sys_t *sys = malloc(sizeof (*sys)); if (unlikely(sys == NULL)) return VLC_ENOMEM; intf->p_sys = sys; /* Read settings */ char *who = var_InheritString(intf, "hello-who"); if (who == NULL){ msg_Err(intf, "Nobody to say hello to!"); goto error; } sys->who = who; msg_Info(intf, "Hello %s!", who); return VLC_SUCCESS; error: free(sys); return VLC_EGENERIC; }
モジュールの終了
モジュールを終了させる処理
static void Close(vlc_object_t *obj)
{
intf_thread_t *intf = (intf_thread_t *)obj;
intf_sys_t *sys = intf->p_sys;
msg_Info(intf, "Good bye %s!");
/* Free internal state */
free(sys->who);
free(sys);
}
ffmpegモジュールの例
libavcodecを利用した音声・映像のデコード/エンコード
vlc_module_begin () set_shortname( "FFmpeg") add_shortcut( "ffmpeg" ) set_category( CAT_INPUT ) set_subcategory( SUBCAT_INPUT_VCODEC ) /* decoder main module */ set_description( N_("FFmpeg audio/video decoder") ) set_help( MODULE_DESCRIPTION ) set_capability( "decoder", 70 ) set_section( N_("Decoding") , NULL ) set_callbacks( OpenDecoder, CloseDecoder )