android hdmi 开发,Android TV HDMI开发

文章目录

一、分辨率

1.1、获取/设置分辨率

1.2、初始化默认分辨率

1.2.1、最优分辨率

1.2.2、最大分辨率

二、电视机信息

三、待机

在进行机顶盒ROM开发时,HDMI相关功能是常见的功能模块,本篇文章就简单介绍一些常见的HDMI相关需求开发。

常见的HDMI相关功能可分为三大块:(通过HDMI线获取/设置)分辨率、(通过HDMI线获取)电视机信息、(HDMI)待机。

一、分辨率

机顶盒通过HDMI线与TV相连时,是通过HDMI线(获取TV的EDID)来获取TV支持的分辨率情况的,所以与此相关的功能有获取/设置分辨率、初始化默认分辨率等。

1.1、获取/设置分辨率

该功能的相关代码代码看上去和HDMI“没多大关系”,属于Android通用性功能,其实不然,该功能与HDMI息息相关。接下来就以Hi3798MV300和Amlogic905两种平台来简单介绍。

先以Hi3798MV300为例,获取分辨率用到的接口和Android原生流程是一样的,主要来自于frameworks/base/core/java/android/os/display/DisplayManager.java,关键接口如下:

private int[] mAllDisplayStandard = {

DISPLAY_STANDARD_1080P_60,

DISPLAY_STANDARD_1080P_50,

DISPLAY_STANDARD_1080P_30,

DISPLAY_STANDARD_1080P_25,

DISPLAY_STANDARD_1080P_24,

DISPLAY_STANDARD_1080I_60,

DISPLAY_STANDARD_1080I_50,

DISPLAY_STANDARD_720P_60,

DISPLAY_STANDARD_720P_50,

DISPLAY_STANDARD_576P_50,

DISPLAY_STANDARD_480P_60,

DISPLAY_STANDARD_PAL,

DISPLAY_STANDARD_NTSC,

DISPLAY_STANDARD_3840_2160P_24,

DISPLAY_STANDARD_3840_2160P_25,

DISPLAY_STANDARD_3840_2160P_30,

DISPLAY_STANDARD_3840_2160P_50,

DISPLAY_STANDARD_3840_2160P_60,

DISPLAY_STANDARD_4096_2160P_24,

DISPLAY_STANDARD_4096_2160P_25,

DISPLAY_STANDARD_4096_2160P_30,

DISPLAY_STANDARD_4096_2160P_50,

DISPLAY_STANDARD_4096_2160P_60,

};

public DisplayManager(IDisplayManager server) {

mdisplay = server;

//see display.c::get_hdmi_capability

// hisi format value fmt cap index

mMapEncFmtToIndex.put(ENC_FMT_1080P_60 , 1 );

mMapEncFmtToIndex.put(ENC_FMT_1080P_50 , 2 );

mMapEncFmtToIndex.put(ENC_FMT_1080P_30 , 3 );

mMapEncFmtToIndex.put(ENC_FMT_1080P_25 , 4 );

mMapEncFmtToIndex.put(ENC_FMT_1080P_24 , 5 );

mMapEncFmtToIndex.put(ENC_FMT_1080i_60 , 6 );

mMapEncFmtToIndex.put(ENC_FMT_1080i_50 , 7 );

mMapEncFmtToIndex.put(ENC_FMT_720P_60 , 8 );

mMapEncFmtToIndex.put(ENC_FMT_720P_50 , 9 );

mMapEncFmtToIndex.put(ENC_FMT_576P_50 , 10);

mMapEncFmtToIndex.put(ENC_FMT_480P_60 , 11);

mMapEncFmtToIndex.put(ENC_FMT_PAL , 12);

mMapEncFmtToIndex.put(ENC_FMT_NTSC , 15);

mMapEncFmtToIndex.put(ENC_FMT_3840x2160_24 , 44);

mMapEncFmtToIndex.put(ENC_FMT_3840x2160_25 , 45);

mMapEncFmtToIndex.put(ENC_FMT_3840x2160_30 , 46);

mMapEncFmtToIndex.put(ENC_FMT_3840x2160_50 , 47);

mMapEncFmtToIndex.put(ENC_FMT_3840x2160_60 , 48);

mMapEncFmtToIndex.put(ENC_FMT_4096X2160_24 , 49);

mMapEncFmtToIndex.put(ENC_FMT_4096X2160_25 , 50);

mMapEncFmtToIndex.put(ENC_FMT_4096X2160_30 , 51);

mMapEncFmtToIndex.put(ENC_FMT_4096X2160_50 , 52);

mMapEncFmtToIndex.put(ENC_FMT_4096X2160_60 , 53);

try{

int[] dispCapability = mdisplay.getDisplayCapability();

for(int i = 0; i < dispCapability.length; i++){

Log.d("DisplayManager.java", "dispCapability[" + i + "]=" + dispCapability[i]);

}

if(dispCapability != null){

int supportFmtCnt = 0;

int[] supportFmt = new int[mAllDisplayStandard.length];

for(int i = 0; i < mAllDisplayStandard.length; i++){

if(dispCapability[mMapEncFmtToIndex.get(covertCMCCFmtToHisi(mAllDisplayStandard[i]))] == 1){

supportFmt[supportFmtCnt] = mAllDisplayStandard[i];

supportFmtCnt++;

Log.d("DisplayManager.java", "supportFmt:" + mAllDisplayStandard[i]);

}

Log.d("DisplayManager.java", "supportFmtCnt:" + supportFmtCnt);

}

mStandard = new int[supportFmtCnt];

System.arraycopy(supportFmt, 0, mStandard, 0, supportFmtCnt);

}else{

mStandard = new int[0];

}

}

catch(Exception ex){

mStandard = new int[0];

}

}

public int[] getAllSupportStandards() {

return mStandard;

}

public boolean isSupportStandard(int standard) {

boolean ret = false;

for (int i = 0; i < mStandard.length; i++) {

if(standard == mStandard[i]){

ret = true;

break;

}

}

return ret;

}

public void setDisplayStandard(int standard) {

int hisiFmt = -1;

int ret = -1;

if(isSupportStandard(standard)){

try {

hisiFmt = covertCMCCFmtToHisi(standard);

if (hisiFmt >= ENC_FMT_1080P_60) {

ret = mdisplay.setFmt(hisiFmt);

}

} catch(Exception ex) {

Log.e(TAG,"setDisplayStandard: " + ex);

}</

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值