android4.0.4 增加HDMI設定
最近到4412最基本的都調了 然後覺得沒事做了 所以增加一個HDMI的設定 不能閒著
以下使用的是廣州斯道的icool210開發板 原始碼修改如下
最開始我是先在設定里加上這些設定然後在去實現功能 這裡就一起說了 之前android2.3裡有HDMI設定所以這裡就參照那個增加 首先修改Setting
檢視libhdmi庫首先檢視下hdmi能設定的格式 原始碼路徑
device/samsung/common/s5p/libhdmi/SecHdmi.cpp
你會發現有如下程式碼
ResolutionValue根據這個我們大致知道了支援了格式 下面來修改SettingmHdmiResolutionValueList[0] = 1080960; mHdmiResolutionValueList[1] = 1080950; mHdmiResolutionValueList[2] = 1080930; mHdmiResolutionValueList[3] = 1080160; mHdmiResolutionValueList[4] = 1080150; mHdmiResolutionValueList[5] = 720960; mHdmiResolutionValueList[6] = 720950; mHdmiResolutionValueList[7] = 5769501; mHdmiResolutionValueList[8] = 5769502; mHdmiResolutionValueList[9] = 4809601; mHdmiResolutionValueList[10] = 4809602;
原始碼路徑 packages/apps/Settings/res/values/arrays.xml
增加如下程式碼
原始碼路徑 packages/apps/Settings/res/values/strings.xml<!-- TV Out settings. --> <string-array name="tv_resolution_entries"> <item>1080P_60</item> <item>1080P_50</item> <item>1080P_30</item> <item>1080I_60</item> <item>1080I_50</item> <item>720P_60</item> <item>720P_50</item> <item>576P_50_16_9</item> <item>576P_50_4_3</item> <item>480P_60_16_9</item> <item>480P_60_4_3</item> </string-array> <!-- Do not translate. --> <string-array name="tv_resolution_values" translatable="false"> <!-- Do not translate. --> <item>1080960</item> <!-- Do not translate. --> <item>1080950</item> <!-- Do not translate. --> <item>1080930</item> <!-- Do not translate. --> <item>1080160</item> <!-- Do not translate. --> <item>1080150</item> <!-- Do not translate. --> <item>720960</item> <!-- Do not translate. --> <item>720950</item> <!-- Do not translate. --> <item>5769501</item> <!-- Do not translate. --> <item>5769502</item> <!-- Do not translate. --> <item>4809601</item> <!-- Do not translate. --> <item>4809602</item> </string-array> <!-- TV Out settings. --> <string-array name="tv_hdcp_entries"> <item>Disable</item> <item>Enable</item> </string-array> <!-- Do not translate. --> <string-array name="tv_hdcp_values" translatable="false"> <!-- Do not translate. --> <item>0</item> <!-- Do not translate. --> <item>1</item> </string-array> <!-- TV Out settings. --> <string-array name="tv_mode_entries"> <item>HDMI(YCbCr)</item> <item>HDMI(RGB)</item> <item>DVI</item> </string-array> <!-- Do not translate. --> <string-array name="tv_mode_values" translatable="false"> <!-- Do not translate. --> <item>0</item> <!-- Do not translate. --> <item>1</item> <!-- Do not translate. --> <item>2</item> </string-array>
增加如下內容
原始碼路徑 packages/apps/Settings/res/xml/display_settings.xml<!-- Sound & display settings screen, setting option name to change TV Mode --> <string name="tv_mode">TV Mode</string> <!-- Sound & display settings screen, setting option summary to change TV Mode --> <string name="tv_mode_summary">Choose TV out mode</string> <!-- Sound & display settings screen, setting option name to change TV Resolution --> <string name="tv_resolution">TV Resolution</string> <!-- Sound & display settings screen, setting option summary to change TV Resolution --> <string name="tv_resolution_summary">Choose TV resolution</string> <!-- Sound & display settings screen, setting option name to change TV HDCP --> <string name="tv_hdcp">TV HDCP</string> <!-- Sound & display settings screen, setting option summary to change TV HDCP --> <string name="tv_hdcp_summary">Enable HDMI HDCP</string>
增加如下內容
<ListPreference
android:key="tv_mode"
android:title="@string/tv_mode"
android:summary="@string/tv_mode_summary"
android:persistent="false"
android:entries="@array/tv_mode_entries"
android:entryValues="@array/tv_mode_values" />
<ListPreference
android:key="tv_resolution"
android:title="@string/tv_resolution"
android:summary="@string/tv_resolution_summary"
android:persistent="false"
android:entries="@array/tv_resolution_entries"
android:entryValues="@array/tv_resolution_values" />
<ListPreference
android:key="tv_hdcp"
android:title="@string/tv_hdcp"
android:summary="@string/tv_hdcp_summary"
android:persistent="false"
android:entries="@array/tv_hdcp_entries"
android:entryValues="@array/tv_hdcp_values" />
接著修改framework
原始碼路徑:frameworks/base/core/java/android/provider/Settings.java
增加如下內容:
/**
* The tv out mode.
*/
public static final String TV_MODE = "tv_mode";
/**
* The tv out resolution.
*/
public static final String TV_RESOLUTION = "tv_resolution";
/**
* The tv out mode.
*/
public static final String TV_HDCP = "tv_hdcp";
接著在這個檔案裡搜所SCREEN_OFF_TIMEOUT
會在public static final String[] SETTINGS_TO_BACKUP這個數組裡找到一個 然後在它下面增加如下
TV_MODE,
TV_RESOLUTION,
TV_HDCP,
按照我的理解這裡應該是用來儲存資料到資料庫的 然後系統再次啟動後設置還能儲存
接著增加呼叫hdmi相關函式的介面 這裡我是直接把2.3的拷過來然後進行的修改
建立相應目錄增加以下檔案frameworks/base/slsi/java/com/slsi/sec/android/HdmiService.java
內容如下
package com.slsi.sec.android;
public class HdmiService
{
static {
System.loadLibrary("hdmiservice_jni");
}
public native void setHdmiCableStatus(int status);
public native void setHdmiMode(int mode);
public native void setHdmiResolution(int resolution);
public native void setHdmiHdcp(int enHdcp);
public native void initHdmiService();
}
增加以下檔案frameworks/base/slsi/jni/Android.mk
內容如下
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \
com_slsi_sec_android_HdmiService.cpp \
onload.cpp
LOCAL_C_INCLUDES += \
$(JNI_H_INCLUDE)
LOCAL_SHARED_LIBRARIES := \
libcutils \
libandroid_runtime \
libnativehelper
ifeq ($(S5P_BOARD_USES_HDMI),true)
LOCAL_C_INCLUDES += \
device/samsung/common/s5p/libhdmi
LOCAL_SHARED_LIBRARIES += libhdmiclient
LOCAL_CFLAGS += -DBOARD_USES_HDMI
endif
LOCAL_PRELINK_MODULE := false
ifeq ($(TARGET_SIMULATOR),true)
ifeq ($(TARGET_OS),linux)
ifeq ($(TARGET_ARCH),x86)
LOCAL_LDLIBS += -lpthread -ldl -lrt
endif
endif
endif
ifeq ($(WITH_MALLOC_LEAK_CHECK),true)
LOCAL_CFLAGS += -DMALLOC_LEAK_CHECK
endif
LOCAL_MODULE_TAGS := optional eng
LOCAL_MODULE:= libhdmiservice_jni
include $(BUILD_SHARED_LIBRARY)
增加以下檔案frameworks/base/slsi/jni/com_slsi_sec_android_HdmiService.cpp
內容如下
#define LOG_TAG "HDMIStatusService"
#include "jni.h"
#include "JNIHelp.h"
#include <cutils/log.h>
#if defined(BOARD_USES_HDMI)
#include "SecHdmiClient.h"
#endif
namespace android {
/*
* Class: com_slsi_sec_android_HdmiService
* Method: setHdmiCableStatus
* Signature: (I)V
*/
static void com_slsi_sec_android_HdmiService_setHdmiCableStatus
(JNIEnv *env, jobject obj, jint i)
{
int result = 0;
#if defined(BOARD_USES_HDMI)
//LOGD("%s HDMI status: %d", __func__, i);
(SecHdmiClient::getInstance())->setHdmiCableStatus(i);
#else
return;
#endif
//return result;
}
/*
* Class: com_slsi_sec_android_setHdmiMode
* Method: setHdmiMode
* Signature: (I)V
*/
static void com_slsi_sec_android_HdmiService_setHdmiMode
(JNIEnv *env, jobject obj, jint i)
{
int result = 0;
#if defined(BOARD_USES_HDMI)
(SecHdmiClient::getInstance())->setHdmiMode(i);
#else
return;
#endif
}
/*
* Class: com_slsi_sec_android_setHdmiResolution
* Method: setHdmiResolution
* Signature: (I)V
*/
static void com_slsi_sec_android_HdmiService_setHdmiResolution
(JNIEnv *env, jobject obj, jint i)
{
int result = 0;
#if defined(BOARD_USES_HDMI)
(SecHdmiClient::getInstance())->setHdmiResolution(i);
#else
return;
#endif
}
/*
* Class: com_slsi_sec_android_setHdmiHdcp
* Method: setHdmiHdcp
* Signature: (I)V
*/
static void com_slsi_sec_android_HdmiService_setHdmiHdcp
(JNIEnv *env, jobject obj, jint i)
{
int result = 0;
#if defined(BOARD_USES_HDMI)
(SecHdmiClient::getInstance())->setHdmiHdcp(i);
#else
return;
#endif
}
/*
* Class: com_slsi_sec_android_HdmiService
* Method: initHdmiService
* Signature: ()V
*/
static void com_slsi_sec_android_HdmiService_initHdmiService
(JNIEnv *env, jobject obj)
{
#if defined(BOARD_USES_HDMI)
LOGI("%s ", __func__);
//(SecHdmiClient::getInstance())->init();
#else
return;
#endif
//return result;
}
static JNINativeMethod gMethods[] = {
{"setHdmiCableStatus", "(I)V", (void*)com_slsi_sec_android_HdmiService_setHdmiCableStatus},
{"setHdmiMode", "(I)V", (void*)com_slsi_sec_android_HdmiService_setHdmiMode},
{"setHdmiResolution", "(I)V", (void*)com_slsi_sec_android_HdmiService_setHdmiResolution},
{"setHdmiHdcp", "(I)V", (void*)com_slsi_sec_android_HdmiService_setHdmiHdcp},
{"initHdmiService", "()V", (void*)com_slsi_sec_android_HdmiService_initHdmiService},
};
int register_com_samsung_sec_android_HdmiService(JNIEnv* env)
{
jclass clazz = env->FindClass("com/slsi/sec/android/HdmiService");
if (clazz == NULL)
{
LOGE("Can't find com/slsi/sec/android/HdmiService");
return -1;
}
return jniRegisterNativeMethods(env, "com/slsi/sec/android/HdmiService",
gMethods, NELEM(gMethods));
}
} /* namespace android */
增加如下檔案:frameworks/base/slsi/jni/onload.cpp
內容如下
#include "JNIHelp.h"
#include "jni.h"
#include "utils/Log.h"
#include "utils/misc.h"
namespace android {
int register_com_samsung_sec_android_HdmiService(JNIEnv* env);
};
using namespace android;
extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
{
JNIEnv* env = NULL;
jint result = -1;
if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
LOGE("GetEnv failed!");
return result;
}
LOG_ASSERT(env, "Could not retrieve the env!");
if(register_com_samsung_sec_android_HdmiService(env) == -1)
LOGE("%s register_com_samsung_sec_android_HdmiStatus is failed", __func__);
return JNI_VERSION_1_4;
}
然後修改build/core/pathmap.mk
在FRAMEWORKS_BASE_SUBDIRS裡增加slsi \
我們要讓他啟動的時候能能自動設定成設定的引數所以
接著修改frameworks/base/services/java/com/android/server/SystemServer.java
增加如下內容
import com.slsi.sec.android.HdmiService;
import static android.provider.Settings.System.TV_MODE;
import static android.provider.Settings.System.TV_RESOLUTION;
import static android.provider.Settings.System.TV_HDCP;
private HdmiService mHdmiService;
然後在
mContentResolver = context.getContentResolver();
之後增加如下程式碼
Slog.i(TAG, "HDMI Setting");
mHdmiService = new HdmiService();
mHdmiService.setHdmiMode(Settings.System.getInt(mContentResolver, TV_MODE, 0));
mHdmiService.setHdmiResolution(Settings.System.getInt(mContentResolver, TV_RESOLUTION, 4809601));
mHdmiService.setHdmiHdcp(Settings.System.getInt(mContentResolver, TV_HDCP, 0));
跟著最後修改Setting裡的DisplaySetting
原始碼路徑packages/apps/Settings/src/com/android/settings/DisplaySettings.java
增加如下內容
import com.slsi.sec.android.HdmiService;
import static android.provider.Settings.System.TV_MODE;
import static android.provider.Settings.System.TV_RESOLUTION;
import static android.provider.Settings.System.TV_HDCP;
private static final String KEY_TV_MODE = "tv_mode";
private static final String KEY_TV_RESOLUTION = "tv_resolution";
private static final String KEY_TV_HDCP = "tv_hdcp";
private static final int FALLBACK_TV_MODE_VALUE = 0;
private static final int FALLBACK_TV_RESOLUTION_VALUE = 4809601;
private static final int FALLBACK_TV_HDCP_VALUE = 0;
private HdmiService mHdmiService;
然後在onCreate增加如下程式碼
ListPreference tvModePreference =
(ListPreference) findPreference(KEY_TV_MODE);
tvModePreference.setValue(String.valueOf(Settings.System.getInt(
resolver, TV_MODE, FALLBACK_TV_MODE_VALUE)));
tvModePreference.setOnPreferenceChangeListener(this);
ListPreference tvResolutionPreference =
(ListPreference) findPreference(KEY_TV_RESOLUTION);
tvResolutionPreference.setValue(String.valueOf(Settings.System.getInt(
resolver, TV_RESOLUTION, FALLBACK_TV_RESOLUTION_VALUE)));
tvResolutionPreference.setOnPreferenceChangeListener(this);
ListPreference tvHdcpPreference =
(ListPreference) findPreference(KEY_TV_HDCP);
tvHdcpPreference.setValue(String.valueOf(Settings.System.getInt(
resolver, TV_HDCP, FALLBACK_TV_HDCP_VALUE)));
tvHdcpPreference.setOnPreferenceChangeListener(this);
mHdmiService = new HdmiService();
接著在onPreferenceChange函式裡增加如下內容
if (KEY_TV_MODE.equals(key)) {
int value = Integer.parseInt((String) objValue);
try {
Settings.System.putInt(getContentResolver(),
TV_MODE, value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist tv mode setting", e);
}
mHdmiService.setHdmiMode(value);
}
if (KEY_TV_RESOLUTION.equals(key)) {
int value = Integer.parseInt((String) objValue);
try {
Settings.System.putInt(getContentResolver(),
TV_RESOLUTION, value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist tv resolution setting", e);
}
mHdmiService.setHdmiResolution(value);
}if (KEY_TV_HDCP.equals(key)) {
int value = Integer.parseInt((String) objValue);
try {
Settings.System.putInt(getContentResolver(),
TV_HDCP, value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist tv resolution setting", e);
}
mHdmiService.setHdmiHdcp(value);
}
基本上就搞定了 最後如圖所示
相關patch我也上傳到了我的資源 不知道為啥沒顯示出來 需要的可以去下載
相關推薦
android4.0.4 增加HDMI設定
最近到4412最基本的都調了 然後覺得沒事做了 所以增加一個HDMI的設定 不能閒著 以下使用的是廣州斯道的icool210開發板 原始碼修改如下 最開始我是先在設定里加上這些設定然後在去實現功能 這裡就一起說了 之前android2.3裡有HDMI設定所以這裡就參照那個增
libvlc3.0.4 增加錄影功能
最近做一個專案,需要播放流媒體。網上參考了很多,最終選了vlc。開發到一半,發現libvlc庫沒有錄影介面,在網上搜了很多資料,總結如下: 具體方法如下: 一、修改原始碼 1、修改vlc-3.0.4/lib目錄下的video.c檔案中新增介面libvlc_video_toggle_rec
android4.0.4 dispatchDraw NullPointerException
出現的異常狀況: 03-10 15:39:41.386: D/AndroidRuntime(8000): Shutting down VM 03-10 15:39:41.386: W/dalvikvm(8000): threadid=1: thread exiting w
U8800 B528版本刷Android4.0.4 攻略
手機機型:U8800,版本:2.2 升級步驟大致如下: 1.到華為官方網站下載Android2.3.5版本,地址為:http://www.huaweidevice.com/cn/downloadCenter.do?method=toDownloadFile&flay
《ServerSuperIO Designer IDE使用教程》-4.增加臺達PLC驅動及使用教程,從0到1的改變。釋出:v4.2.3版本
v4.2.3 更新內容:1.優化資料儲存部分,提高效率。2.修復資料庫服務停止造成程式異常退出的現象。3.修復本機沒有串列埠造成無法增加裝置驅動的情況。4.增加編輯裝置和監測點配置資訊功能。5.增加臺達PLC驅動。 v4.2.2 下載地址:官方下載 目
Ubuntu18.0.4安裝防火牆啟動、並設定允許策略
1、安裝ufw : sudo apt install ufw 2、啟動防火牆並設定開機啟動: sudo ufw enable sudo ufw default deny 3、設定允許ssh訪問: sudo ufw allow ssh 4、檢視防火牆狀態: su
Android4.4 增加的/system/priv-app system/delapp跟 原來的/system/app 有啥區別呢?
delapp裡面的可以直接解除安裝的運營商預置應用,app是系統核心應用不可解除安裝 /system/priv-app中包括Launcher,systemui, settingsprovider等,均是系統的核心應用,這些應用能使用系統級的許可權,4.4之前的所有/sys
Ubuntu16.0.4 設定python3為預設
一般 在Ubuntu終端輸入python 顯示的是python2.7的,但是現在python3.x支援的很多了,而且我們總是要像python3進步的。 所以我這裡將python3 設定為預設的python 使用的命令主要有這兩個(alternatives機制
可在廣域網部署執行的QQ高仿版 -- GG嘰嘰V3.4,增加系統設定、最近聯絡人、群功能(原始碼)
自從上次版本(GG嘰嘰V3.2,增加離線訊息、離線檔案功能)釋出後,我個人覺得主要的大功能都實現得差不多了,接下來的幾個版本將不斷優化GG的細節,提高其可用性。這次版本更新的內容主要是為GG增加了系統設定、並完善的了群所需的基礎功能。 一.GG V3.4 新增功能展現 1.群功能完善 (1)建立群
android4.0增加遙控器按鍵步驟
1、ir_keyboard.h增加物理鍵值。 遙控器的物理鍵值可以通過在IR_Keypad_IntIsr函式裡面(ir_keyboard.c) 列印IR_Keypad_GetValue的返回值,這個地方屬於核心列印,直接使用printk打印不出來,需
OSG3.4.0+VS2013編譯與設定
前前後後差不多已經編譯了10次以上OSG了吧,都是淚,時間一週一週的浪費,也不能叫浪費吧,總算是瞭解了一點點C++的編譯啊,CMAKE的使用啊什麼的。 每換一臺裝置就要重新編譯一次,並不是強迫症,用編譯好的,總是會出錯,母雞為啥子。非常仔細的記錄,希望大家不要重蹈覆轍,還有
ubuntu16.0.4設定mysql遠端訪問
Ubuntu16.0.4設定mysql遠端訪問 一般程式開發過程為了方便除錯中會需要遠端訪問資料庫,而mysql本身是預設只能訪問localhost,所以需要做一些設定。 1.首先,需要修改mysq
使用zabbix3.0.4的ICMP Ping模版實現對客戶端網絡狀態的監控
host -1 ping 修改 cat onf 設置報警 amp 網絡狀態 一、登陸Zabbix服務器做以下操作: 1.fping安裝 wget http://www.fping.org/dist/fping-3.16.tar.gz tar zxvf fping-3.16.
zabbix3.0.4使用percona-monitoring-plugins插件來監控mysql5.6的詳細實現過程
sta moni nod .rpm exp oss percona 密碼 slave zabbix3.0.4使用percona-monitoring-plugins插件來監控mysql5.6的詳細實現過程 因為Zabbix自帶的MySQL監控沒有提供可以直接使用的Key,所
debian下 Hadoop 1.0.4 集群配置及運行WordCount
速度 虛擬 裏的 否則 ado 修改 安裝包 name 節點 說明:我用的是壓縮包安裝,不是安裝包 官網安裝說明:http://hadoop.apache.org/docs/r1.1.2/cluster_setup.html,繁冗,看的眼花...大部分人應該都不是按照這個來
Zabbix3.0.4監控Windows的CPU使用百分比
log window 效果 blog -1 perf nbsp 技術分享 分享 Zabbix3.0.4監控Windows的CPU使用百分比 Zabbix 自帶的模塊沒有 CPU 使用率(百分比)這個監控項,我們可以通過添加計數器的方式實現 CPU 百分比的監控。 1.在Za
Oracle11.2.0.4升級170418PATCH後login.sql無法使用
oracle sqlplus login.sql最近生產上的數據庫升級到了11.2.0.4當前最新的PATCH——170418,但是在使用sqlplus登錄數據庫進行操作時,發現與以往登錄時不同的地方。打PATCH以前登錄時的截圖:打PATCH之後 登錄時的截圖:從截圖上直觀看到的是登錄時的信息沒有顯示出來
【extjs6學習筆記】0.4 準備: 書籍與文檔
學習筆記 翻譯 example nbsp detail started ext js 6 art ear Ext JS 6 By Example Ext JS Essentials Learning Ext JS - Fourth Edition Ext JS 6:
ShareREC for iOS v1.0.4 已經公布
新版 調用 down pan 變形 popu 沒有 1.0 post ShareREC for iOS v1.0.4 已經公布 版本號:v1.0.4 2015-3-13 1、新增視頻列表的篩選排序功能 2、修復在開始錄制後,沒有調用結束錄制直接進入社區崩潰問題 3、優化
Android4.0設置界面改動總結(二)
idg 手機 中新 pop istview _id 實例 cycle 系統應用 今年1月份的時候。有和大家分享給予Android4.0+系統設置的改動:Android4.0設置界面改動總結 時隔半年。回頭看看那個時候的改動。事實上是有非常多問題的,比方說