HDまたはQHDグラフィックスとSDビデオの共存

HDまたはQHDグラフィックスとSDビデオを共存させるためのサンプルコードである。
BD-Jでは同時に再生するMovie PlayListの解像度に引きずられてグラフィックスの解像度も変わってしまう(プレーン構成参照)。本プログラムはそれを避けるためのものである。

 

 

Main.java

 

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.bluray.ui.BDVideoConfigTemplate;
import org.davic.media.MediaLocator;
import org.davic.resources.ResourceClient;
import org.davic.resources.ResourceProxy;
import org.havi.ui.HScreen;
import org.havi.ui.HVideoConfiguration;
import org.havi.ui.HVideoDevice;
 
 
// ResourceClientインタフェースを実装する必要がある
public class Main implements Xlet, ResourceClient {
 
    private HVideoDevice device;
    public void initXlet(XletContext context){
        try {
            HScreen screen = HScreen.getDefaultHScreen();
            // Vide Deviceを取得
            device = screen.getDefaultHVideoDevice();
            // configuration取得用のテンプレートを取得
            BDVideoConfigTemplate template= new BDVideoConfigTemplate();            
            // KEEP_RESOLUTIONをテンプレートに設定
            template.setPreference(BDVideoConfigTemplate.KEEP_RESOLUTION, new Object(), BDVideoConfigTemplate.REQUIRED);
            // configuration取得
            HVideoConfiguration config = device.getBestConfiguration(template);
            // Video Deviceを占有
            device.reserveDevice(this);
            // configurationを設定
            device.setVideoConfiguration(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){
        // Video Device占有を開放
        device.releaseDevice();
    }
    // ResourceClientインタフェースを実装する必要がある
    public void notifyRelease(ResourceProxy proxy) {}
    public void release(ResourceProxy proxy) {}
    public boolean requestRelease(ResourceProxy proxy, Object requestData) {return false;}
}

関連する項目

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.