Edited at

OS X MavericksでSDLが画面初期化できなくて落ちるやつ

More than 3 years have passed since last update.

週末はホビープログラマ、ということで。

ちょっと MLT (Media Lovin' Toolkit) で遊ぼうと思って

最新の mlt-0.9.2 をビルドして、Pythonバインディングのサンプル (mlt-0.9.2/src/swig/python/play.py) に適当な動画ファイルを渡して実行したら

Python[7087:d07] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error (1000) creating CGSWindow on line 263'

とか出て落ちるわけですよ

PythonとかSWIGのせいではなさそうです

mlt.Consumer() で "sdl" 以外のConsumerプラグイン、例えば "sdl_audio" とか "rt_audio" を指定するとちゃんと音だけ出るのです

SDLを入れなおしたりビルドしなおしたりXCodeをアップデートしたり、色々やりましたけど

結論からいうと、

http://stackoverflow.com/questions/12641755/sdl-video-init-causes-exception-on-mac-os-x-10-8

にある pre_init() をまるっと mlt-0.9.2/src/modules/sdl/consumer_sdl.c に貼り付けて、consumer_start() の先頭で呼ぶようにしたら解決しました。

(libSDLmainをリンクする、というのも試してみたけどうまくいかなかった)

Macでは、SDLのビデオカードの初期化に問題があって、それが最新版 (SDL 1.2.15)でも直っていないとかそんなような話のようです。

====

ちなみに

なんでOpenCVじゃなくて?って思われた方の為に。

先に試してます。


  • cv2では開きたい動画が開けなかった(codecの対応が弱いのか?ffmpegでは開けてるのだけど)

  • 音声も利用したい

といった辺り。pyffmpeg はメンテナンスされてなくて最新のffmpegに対応してないらしいし。