您的位置:首页 > 移动开发 > Android开发

关于android视频播放显示区域不正常的问题,一些处理方法

2014-09-04 11:51 1001 查看
<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);
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