mirror of
https://github.com/moonlight-stream/moonlight-android.git
synced 2026-06-17 14:21:08 +00:00
Improve decoder crash reporting detail
This commit is contained in:
@@ -595,7 +595,10 @@ public class Game extends Activity implements SurfaceHolder.Callback,
|
|||||||
|
|
||||||
// Add the video codec to the post-stream toast
|
// Add the video codec to the post-stream toast
|
||||||
if (message != null) {
|
if (message != null) {
|
||||||
if (videoFormat == MoonBridge.VIDEO_FORMAT_H265) {
|
if (videoFormat == MoonBridge.VIDEO_FORMAT_H265_MAIN10) {
|
||||||
|
message += " [H.265 HDR]";
|
||||||
|
}
|
||||||
|
else if (videoFormat == MoonBridge.VIDEO_FORMAT_H265) {
|
||||||
message += " [H.265]";
|
message += " [H.265]";
|
||||||
}
|
}
|
||||||
else if (videoFormat == MoonBridge.VIDEO_FORMAT_H264) {
|
else if (videoFormat == MoonBridge.VIDEO_FORMAT_H264) {
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
private boolean reportedCrash;
|
private boolean reportedCrash;
|
||||||
private int consecutiveCrashCount;
|
private int consecutiveCrashCount;
|
||||||
private String glRenderer;
|
private String glRenderer;
|
||||||
|
private boolean foreground = true;
|
||||||
|
|
||||||
private boolean needsBaselineSpsHack;
|
private boolean needsBaselineSpsHack;
|
||||||
private SeqParameterSet savedSps;
|
private SeqParameterSet savedSps;
|
||||||
@@ -201,6 +202,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
|
|
||||||
public void notifyVideoForeground() {
|
public void notifyVideoForeground() {
|
||||||
startSpinnerThreads();
|
startSpinnerThreads();
|
||||||
|
foreground = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void notifyVideoBackground() {
|
public void notifyVideoBackground() {
|
||||||
@@ -208,6 +210,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
// don't wait for them to terminate to avoid
|
// don't wait for them to terminate to avoid
|
||||||
// delaying the state transition
|
// delaying the state transition
|
||||||
signalSpinnerStop();
|
signalSpinnerStop();
|
||||||
|
foreground = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getActiveVideoFormat() {
|
public int getActiveVideoFormat() {
|
||||||
@@ -224,7 +227,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
String mimeType;
|
String mimeType;
|
||||||
String selectedDecoderName;
|
String selectedDecoderName;
|
||||||
|
|
||||||
if (videoFormat == MoonBridge.VIDEO_FORMAT_H264) {
|
if ((videoFormat & MoonBridge.VIDEO_FORMAT_MASK_H264) != 0) {
|
||||||
mimeType = "video/avc";
|
mimeType = "video/avc";
|
||||||
selectedDecoderName = avcDecoder.getName();
|
selectedDecoderName = avcDecoder.getName();
|
||||||
|
|
||||||
@@ -253,7 +256,7 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
|
|
||||||
refFrameInvalidationActive = refFrameInvalidationAvc;
|
refFrameInvalidationActive = refFrameInvalidationAvc;
|
||||||
}
|
}
|
||||||
else if (videoFormat == MoonBridge.VIDEO_FORMAT_H265) {
|
else if ((videoFormat & MoonBridge.VIDEO_FORMAT_MASK_H265) != 0) {
|
||||||
mimeType = "video/hevc";
|
mimeType = "video/hevc";
|
||||||
selectedDecoderName = hevcDecoder.getName();
|
selectedDecoderName = hevcDecoder.getName();
|
||||||
|
|
||||||
@@ -970,27 +973,24 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
public static class RendererException extends RuntimeException {
|
public static class RendererException extends RuntimeException {
|
||||||
private static final long serialVersionUID = 8985937536997012406L;
|
private static final long serialVersionUID = 8985937536997012406L;
|
||||||
|
|
||||||
private final Exception originalException;
|
private String text;
|
||||||
private final MediaCodecDecoderRenderer renderer;
|
|
||||||
private ByteBuffer currentBuffer;
|
|
||||||
private int currentCodecFlags;
|
|
||||||
|
|
||||||
RendererException(MediaCodecDecoderRenderer renderer, Exception e) {
|
RendererException(MediaCodecDecoderRenderer renderer, Exception e) {
|
||||||
this.renderer = renderer;
|
this.text = generateText(renderer, e, null, 0);
|
||||||
this.originalException = e;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RendererException(MediaCodecDecoderRenderer renderer, Exception e, ByteBuffer currentBuffer, int currentCodecFlags) {
|
RendererException(MediaCodecDecoderRenderer renderer, Exception e, ByteBuffer currentBuffer, int currentCodecFlags) {
|
||||||
this.renderer = renderer;
|
this.text = generateText(renderer, e, currentBuffer, currentCodecFlags);
|
||||||
this.originalException = e;
|
|
||||||
this.currentBuffer = currentBuffer;
|
|
||||||
this.currentCodecFlags = currentCodecFlags;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
return text;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String generateText(MediaCodecDecoderRenderer renderer, Exception originalException, ByteBuffer currentBuffer, int currentCodecFlags) {
|
||||||
String str = "";
|
String str = "";
|
||||||
|
|
||||||
str += "Format: "+renderer.videoFormat+"\n";
|
str += "Format: "+String.format("%x", renderer.videoFormat)+"\n";
|
||||||
str += "AVC Decoder: "+((renderer.avcDecoder != null) ? renderer.avcDecoder.getName():"(none)")+"\n";
|
str += "AVC Decoder: "+((renderer.avcDecoder != null) ? renderer.avcDecoder.getName():"(none)")+"\n";
|
||||||
str += "HEVC Decoder: "+((renderer.hevcDecoder != null) ? renderer.hevcDecoder.getName():"(none)")+"\n";
|
str += "HEVC Decoder: "+((renderer.hevcDecoder != null) ? renderer.hevcDecoder.getName():"(none)")+"\n";
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && renderer.avcDecoder != null) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && renderer.avcDecoder != null) {
|
||||||
@@ -1004,8 +1004,9 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
str += "Adaptive playback: "+renderer.adaptivePlayback+"\n";
|
str += "Adaptive playback: "+renderer.adaptivePlayback+"\n";
|
||||||
str += "GL Renderer: "+renderer.glRenderer+"\n";
|
str += "GL Renderer: "+renderer.glRenderer+"\n";
|
||||||
str += "Build fingerprint: "+Build.FINGERPRINT+"\n";
|
str += "Build fingerprint: "+Build.FINGERPRINT+"\n";
|
||||||
|
str += "Foreground: "+renderer.foreground+"\n";
|
||||||
str += "Consecutive crashes: "+renderer.consecutiveCrashCount+"\n";
|
str += "Consecutive crashes: "+renderer.consecutiveCrashCount+"\n";
|
||||||
str += "Initial video dimensions: "+renderer.initialWidth+"x"+renderer.initialHeight+"\n";
|
str += "Video dimensions: "+renderer.initialWidth+"x"+renderer.initialHeight+"\n";
|
||||||
str += "FPS target: "+renderer.refreshRate+"\n";
|
str += "FPS target: "+renderer.refreshRate+"\n";
|
||||||
str += "Bitrate: "+renderer.prefs.bitrate+" Mbps \n";
|
str += "Bitrate: "+renderer.prefs.bitrate+" Mbps \n";
|
||||||
str += "In stats: "+renderer.numVpsIn+", "+renderer.numSpsIn+", "+renderer.numPpsIn+"\n";
|
str += "In stats: "+renderer.numVpsIn+", "+renderer.numSpsIn+", "+renderer.numPpsIn+"\n";
|
||||||
@@ -1027,6 +1028,20 @@ public class MediaCodecDecoderRenderer extends VideoDecoderRenderer {
|
|||||||
|
|
||||||
str += "Is Exynos 4: "+renderer.isExynos4+"\n";
|
str += "Is Exynos 4: "+renderer.isExynos4+"\n";
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
||||||
|
if (originalException instanceof CodecException) {
|
||||||
|
CodecException ce = (CodecException) originalException;
|
||||||
|
|
||||||
|
str += "Diagnostic Info: "+ce.getDiagnosticInfo()+"\n";
|
||||||
|
str += "Recoverable: "+ce.isRecoverable()+"\n";
|
||||||
|
str += "Transient: "+ce.isTransient()+"\n";
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
str += "Codec Error Code: "+ce.getErrorCode()+"\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
str += "/proc/cpuinfo:\n";
|
str += "/proc/cpuinfo:\n";
|
||||||
try {
|
try {
|
||||||
str += MediaCodecHelper.readCpuinfo();
|
str += MediaCodecHelper.readCpuinfo();
|
||||||
|
|||||||
+1
-1
Submodule moonlight-common updated: e3d28f9337...bb75967467
Reference in New Issue
Block a user