1920×1080のビデオと960×540(Quater HD or QHD)のグラフィックスを組み合わせるためのサンプルコード。
BD-J Object fileのinitial_HAVi_configurationでグラフィックスがQHDになるように設定していても、HDビデオを再生すると引きずられてGraphics DeviceもHDになってしまう(プレーン構成参照)。本プログラムではそれを避けるものである。
QHDが必要な場面は稀であると思われるが、以下のような場合に有用である。
BD-J Object fileのinitial_HAVi_configurationでグラフィックスがQHDになるように設定していても、HDビデオを再生すると引きずられてGraphics DeviceもHDになってしまう(プレーン構成参照)。本プログラムではそれを避けるものである。
QHDが必要な場面は稀であると思われるが、以下のような場合に有用である。
- 高速化したい場合:解像度が低いほど一般的に有利
- イメージファイルのデータサイズを小さくしたい場合
- 日本のデジタル放送のデータを流用したい場合:デジタル放送のグラフィックスプレーンの解像度は960×540であるため
Main.java
import java.awt.Dimension;
import javax.media.Manager;
import javax.media.Player;
import javax.tv.xlet.Xlet;
import javax.tv.xlet.XletContext;
import org.bluray.net.BDLocator;
import org.davic.media.MediaLocator;
import org.davic.resources.ResourceClient;
import org.davic.resources.ResourceProxy;
import org.havi.ui.HGraphicsConfigTemplate;
import org.havi.ui.HGraphicsConfiguration;
import org.havi.ui.HGraphicsDevice;
import org.havi.ui.HScreen;
import org.havi.ui.HScreenConfigTemplate;
// ResourceClientインタフェースを実装する必要がある
public class Main implements Xlet, ResourceClient {
private HGraphicsDevice device;
public void initXlet(XletContext context){
try {
// Graphics Deviceを取得
device = HScreen.getDefaultHScreen().getDefaultHGraphicsDevice();
// configuration取得用テンプレートの取得
HGraphicsConfigTemplate template= new HGraphicsConfigTemplate();
// QHDをテンプレートに設定
// Programming HD DVD and Blu-ray Discのサンプルコードでは"SCREEN_RECTANGLE"となっているが
//PIXEL_RESOLUTIONの間違い
template.setPreference(HScreenConfigTemplate.PIXEL_RESOLUTION, new Dimension(960, 540),
HScreenConfigTemplate.REQUIRED);
// configuration取得
HGraphicsConfiguration config = device.getBestConfiguration(template);
// Graphics Deviceを占有
device.reserveDevice(this);
// configurationを設定
device.setGraphicsConfiguration(config);
// Movie PlayListを再生開始
BDLocator loc = new BDLocator("bd://1.PLAYLIST:00000");
MediaLocator ml = new MediaLocator(loc);
Player player = Manager.createPlayer(ml);
player.start();
} catch(Throwable thr) {
}
}
public void startXlet(){ }
public void pauseXlet(){ }
public void destroyXlet(boolean unconditional){
// Graphics Deviceの占有を開放
device.releaseDevice();
}
// ResourceClientインタフェースを実装する必要がある
public void notifyRelease(ResourceProxy proxy) {}
public void release(ResourceProxy proxy) {}
public boolean requestRelease(ResourceProxy proxy, Object requestData) {return false;}
}
- 関連する項目
- プレーン構成
- Programming HD DVD and Blu-ray Disc: 第17章に本機能に関する記載あり。なお、サンプルコードが間違えているので注意。