DirectX11 でマルチフルスクリーン

Windwos 10 になってから、 DirectX11 の挙動で妙な点を発見しました。
以前 Windows 8.0 で OpenGL をマルチディスプレイで使った際にも変な動きがありました。それについての詳細情報は以前の日記を参照してください。OpenGL での問題の動きは Windows10 1703 でも発生していないようです。
今回の問題は、 SetFullscreenState が失敗して、各ディスプレイでフルスクリーンに遷移できないというものです。

現挙動の確認

昔ながらのコードが悪いのかと思い、 IDXGIFactory2 を使用して、 CreateSwapChainForHwnd でスワップチェインを作成するようにしてみました。
また、 DXGI_SWAP_CHAIN_FULLSCREEN_DESC にも各ディスプレイから取得した情報で値をセットするようにし、 Windowed メンバを TRUE にした状態で、フルスクリーンのスワップチェインを作成するようにしました。もちろん、各画面に応じて別のウィンドウとなるため、ウィンドウ (HWND) は2つ作成しています。

これでアプリケーションを実行すると、一瞬フルスクリーンモードになるのですが、すぐに解除されてしまいウィンドウモードでの実行となってしまいました。 NVIDIA, Intel ともに同じ動きをしているので、 Microsoft Windows 側の仕様変更が疑われます。

GetFullscreenState で状態を確認して、フルスクリーンモードに再度遷移する、と実装を修正して実行を試みました。結果はある程度はフルスクリーンモード状態になって、その後解除され、再びフルスクリーンモードに遷移して・・・と繰り返す動きでした。

続きを読む


CentOS (on Hyper-V) に Chinachu をセットアップ

Windows10 の Hyper-V の中に Chinachu をセットアップしてみました。
基本的には CentOS 7 (1708) へ Chinachu のインストール手順と変わらないです。以前に構築した Mirakurun の環境と接続するため、実行環境が別、 OS も別、という条件下になります。
同一の OS に Mirakurun, Chinachu をインストールして使う場合には今回のような手順にはならない点には注意してください

仮想マシンの準備

Hyper-V の第2世代の仮想マシンとして作成しました。以下のような構成にしています。ポイントになるのはネットワークアクセスが必要なので、仮想スイッチを作成、外に出られるようにしておくことです。

仮想スイッチマネージャでインターネットへアクセスできるように仮想スイッチを作成します。
種類は “外部ネットワーク” を選択して、実際に搭載しているネットワークアダプタをコンボボックスで選べばよいと思います。複数のネットワークアダプタを搭載している場合には、ここでインターネットに出られるアダプタを選択する必要があります。ここで作成した仮想スイッチを使うように仮想マシンを設定します。

続いて CentOS は 最小インストールで構築したためいくつかのパッケージが不足している状態です。
そのため以下のパッケージをインストールしておきます。

定番の作業ではありますが、 SELinux も無効にしておきます。
/etc/sysconfig/selinux ファイルを編集して、 SELINUX=disabled としておきます。その後再起動を行います。

時刻合わせのために chrony のセットアップをしておきます。

/etc/chrony.conf を開いて、 server の項目を変更しておきます。

この部分は、各自の NTP サーバーとして近いところを記述しておくのが理想的です。

続きを読む


Windows で Mirakurun

録画PC環境のリプレース計画を進めていました。ギリギリまで現役だったのは Atom 330 で組んだ PT1 機でした。しかしながら、非力さも目立ってきて録画以外のことは安心してやらせられない状態でした。この環境がとうとう電源周りから異音を発するようになってしまい、急遽計画を前倒しして進めることにしました。

今回の機材は予備としていた PX-W3PE rev1.3 を使用します。このボードもまた十分に古いものですが、 PT3 が今は手に入りにくいことと、後継の PX-W3PE4 はまだ怪しい状態なので仕方なくです。

PX-W3PE のドライバが CentOS 6.x の環境でしか動かないということも足かせになって、 Linux で組むのを諦めました。そんな中、 Windows 環境で Mirakurun を動かした話を見かけたのでこれでやってみることにしました。

