Skip to content

Commit 54f17cd

Browse files
committed
fix NPE,优化EGL Exception降级
1 parent 96e89f0 commit 54f17cd

2 files changed

Lines changed: 22 additions & 19 deletions

File tree

app/src/main/java/com/demo/mediacodec/MediaCodecUtils.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,10 @@ public static MediaFormat createOutputFormat(@NonNull Context ctx, @NonNull Uri
215215
//不去生成H264的HDR视频
216216
//设置Color相关参数,使其尽量保证HDR视频转码后仍然是HDR视频
217217
int colorTransfer = 0;
218-
int colorStandard = inputVideoFormat.getInteger(MediaFormat.KEY_COLOR_STANDARD);
218+
int colorStandard = MediaFormat.COLOR_STANDARD_BT709;
219+
if (inputVideoFormat.containsKey(MediaFormat.KEY_COLOR_STANDARD)) {
220+
colorStandard = inputVideoFormat.getInteger(MediaFormat.KEY_COLOR_STANDARD);
221+
}
219222
outputConfig.isHDR =
220223
outputConfig.outputLevel != OutputLevel.NO_HDR && colorStandard == MediaFormat.COLOR_STANDARD_BT2020;
221224
if (outputConfig.isHDR) {

app/src/main/java/com/demo/mediacodec/transcode/InputSurface.java

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,27 +66,27 @@ private void eglSetup(VideoOutputConfig config) {
6666
config.eglColorSpace = MediaCodecUtils.EGLColorSpace.RGB888;
6767
Log.i("InputSurface", "使用RGBA8888");
6868
} else {
69-
if (config.isDolby) {
70-
//杜比视界
71-
createRGBA1010102EGLContextAndWindow();
72-
config.eglColorSpace = MediaCodecUtils.EGLColorSpace.RGBA1010102;
73-
Log.i("InputSurface", "使用RGBA1010102");
74-
} else if (config.isHDRVivid) {
75-
//vivid
76-
createYUVP10EGLContextAndWindow();
77-
config.eglColorSpace = MediaCodecUtils.EGLColorSpace.YUVP10;
78-
Log.i("InputSurface", "使用YUVP10");
79-
} else {
80-
//不是杜比视界、不是hdr vivid。
81-
try {
69+
try {
70+
if (config.isDolby) {
71+
//杜比视界
72+
Log.i("InputSurface", "使用RGBA1010102");
73+
createRGBA1010102EGLContextAndWindow();
74+
config.eglColorSpace = MediaCodecUtils.EGLColorSpace.RGBA1010102;
75+
} else if (config.isHDRVivid) {
76+
//vivid
77+
Log.i("InputSurface", "使用YUVP10");
78+
createYUVP10EGLContextAndWindow();
79+
config.eglColorSpace = MediaCodecUtils.EGLColorSpace.YUVP10;
80+
} else {
81+
//不是杜比视界、不是hdr vivid。
82+
Log.i("InputSurface", "不是杜比,也不是Vivid,使用RGBA1010102");
8283
createRGBA1010102EGLContextAndWindow();
8384
config.eglColorSpace = MediaCodecUtils.EGLColorSpace.RGBA1010102;
84-
} catch (Exception e) {
85-
e.printStackTrace();
86-
Log.i("InputSurface", "eglSetup: RGBA1010102初始化失败,尝试使用RGBA8888");
87-
createSdrEGLContextAndWindow();
88-
config.eglColorSpace = MediaCodecUtils.EGLColorSpace.RGB888;
8985
}
86+
} catch (Exception e) {
87+
Log.i("InputSurface", "eglSetup: 10bit位深EGL初始化失败,尝试使用RGBA8888");
88+
createSdrEGLContextAndWindow();
89+
config.eglColorSpace = MediaCodecUtils.EGLColorSpace.RGB888;
9090
}
9191
}
9292

0 commit comments

Comments
 (0)