jit.movie @output_texture 1 で取得したGPU上の動画テクスチャを指定した解像度でアスペクト比を保ったまま描画:#max7 #maxmsp #gen

GPU上の動画テクスチャのアスペクト比と解像度を固定したい

スクリーンショット 2015-02-15 18.44.32
あのタグで待ってるをMax7に対応させようと改良しています。Max7化のポイントは、jit.movieから直接GPUに動画テクスチャを送る機能を使ったパフォーマンスアップです。

ただし、問題がありました。jit.gl.pixの解像度が、第一インレットに入力される解像度に固定されてしまうという点です。これの何が問題かと言うと、VJソフトは16:9や4:3等の異なるアスペクト比や、HDやSD画質など異なる解像度を持つ動画を次々に切り替えて再生するので、そのままでは最終出力の解像度やアスペクト比も次々に変わってしまいます。横長の間延びした動画になってしまったり、SD解像度にHD画質の動画がひっぱられて解像度が落ちてしまったり。

そこで今回は、上記の画像のように16:9の画面に4:3の動画を、指定した解像度で出すのが目的となります。

パッチ

スクリーンショット 2015-02-15 18.40.16

ポイントは、jit.gl.pixの第一インレットに解像度を指定するMatrixを入力する所です。これを使ってjit.gl.pixの出力を常に同じ解像度に固定します。また第二インレットに jit.movie @output_texture 1 で取得した動画テクスチャを入れます。この動画テクスチャのアスペクト比を保持するために、解像度を別途jit.gl.pixに入力してあげる必要があります。なぜならjit.gl.pixでは、in2に入力したテクスチャから直接dimを取得できないためです。param dim2 としてパラメーターを与えています。

ちなみに動画テクスチャの解像度をjit.movieから取り出す際に、dimメッセージで取得すると正しい値が取れないので、getmoviedimを使いました。

jit.gl.pixの内部

スクリーンショット 2015-02-25 23.59.09

in1に入れたマトリクスは、全く利用しません。あくまで解像度を固定するために入力しています。テクスチャのアスペクト比の調整は、右側のコードで行って、最終的にin2の動画テクスチャをsampleオブジェクトで取り出します。

結果

スクリーンショット 2015-02-15 18.40.21

指定した解像度とアスペクト比にする事は出来ましたが、まだ問題があります。上記画像を見ると、左右領域にゴミが残ってしまっています。本来ここの領域は真っ黒にしたいのです。この原因はjit.gl.pixの内部でsampleのオプションを@boundmode clampにしているためです。@boundmodeはいくつか指定があるのですが、他のwrapやmirrorでももちろん駄目でした。指定した領域にテクスチャが無い場合に単純に黒くするオプションが欲しい所・・・。自分で黒く塗るプログラムを追加するのが解決策になりそうですが。

スクリーンショット 2015-02-15 18.45.05

動画の縁まで色が付いていると、こんな感じになってしまいます。

Code

<pre><code> ———-begin_max5_patcher———- 1105.3ocyXsraaaDEcszWw.tVUfyPQJprxcQQWUfBzzUEEFiHGSON7EHGZK2 frv1.Inosv.ENHEMKR.RQSVktoKZS+bTkc+L57fzV1lhhlhVPKDE3ki3bNm4 duyYzi61QabzDRpF3AfuAzoyi61oiLjHPm766nEfm33iSkCSyIJHfDxz5odF iLgIie9u7lYmb5rm8wYO+UEOLkcnOQ9zhHgYAzPeBS9tfWELJiUDUOOZLl4r KMza6DhCSgPCi958.lV1hufl5huP7qfuM+2PckyVz389D3PMQrmzsq3RuUjc +26dqfce72mdzGl8ae+4u5Oue4ngIpNbz5dgim+iOa1G90KN68bx9EXVBcx8 LY00qCYMZSxN6GdwEm8OSO4oSO9Old7eO8jildxaEKtO8mt3rWe+xWnYsRfQ sIe2ix5GDsOk.1hC03L11hGkkP.Pvm+ke8+9WOWP9REki+YUBwzid4zid8bU Bu67SOkO9h4xmFRbhxBkSH5tof6DEx1A6PtYrT52IigFzWuYhMxTb0RGo9pb s1rIRsPR2IN0Kip0bxpWBYgnEP1BQUEhcXLQwT9zw+bIwJQKP5JY.Jy7r0U8 XJWLP5ZyApPbfhReZBE62DcJjb.+0dqLRFXLHckJzVnbLFG5UWIAoCkhgJYA sfZQ8Vj3Ib7R.xhQWZ.HgfcqoLXTpLXTYVwxjASYoUgL.QvpzATi5IEPRSwd jaIDdDVgJTSA.Up..Wn.T45ushwyWRrv0+Qs35ueD1UHI.3Jk82PVaHI5fgv 9l8.CqNqePKxZ4FPRyDfA.mcwI7bMacvvq51zt8.3y21A4lWpWmfBaHCrpRT F0xZhme+Xtl7vO6qdHXKORHPDLiQ86+HBItONMliy97GviuRUIUpTd9E9Aps ZobnhLqrggc6rwZPjKY9VcavazlWeAMW9FsCa28YWTaVb5ggN2gcYZ0lrpjk 7lrVCqJWwps61r.6tagyXQ7VCTGwMtI3CXQx5uMkFQPygJKI1UIWMp4LKxyy +xTjXbBOqiQR1lDhG6es5j1cOIp3TAKurwDpLib40xHtQKmmbPThuadCXQmA dUqNXf4psuTklxtK9SK92NrpLY.1DMAyXI24CuT9Bt3UI+sbubHsF0pnvH5. Eesq1H50RBjiPd9ya7WYImFQ7qqBoQYINEfRsodOvUyiKIkQC4MHhBmaL1Wa L6RccIgyWv3RSE0PRLpW5pQcQicMPyvMJz.WanwpFnYvZCMhYBtDzvOyz5DN KcoResAGiMpLGjwFUQ9MRKVPtiw5EOKKWFNZI3If5FGw2rOuOro8.wwLQJmL VbeMnaeKL+OhYjd+h6tBFsF+fi1n5b.qSs55a0+FcEJGNiVuvAViZU35AN0o MeS6qpLufii2mjjl+NkHgaVauHoqpg8j2RCU2JeiZIj8oEiWZCSCmv8Tw3Fp DGiW3TZhskl5mxO+bRH2qmXrcEy7S59+.FPnmjB ———–end_max5_patcher———– </code></pre>

 

Leave a Comment