参考にさせてもらったのがこちらのサイトです。
さわっても熱くない花火 / Windows10で作るMirakurun + Chinachu Gammaな録画サーバー ~VagrantとPT3(BonDriver)を添えて~

今回はこの中の Windows10 で Mirakurun の動作を確認するまでをまとめました。
続きを読む


Docker で epgrecUNA 構築

CentOS の環境で Docker を用いた epgrecUNA の構築にチャレンジしてみました。 PT3 など PTx シリーズを使用している場合には、既に Docker で環境を作る例があるようです。
今回は手持ちの USB チューナーを用いて作るという点で異なります。使用するのは、昔から持っている KTV-FSUSB2 というものです。

Dockerの準備

以下のようにして、新しい Docker を入れるようにします。

Docker Compose 準備

続いて Docker Compose のインストールを行います。

epgrecUNAインストール

Github から DockerEpgrecUNA を clone しておきます。

続いて、必要になる以下のファイルらを入手し、 epgrec_centos のフォルダ内に配置しておきます。

  • epgdumpUNA160127.tar.gz
  • epgrecUNA_151114.tar.gz
  • epgrecUNA151114Fix1.tar.gz
  • epgrecUNA151114Fix2.tar.gz

Docker Compose により環境を構築、稼働させます。

一応、 usb デバイスを Docker コンテナの中に渡して録画などはそちらで行うようになっています。このとき録画するユーザーのグループの違いによりうまく動かないことがありました。
録画ファイルの置き場や、ユーザー&パスワード等、デフォルトで困る部分は docker-compose 前に編集しておきましょう。

まとめ

今回の Dockerfile らについては、 docker-epgrecUNAを参考にさせてもらいました。

実は Ubuntu の環境でもトライしたのでそちらのコンテナも置いてあります。 Ubuntu でやる場合には、 Docker-compose.yml の該当箇所を変更する必要があります。
また、この docker-compose.yml や Dockerfile らについても自分のところではこれでうまくいったというだけなので、全ての環境で自動でうまく動く保証はありませんし、サポートは致しません。

色々といじってみて、 前回の Samba の件に続いて、 Docker の環境を構築するいい練習にはなったと思います。

補足

最近は KTV-FSUSB2 は生産終わっているようですね。後継の機種は、 KTV-FSMINI というものになっているようです。この KTV-FSMINI もまた Linux で動作させられるとのことです。地上デジタル放送に限れば、まだ USB でのチューナー選びはいくつかの候補が残されているようですね。


AC-8260NGW

折角 PC 環境に M.2 のスロットがあってそこに WiFi モジュールがさせる状態だったので、 Intel Dual Band Wireless を搭載してみました。先日の、「M.2 の NGFF 形状 WiFi モジュールと繋ぐケーブル」 の日記の本題にあたる内容となります。

このモジュールの方はパッケージ版は見当たらないものの Amazon で普通に見つかりますし、バルクも入手性がよさそうです。


このモジュールは従来版と違って M.2 専用のものとなっており、アンテナに繋ぐためのケーブルにも注意が必要です。従来版は mini PCIe のモジュールとつなげるためのもののようですね。 新しい方は MHF4 タイプという検索しづらいタイプになってます。
続きを読む


CentOS WiFi アダプタを交換しつつ使いたい

今更ですが、CentOS の 6.9 を使用しています。
事情により使用する USB WiFi アダプタを交換しつつ接続をしたいという状況で、通常であれば wlan0, wlan1, … とアダプタ分のインターフェースが増えてしまいます。
ただ接続する USB WiFi アダプタは場面により1つなので、出来れば wlan0 のみで運用したいと思っています。

続きを読む


Windows10 コンパクト化

Windows 10 では WIMBoot に代わり、コンパクト OS というものによってシステムディスクの容量節約ができるようになりました。手元の環境で、 Windows Update まで適用した後で、コンパクト化を実行してみました。

コンパクト化

通常の Windows 10 の環境をコンパクト化するには、管理者権限コマンドプロンプトを開いて、以下のコマンドを実行するだけです。

このあと、処理が始まります。それなりの長時間、 CPU 使用率とディスク I/O が高い時間が続きます。
処理が完了するとどのくらい圧縮されたかが表示されます。今回の場合では 3GB 程度の空き容量が増加しました。

