| | |
| | | private byte[] spsBuffer = null; // SPS ç¼å |
| | | private byte[] ppsBuffer = null; // PPS ç¼å |
| | | |
| | | // processCamera å¤±è´¥è®¡æ° |
| | | private int consecutiveFailureCount = 0; // è¿ç»å¤±è´¥æ¬¡æ° |
| | | private int logPrintCount = 0; // æ¥å¿æå°æ¬¡æ°ï¼æå¤5æ¬¡ï¼ |
| | | private static final int MAX_CONSECUTIVE_FAILURES = 5; // æå¤§è¿ç»å¤±è´¥æ¬¡æ° |
| | | |
| | | // ç¼ç åè° |
| | | public interface OnFrameEncodedCallback { |
| | | void onFrameEncoded(byte[] data, boolean isKeyFrame); |
| | |
| | | |
| | | MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo(); |
| | | |
| | | // é置失败计æ°å¨ |
| | | consecutiveFailureCount = 0; |
| | | logPrintCount = 0; |
| | | |
| | | while (isRunning.get()) { |
| | | try { |
| | | // processCamera - 读åä¸å¸§ |
| | | int processResult = usbCamera.processCamera(); |
| | | if (processResult != 0) { |
| | | // å¢å è¿ç»å¤±è´¥è®¡æ° |
| | | consecutiveFailureCount++; |
| | | |
| | | // éå¶æ¥å¿æå°æ¬¡æ°ï¼æå¤5æ¬¡ï¼ |
| | | if (logPrintCount < MAX_CONSECUTIVE_FAILURES) { |
| | | Timber.w("processCamera returned: " + processResult); |
| | | logPrintCount++; |
| | | } |
| | | |
| | | // 妿è¿ç»5次失败ï¼ç»æ¢ç¼ç |
| | | if (consecutiveFailureCount >= MAX_CONSECUTIVE_FAILURES) { |
| | | Timber.e("processCamera failed %d times consecutively, stopping encoding", MAX_CONSECUTIVE_FAILURES); |
| | | // 忢ç¼ç |
| | | isRunning.set(false); |
| | | // å
³éæä»¶è¾åº |
| | | closeFileOutput(); |
| | | // ç¦ç¨æä»¶è¾åºåç½ç»ä¼ è¾ |
| | | enableFileOutput = false; |
| | | if (enableNetworkTransmission && protocolHelper != null) { |
| | | protocolHelper.closeSocket(); |
| | | } |
| | | break; |
| | | } |
| | | |
| | | Thread.sleep(10); |
| | | continue; |
| | | } |
| | | |
| | | // æåè·åå¸§æ°æ®ï¼é置失败计æ°å¨ |
| | | consecutiveFailureCount = 0; |
| | | logPrintCount = 0; // éç½®æ¥å¿è®¡æ°ï¼å
è®¸ä¸æ¬¡å¤±è´¥æ¶éæ°æå° |
| | | |
| | | // è·åRGBAæ°æ® (type=1 è¡¨ç¤ºæ¨æµï¼è¾åºYUV420Pæ ¼å¼) |
| | | usbCamera.rgba(0, yuvBuffer); |
| | | |