にゃははー

はへらー

VDPAUを叩いてみる

hatenaさんマジhatena

ってことで、自動バックアップにチェックを入れてもバックアップされなかったので、一回吹っ飛んでるせいで相当書く気力が削がれました。
なので相当荒い内容になっているはずです・・・

VDPAUっていうnVidia様が作ってくれた神がかったライブラリを叩いてみたので、そのキチガイさをお伝えできればと思います。

VDPAUってなんぞ

Video Decoder and Presentation API for UNIX の略で、そのまんまです。

Win32APIとかX11(Xlib)とかOpenGL(GLUT)とかDirectXとか、
「「「「糞がッッッ!!!!」」」」と言われているライブラリが多いですが、VDPAUはそんな事を言うことすらできません。
とりあえず言うことが許されてるのは
????????????????(゜д(゜д(゜д゜ ハァ????????????????
だけです。

Doxygenここですが、先に見ないことをおすすめします。見ると犯されます。typedefとかtypedefとかtypedefとか...

まず初期化

VDPAUには一切関数が出てきません。いや、出てはきますがDoxygenでもわかるとおり関数が一切ありません。
あるのは大量のtypedefと大量の定数とただ1つの変数です。

/* 次から省略 */
#include <vdpau/vdpau.h>
#include <vdpau/vdpau_x11.h>
...
Display *display;
...
VdpDevice device;
VdpGetProcAddress *get_proc_address;
vdp_device_create_x11( display, 0, &device, &get_proc_address );

なんだvdp_device_create_x11って関数あるんじゃん。
いいえ違います。こいつは関数ポインタです。(えっ?変わんない?

とりあえず初期化は出来た。 (雑
deviceっていうデバイスハンドラ(?)は手に入れた。VdpGetProなんとかはよくわからんけどまぁいいか。(よくありません
察しのいい人は察してください。

まず確認・・・

さて、破棄する前にDoxygenでいくつか確認しておくか。

VdpDeviceCreateX11 vdp_device_create_x11

ふむ・・・

typedef VdpStatus VdpDeviceCreateX11(Display *display, int screen,VdpDevice *device, VdpGetProcAddress **get_proc_address)

ん???

typedef VdpStatus 	VdpGetProcAddress (VdpDevice device, VdpFuncId function_id, void **function_pointer)

???????(゜д゜ ハァ???????

typedef VdpStatus 	VdpDeviceDestroy (VdpDevice device)

??????????(゜д(゜д゜ ハァ?????????

#define 	VDP_FUNC_ID_DEVICE_DESTROY

????????????????(゜д(゜д(゜д゜ ハァ????????????????

やっと破棄

つまり、

VdpDeviceDestroy *device_destroy;
GetProcAddress( device, VDP_FUNC_ID_DEVICE_DESTROY, ( void ** )&device_destroy );
device_destroy( device );

マジキチ