続きを読む


M.2 の NGFF 形状 WiFi モジュールと繋ぐケーブル

最近の PC マザーボード上にある WiFi モジュール用は mini PCIe ではなく M.2 に変わりつつあるようです。このモジュールとアンテナまでを繋ぐケーブルが必要になるのですが、これが最近大変なことになっていました。

MHF4-080-SMA という WiFi モジュールとアンテナを繋ぐためのちょうどいい長さのケーブルは最近入手が難しいようです。amazon でも品切れしているようです。

しかし、つい最近別の商品ですが MHF4, SMA コネクタを両端に持つケーブルおよびアンテナのセットを販売してくれているのを発見しました。

これが無ければ、 WLN-M という Shuttle のほうから出ているものを購入しようかと思っていました。こちらならモジュールからアンテナまでセットです。しかもケーブルの長さが違うものが2セットほど入っているという充実ぶりです。

折角 M.2 スロットもあるので、 WiFi を USB で外付けするより内蔵してしまいたいという野望ですが、モジュールの入手よりもケーブルのほうに苦戦するという結果になりました。手元の USB 3.0 の 866 Mbps WiFi ドングルでは、 ピークで 400M ほどで通信が出来ていたので、これを Intel の M.2 WiFi モジュールの方に変えたらどのくらいの性能が出せるようになるか楽しみです。


Docker で Samba

最近 Docker によるコンテナに興味がわいて触り始めました。
これまでは仮想マシン推しだったのですが、環境の再構成や配布といった点でコンテナの方が都合が良さそうな場面も多く感じたことが理由です。

Docker とは

Docker が提供してくれる利便性については各所で説明されています。ここでは、 Docker はコンテナと呼ばれるものに環境ごとを閉じ込めて、実行させるものと考えています。
また環境を閉じ込めて実行させるものという点のみをみると、仮想マシンが提供するものと同じなのですが、コンテナの方は以下のようなメリットもあります。

  • 動作が軽量
  • コンテナサイズが小

こういった点から開発環境をコンテナで構築して使用するといった用途に使われたりします。環境が閉じているのでこれを実環境にデプロイでき、開発と実環境の差異によるトラブルも最低限になったりします。

初めてのコンテナ起動

ここでは CentOS 1708 をインストールした環境で初めてのコンテナを起動するまでを説明します。

インストール手順

CentOS 1708 の時点であっても、 yum(dnf) でインストールできるものは古いため以下のようにして新しいものをインストールするようにしました。

コンテナ起動

コンテナを作成してコンテナ内の Bash シェルを起動してみます。
以下のコマンドを実行すると、コンテナで bash が起動してそのシェルに接続されます。

起動したシェルから抜けるには、「Ctrl+P, Ctrl+Q」 と入力します。シェルを Ctrl+D で抜けると、コンテナで起動したシェルが終了するため、コンテナもまた終了状態となります。

環境を作る

こうやって作ったコンテナのなかで、必要なものをインストールして環境を整えていきます。このときに、何をやったのかをメモをとりつつ作業をするのをオススメします。
というのもコンテナにどのようなことを行って環境を作ったのかを設定ファイルのようなものに記述することによって、
その設定ファイル+αのものを配布するだけで、受け取った人が同じ環境を構築することができるようになるからです。この設定ファイルは Dockerfile と呼ばれます。
作ったコンテナのイメージをそのままエクスポートして、それを渡すと言うこともできるので Dockerfile の作成は必ずしも必要ではありません。

続きを読む


HLSL pow 関数の怪

pow 関数の挙動が昔と今で変わった!という話を聞いたので調査することにしました。

今回はスペキュラーの計算で使用している pow 関数の計算が妙なことになっているとのことだったので同じようにスペキュラの計算を行ってみることにします。なおインターネットで調べてみると、同じような症状に出遭っているような文面を見かけることができました。

傾き指向プログラミング / Direct3D 11のカリング設定
こちらの方では、「Specularの計算中powを使うのですが、これの結果がやたらとマイナスの値になるため、最終的に合算した色が真っ黒になるようです。」 と記述しています。
続きを読む