<span style="font-size:18px;">一直以來視頻顯示不正常的問題都困擾了好久,特別是不是用標準的Mediaplayer來播放的時候,今天就來總結一下</span>
</pre><pre name="code" class="java">public static final String VIDEO_AXITS_PATH = "/sys/class/video/axis"; // 視頻顯示區域
public static final String DISPLAY_AXIS_PATH = "/sys/class/display/axis"; //ui顯示區域
public static final String OSD0_SCALE_AXIS_PATH = "/sys/class/graphics/fb0/scale_axis";
public static final String OSD1_SCALE_AXIS_PATH = "/sys/class/graphics/fb1/scale_axis";
public static final String REQUEST_2X_SCALE_PATH = "/sys/class/graphics/fb0/request2XScale"; //ui顯示區域
public static final String OSD1_SCALE_PATH = "/sys/class/graphics/fb1/scale";
public static final String OSD_PATH = "/sys/class/graphics/fb0/blank";
public static final String[] MODES = {"1080i", "1080p", "720p", "480i", "480p", "480cvbs", "576i", "576p", "576cvbs"};
public static final int[] WIDTH_DEFAULT = {1920, 1920, 1280, 720, 720, 720, 720, 720, 720};
public static final int[] HEIGHT_DEFAULT = {1080, 1080, 720, 480, 480, 480, 576, 576, 576};
writeSysFile("/sys/class/graphics/fb0/blank","2"); //這個是開啓關閉osd 2是開啓 1是關閉
writeSysFile("/sys/class/video/disable_video","0"); //視頻顯示開啓還是關閉,0是開啓,1是關閉
</pre><pre name="code" class="java">//這個完全可以替代 echo val > path
<pre name="code" class="java">public static int writeFile(String path, String val) {
try {
BufferedWriter writer = new BufferedWriter(new FileWriter(path), 64);
try {
writer.write(val);
} finally {
writer.close();
}
return 0;
} catch (IOException e) {
Log.e(TAG, "IO Exception when write: " + path, e);
return 1;
}
}
//這個方法完全可以替代 cat filepath
public static String readFile(String fileName) {
String res = "";
try {
FileInputStream fin = new FileInputStream(fileName); // int length =
// fin.available();
int length = 32;
byte[] buffer = new byte[length];
fin.read(buffer);
res = EncodingUtils.getString(buffer, "UTF-8");
res.trim();
fin.close();
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
//這個是我做cvbs的時候顯示不正常的問題,通過這樣可以正常顯示
<pre name="code" class="java">String outputmode = VideoUtil.readFile("/sys/class/display/mode");
private void setCvbsRect(){
outputmode = VideoUtil.readFile("/sys/class/display/mode");
int axis[] = new int[4];
// writeFile(VideoUtil.OSD_PATH, "1");
getUbootAxis(axis);
System.out.println("=======resume==outputmode===>>>>"+outputmode);
if(outputmode.contains("1080")) {
VideoUtil.writeFile(VideoUtil.DISPLAY_AXIS_PATH, (axis[0] / 2) * 2 + " " + (axis[1] / 2) * 2 + " 1920 1080 " + (axis[0] / 2) * 2 + " " + (axis[1] / 2) * 2 + " 18 18");
VideoUtil.writeFile(VideoUtil.OSD0_SCALE_AXIS_PATH, "0 0 " + (960 - (axis[0] / 2) - 1) + " " + (1080 - (axis[1] / 2) - 1));
VideoUtil.writeFile(VideoUtil.REQUEST_2X_SCALE_PATH, "7 " + (axis[2] / 2) + " " + axis[3]);
VideoUtil.writeFile(VideoUtil.OSD1_SCALE_AXIS_PATH, "1920 1080 " + axis[2] + " " + axis[3]);
VideoUtil.writeFile(VideoUtil.OSD1_SCALE_PATH, "0x10001");
VideoUtil.writeFile(VideoUtil.VIDEO_AXITS_PATH, "0 -10 1918 1078");
} else {
VideoUtil.writeFile(VideoUtil.DISPLAY_AXIS_PATH, axis[0] + " " + axis[1] + " 1280 720 " + axis[0] + " " + axis[1] + " 18 18");
VideoUtil.writeFile(VideoUtil.REQUEST_2X_SCALE_PATH, "16 " + axis[2] + " " + axis[3]);
VideoUtil.writeFile(VideoUtil.OSD1_SCALE_AXIS_PATH, "1280 720 " + axis[2] + " " + axis[3]);
VideoUtil.writeFile(VideoUtil.OSD1_SCALE_PATH, "0x10001");
VideoUtil.writeFile(VideoUtil.VIDEO_AXITS_PATH, "0 -10 1278 718");
}
}
private void getUbootAxis(int[] axis, int[] defaultWH) {
String xEnv = "";
String yEnv = "";
String wEnv = "";
String hEnv = "";
int widthDefault = 0, heightDefault = 0;
for (int i = 0; i < VideoUtil.MODES.length; i++) {
String mode = VideoUtil.MODES[i];
if (outputmode.contains(mode)) {
xEnv = "ubootenv.var." + mode + "outputx";
yEnv = "ubootenv.var." + mode + "outputy";
wEnv = "ubootenv.var." + mode + "outputwidth";
hEnv = "ubootenv.var." + mode + "outputheight";
widthDefault = VideoUtil.WIDTH_DEFAULT[i];
heightDefault = VideoUtil.HEIGHT_DEFAULT[i];
break;
}
}
axis[0] = SystemProperties.getInt(xEnv, 0);
axis[1] = SystemProperties.getInt(yEnv, 0);
axis[2] = SystemProperties.getInt(wEnv, widthDefault);
axis[3] = SystemProperties.getInt(hEnv, heightDefault);
defaultWH[0] = widthDefault;
defaultWH[1] = heightDefault;
}
private void getUbootAxis(int[] axis) {
int defaultWH[] = new int[2];
getUbootAxis(axis, defaultWH);
}