2017-06-23 10 views
1

私はいくつかのAndroidデバイスとカメラモジュールに大きな問題があります。Android - Camera2 api - MediaRecorder - フレームで報告された出力バッファーが失われました

これは私のCameraPresenter.javaモジュールです:サムスンギャラクシーS6で

public class CameraPresenter { 

public static final int SECOND_TICK = 1000; 
private static final int SENSOR_ORIENTATION_DEFAULT_DEGREES = 90; 
private static final int SENSOR_ORIENTATION_INVERSE_DEGREES = 270; 
private static final SparseIntArray DEFAULT_ORIENTATIONS = new SparseIntArray(); 
private static final SparseIntArray INVERSE_ORIENTATIONS = new SparseIntArray(); 

static { 
    DEFAULT_ORIENTATIONS.append(Surface.ROTATION_0, 90); 
    DEFAULT_ORIENTATIONS.append(Surface.ROTATION_90, 0); 
    DEFAULT_ORIENTATIONS.append(Surface.ROTATION_180, 270); 
    DEFAULT_ORIENTATIONS.append(Surface.ROTATION_270, 180); 
} 

static { 
    INVERSE_ORIENTATIONS.append(Surface.ROTATION_0, 270); 
    INVERSE_ORIENTATIONS.append(Surface.ROTATION_90, 180); 
    INVERSE_ORIENTATIONS.append(Surface.ROTATION_180, 90); 
    INVERSE_ORIENTATIONS.append(Surface.ROTATION_270, 0); 
} 

public static final int CAMERA_BACK = 0; 
public static final int CAMERA_FRONT = 1; 

private CustomTextureView mTextureView; 
private CameraDevice mCameraDevice; 
private CameraCaptureSession mPreviewSession; 
private Size mPreviewSize; 
private Size mVideoSize; 
private MediaRecorder mMediaRecorder; 
private MediaPlayer mMediaPlayer; 
public boolean 
     mIsRecordingVideo, 
     mIsPlayingVideo, 
     mIsAfterRecording = false; 
private HandlerThread mBackgroundThread; 
private Handler mBackgroundHandler; 
private Semaphore mCameraOpenCloseLock = new Semaphore(1); 
private Activity activity; 
private Integer mSensorOrientation; 
private String mOriginalVideoAbsolutePath, 
     mCroppedVideoAbsolutePath, 
     mFlipVideoAbsolutePath, 
     mFinalVideoPath; 
private String videoTime; 
private Long videoTimeNumber; 
private CaptureRequest.Builder mPreviewBuilder; 

private Surface mRecorderSurface; 
int cameraType = 1; 

public CameraPresenter(Activity activity) { 
    this.activity = activity; 
} 

public void setTextureView(CustomTextureView mTextureView) { 
    this.mTextureView = mTextureView; 
} 

public void setCameraType(int cameraType) { 
    this.cameraType = cameraType; 
} 

public int getCameraType() { 
    return cameraType; 
} 

public boolean isRecordingVideo() { 
    return mIsRecordingVideo; 
} 

public boolean isAfterRecording() { 
    return mIsAfterRecording; 
} 

private CameraDevice.StateCallback mStateCallback = new CameraDevice.StateCallback() { 

    @Override 
    public void onOpened(CameraDevice cameraDevice) { 
     mCameraDevice = cameraDevice; 
     startPreview(false); 
     mCameraOpenCloseLock.release(); 
     if (null != mTextureView) { 
      configureTransform(mTextureView.getWidth(), mTextureView.getHeight()); 
     } 
    } 

    @Override 
    public void onDisconnected(CameraDevice cameraDevice) { 
     mCameraOpenCloseLock.release(); 
     cameraDevice.close(); 
     mCameraDevice = null; 
    } 

    @Override 
    public void onError(CameraDevice cameraDevice, int error) { 
     mCameraOpenCloseLock.release(); 
     cameraDevice.close(); 
     mCameraDevice = null; 
    } 

}; 


private static Size chooseVideoSize(Size[] choices) { 
    for (Size size : choices) { 
     if (size.getWidth() == size.getHeight() * 4/3 && size.getWidth() <= 1080) { 
      return size; 
     } 
    } 
    Log.e(AppConstants.TAG, "chooseVideoSize: Couldn't find any suitable video size"); 
    return choices[choices.length - 1]; 
} 

/** 
* Given {@code choices} of {@code Size}s supported by a camera, chooses the smallest one whose 
* width and height are at least as large as the respective requested values, and whose aspect 
* ratio matches with the specified value. 
* 
* @param choices  The list of sizes that the camera supports for the intended output class 
* @param width  The minimum desired width 
* @param height  The minimum desired height 
* @param aspectRatio The aspect ratio 
* @return The optimal {@code Size}, or an arbitrary one if none were big enough 
*/ 
private static Size chooseOptimalSize(Size[] choices, int width, int height, Size aspectRatio) { 
    // Collect the supported resolutions that are at least as big as the preview Surface 
    List<Size> bigEnough = new ArrayList<Size>(); 
    int w = aspectRatio.getWidth(); 
    int h = aspectRatio.getHeight(); 
    for (Size option : choices) { 
     if (option.getHeight() == option.getWidth() * h/w && 
       option.getWidth() >= width && option.getHeight() >= height) { 
      bigEnough.add(option); 
     } 
    } 

    // Pick the smallest of those, assuming we found any 
    if (bigEnough.size() > 0) { 
     return Collections.min(bigEnough, new CompareSizesByArea()); 
    } else { 
     Log.e(AppConstants.TAG, "chooseOptimalSize: Couldn't find any suitable preview size"); 
     return choices[0]; 
    } 
} 

public Long getVideoTimeNumber() { 
    return videoTimeNumber; 
} 

public void startBackgroundThread() { 
    mBackgroundThread = new HandlerThread("CameraBackground"); 
    mBackgroundThread.start(); 
    mBackgroundHandler = new Handler(mBackgroundThread.getLooper()); 
} 

public void stopBackgroundThread() { 
    mBackgroundThread.quitSafely(); 
    try { 
     mBackgroundThread.join(); 
     mBackgroundThread = null; 
     mBackgroundHandler = null; 
    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

public void openCamera(int width, int height, int cameraType) { 
    if (null == activity || activity.isFinishing()) { 
     return; 
    } 
    mMediaPlayer = null; 
    CameraManager manager = (CameraManager) activity.getSystemService(Context.CAMERA_SERVICE); 
    try { 
     Log.d(AppConstants.TAG, "tryAcquire"); 
     if (!mCameraOpenCloseLock.tryAcquire(2500, TimeUnit.MILLISECONDS)) { 
      throw new RuntimeException("Time out waiting to lock camera opening."); 
     } 
     this.cameraType = cameraType; 
     String cameraId = manager.getCameraIdList()[cameraType]; 

     CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); 
     StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 
     mSensorOrientation = characteristics.get(CameraCharacteristics.SENSOR_ORIENTATION); 
     mVideoSize = chooseVideoSize(map.getOutputSizes(MediaRecorder.class)); 
     mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class), 
       width, height, mVideoSize); 

     int orientation = activity.getResources().getConfiguration().orientation; 
     if (orientation == Configuration.ORIENTATION_LANDSCAPE) { 
      mTextureView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 
     } else { 
      mTextureView.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth()); 
     } 
     Log.w(AppConstants.TAG, "WIDTH :" + width); 
     Log.w(AppConstants.TAG, "HEIGHT :" + height); 
     configureTransform(width, height); 
     mMediaRecorder = new MediaRecorder(); 
     if (ActivityCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
      return; 
     } 
     manager.openCamera(cameraId, mStateCallback, null); 
    } catch (CameraAccessException e) { 
     Toast.makeText(activity, "Cannot access the camera.", Toast.LENGTH_SHORT).show(); 
     activity.finish(); 
    } catch (NullPointerException e) { 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     throw new RuntimeException("Interrupted while trying to lock camera opening."); 
    } 
} 

public void closeCamera() { 
    try { 
     mCameraOpenCloseLock.acquire(); 
     closePreviewSession(); 
     if (null != mCameraDevice) { 
      mCameraDevice.close(); 
      mCameraDevice = null; 
     } 
     if (null != mMediaRecorder) { 
      mMediaRecorder.release(); 
      mMediaRecorder = null; 
     } 
    } catch (InterruptedException e) { 
     throw new RuntimeException("Interrupted while trying to lock camera closing."); 
    } finally { 
     mCameraOpenCloseLock.release(); 
    } 
} 

/** 
* Start the camera preview. 
*/ 
private void startPreview(boolean recordAgain) { 
    if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) { 
     return; 
    } 
    try { 
     if (!recordAgain) 
      closePreviewSession(); 
     SurfaceTexture texture = mTextureView.getSurfaceTexture(); 
     assert texture != null; 
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 
     mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); 
     Surface previewSurface = new Surface(texture); 
     mPreviewBuilder.addTarget(previewSurface); 
     mCameraDevice.createCaptureSession(Arrays.asList(previewSurface), new CameraCaptureSession.StateCallback() { 

      @Override 
      public void onConfigured(CameraCaptureSession cameraCaptureSession) { 
       mPreviewSession = cameraCaptureSession; 
       updatePreview(); 
      } 

      @Override 
      public void onConfigureFailed(CameraCaptureSession cameraCaptureSession) { 
       Log.w(AppConstants.TAG, "Camera failed...."); 
      } 
     }, mBackgroundHandler); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

public void turnOnLight() throws CameraAccessException { 
    mPreviewBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_TORCH); 
    mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, null); 
} 

public void turnOffLight() throws CameraAccessException { 
    mPreviewBuilder.set(CaptureRequest.FLASH_MODE, CameraMetadata.FLASH_MODE_OFF); 
    mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, null); 
} 

private void updatePreview() { 
    if (null == mCameraDevice) { 
     return; 
    } 
    try { 
     setUpCaptureRequestBuilder(mPreviewBuilder); 
     HandlerThread thread = new HandlerThread("CameraPreview"); 
     thread.start(); 
     mPreviewSession.setRepeatingRequest(mPreviewBuilder.build(), null, mBackgroundHandler); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 
} 

private void setUpCaptureRequestBuilder(CaptureRequest.Builder builder) { 
    builder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO); 
} 

/** 
* Configures the necessary {@link android.graphics.Matrix} transformation to `mTextureView`. 
* This method should not to be called until the camera preview size is determined in 
* openCamera, or until the size of `mTextureView` is fixed. 
* 
* @param viewWidth The width of `mTextureView` 
* @param viewHeight The height of `mTextureView` 
*/ 
public void configureTransform(int viewWidth, int viewHeight) { 
    if (null == mTextureView || null == mPreviewSize || null == activity) { 
     return; 
    } 
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); 
    Matrix matrix = new Matrix(); 
    RectF viewRect = new RectF(0, 0, viewWidth, viewHeight); 
    RectF bufferRect = new RectF(0, 0, mPreviewSize.getHeight(), mPreviewSize.getWidth()); 
    float centerX = viewRect.centerX(); 
    float centerY = viewRect.centerY(); 
    if (Surface.ROTATION_90 == rotation || Surface.ROTATION_270 == rotation) { 
     bufferRect.offset(centerX - bufferRect.centerX(), centerY - bufferRect.centerY()); 
     matrix.setRectToRect(viewRect, bufferRect, Matrix.ScaleToFit.FILL); 
     float scale = Math.max(
       (float) viewHeight/mPreviewSize.getHeight(), 
       (float) viewWidth/mPreviewSize.getWidth()); 
     matrix.postScale(scale, scale, centerX, centerY); 
     matrix.postRotate(90 * (rotation - 2), centerX, centerY); 
    } 
    mTextureView.setTransform(matrix); 
} 

private void setUpMediaRecorder(Activity activity) throws IOException { 
    if (null == activity) { 
     return; 
    } 
    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE); 
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
    if (mOriginalVideoAbsolutePath == null || mOriginalVideoAbsolutePath.isEmpty()) { 
     mOriginalVideoAbsolutePath = getOriginalVideoFilePath(activity); 
    } 
    mMediaRecorder.setOutputFile(mOriginalVideoAbsolutePath); 
    mMediaRecorder.setVideoEncodingBitRate(1500000); 
    mMediaRecorder.setMaxDuration(AppConstants.VIDEO_MAX_DURATION); 
    mMediaRecorder.setVideoFrameRate(16); 
    mMediaRecorder.setVideoSize(mVideoSize.getWidth(), mVideoSize.getHeight()); 
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); 
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); 
    switch (mSensorOrientation) { 
     case SENSOR_ORIENTATION_DEFAULT_DEGREES: 
      mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation)); 
      break; 
     case SENSOR_ORIENTATION_INVERSE_DEGREES: 
      mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation)); 
      break; 
    } 
    mMediaRecorder.prepare(); 

} 



private String getVideoTime() { 
    Long videoCreationTime = System.currentTimeMillis(); 
    videoTimeNumber = videoCreationTime; 
    videoTime = videoCreationTime.toString(); 
    return videoTime; 
} 

private String getFlippedVideoFilePath(Context context) { 
    mFlipVideoAbsolutePath = context.getExternalFilesDir(null).getAbsolutePath() + "/" 
      + videoTime + "flipped.mp4"; 
    return mFlipVideoAbsolutePath; 
} 

private String getFinalVideoFilePath(Context context) { 
    return getFileDirectory(context).getAbsolutePath() + "/" 
      + videoTime + ".mp4"; 
} 


public boolean recordAgainAction() { 
    startPreview(true); 
    return true; 
} 

public void shutdownPlayingMovie(RecordActivity.PlayerManager playerManager) { 
    mMediaPlayer.stop(); 
    mMediaPlayer.release(); 
    playerManager.onEndPlaying(true); 
    mIsPlayingVideo = false; 
} 



private void deleteMovie(String path) { 
    File file = new File(path); 
    if (file.exists()) { 
     if (file.delete()) { 
      Log.d(AppConstants.TAG, "Success!! File deleted :" + path); 
     } else { 
      Log.d(AppConstants.TAG, "Failure... file not deleted :" + path); 
     } 
    } 
} 

public boolean isPlayingVideo() { 
    return this.mIsPlayingVideo; 
} 

public void startRecordingVideo(final CountDownTimer countDownTimer) { 
    if (null == mCameraDevice || !mTextureView.isAvailable() || null == mPreviewSize) { 
     return; 
    } 
    try { 
     closePreviewSession(); 
     setUpMediaRecorder(activity); 
     SurfaceTexture texture = mTextureView.getSurfaceTexture(); 
     assert texture != null; 
     texture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); 
     mPreviewBuilder = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD); 
     List<Surface> surfaces = new ArrayList<>(); 

     // Set up Surface for the camera preview 
     Surface previewSurface = new Surface(texture); 
     surfaces.add(previewSurface); 
     mPreviewBuilder.addTarget(previewSurface); 

     // Set up Surface for the MediaRecorder 
     mRecorderSurface = mMediaRecorder.getSurface(); 
     surfaces.add(mRecorderSurface); 
     mPreviewBuilder.addTarget(mRecorderSurface); 
     // Start a capture session 
     // Once the session starts, we can update the UI and start recording 
     mCameraDevice.createCaptureSession(surfaces, new CameraCaptureSession.StateCallback() { 

      @Override 
      public void onConfigured(@NonNull CameraCaptureSession cameraCaptureSession) { 
       mPreviewSession = cameraCaptureSession; 
       updatePreview(); 
       activity.runOnUiThread(new Runnable() { 
        @Override 
        public void run() { 
         // UI 
         countDownTimer.start(); 
         mIsRecordingVideo = true; 
         // Start recording 
         mMediaRecorder.start(); 
        } 
       }); 
      } 

      @Override 
      public void onConfigureFailed(@NonNull CameraCaptureSession cameraCaptureSession) { 
       Log.w(AppConstants.TAG, "Camera failed...."); 
       if (null != activity) { 
        Toast.makeText(activity, "Failed", Toast.LENGTH_SHORT).show(); 
       } 
      } 
     }, mBackgroundHandler); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

private void closePreviewSession() { 
    if (mPreviewSession != null) { 
     mPreviewSession.close(); 
     mPreviewSession = null; 
    } 
} 

public void stopRecordingVideo(RecordingManager recordingManager, CountDownTimer countDownTimer, RenderManager renderManager) { 
    stopRecorder(); 
    //closeCamera(); 
    countDownTimer.cancel(); 
    cropVideo(renderManager, recordingManager); 
    Log.d(AppConstants.TAG, "Video saved: " + mOriginalVideoAbsolutePath); 
} 

public void stopRecorder() { 
    mIsRecordingVideo = false; 
    mIsAfterRecording = true; 
    mMediaRecorder.stop(); 
} 

public boolean ifVideoAlreadyPlayed() { 
    return mMediaPlayer != null; 
} 


public void showRecordedVideo(CustomTextureView playTextureView, final RecordActivity.PlayerManager playerManager) { 
    try { 
     if (mMediaPlayer == null) { 
      mMediaPlayer = new MediaPlayer(); 
      mMediaPlayer.setSurface(new Surface(playTextureView.getSurfaceTexture())); 
      if (cameraType == CAMERA_FRONT) 
       mMediaPlayer.setDataSource(mCroppedVideoAbsolutePath); 
      else 
       mMediaPlayer.setDataSource(mCroppedVideoAbsolutePath); 
      mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
       @Override 
       public void onCompletion(MediaPlayer mp) { 
        mMediaPlayer.stop(); 
        playerManager.onEndPlaying(false); 
        playerManager.initMaxProgress(mp); 
        mIsPlayingVideo = false; 
       } 
      }); 
      mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mp) { 
        mMediaPlayer.start(); 
        playerManager.initMovieDuration(mp); 
        mIsPlayingVideo = true; 
       } 
      }); 
      mMediaPlayer.prepareAsync(); 
     } else { 
      mMediaPlayer.prepareAsync(); 
     } 

    } catch (IllegalArgumentException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IllegalStateException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

public void stopPlayer() { 
    mMediaPlayer.stop(); 
} 

/** 
* Compares two {@code Size}s based on their areas. 
*/ 
static class CompareSizesByArea implements Comparator<Size> { 

    @Override 
    public int compare(Size lhs, Size rhs) { 
     return Long.signum((long) lhs.getWidth() * lhs.getHeight() - 
       (long) rhs.getWidth() * rhs.getHeight()); 
    } 

} 


} 

、LGのG3またはG4すべてが正常に動作しています。私は映画を録画することができます。私は、このログを取得していますので、Huawei社P8ライトやGoogleのネクサス5に問題がある:私が何であるかを知らない

06-23 19:37:20.381 18763-19545/ E/CameraDevice-JV-1: Lost output buffer reported for frame 107 
06-23 19:37:20.381 18763-19545/ E/CameraDevice-JV-1: Lost output buffer reported for frame 107 
06-23 19:37:23.391 18763-19555/ E/RequestThread-1: Timed out while waiting for request to complete. 
06-23 19:37:23.391 18763-19555/ W/RequestHolder: Capture failed for request: 1 
06-23 19:37:26.391 18763-19555/ E/RequestThread-1: Timed out while waiting for request to complete. 

:私の意見では

06-23 19:37:12.991 18763-18763/E/Camera: Invalid size parameter string= 
06-23 19:37:13.001 18763-18763/E/::::::: chooseOptimalSize: Couldn't find any suitable preview size 
06-23 19:37:13.001 18763-18763/ W/::: :::: WIDTH :720 
06-23 19:37:13.001 18763-18763/ W/::: :::: HEIGHT :1280 
06-23 19:37:13.001 18763-18763/ W/ArrayUtils: Ignoring invalid value hwauto 
06-23 19:37:13.001 18763-18763/ E/Camera: Invalid size parameter string= 
06-23 19:37:13.011 18763-18763/ I/CameraManager: Using legacy camera HAL. 
06-23 19:37:13.141 18763-18763/ W/ArrayUtils: Ignoring invalid value hwauto 
06-23 19:37:13.141 18763-18763/ E/Camera: Invalid size parameter string= 
06-23 19:37:13.181 18763-18763/ I/CameraDeviceState: Legacy camera service transitioning to state CONFIGURING 
06-23 19:37:13.181 18763-19555/ I/RequestThread-1: Configure outputs: 1 surfaces configured. 
06-23 19:37:13.221 18763-18763/ I/CameraDeviceState: Legacy camera service transitioning to state IDLE 
06-23 19:37:13.221 18763-19542/ I/RequestQueue: Repeating capture request set. 
06-23 19:37:13.231 18763-19555/ W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value 
06-23 19:37:13.231 18763-19555/ W/LegacyRequestMapper: Only received metering rectangles with weight 0. 
06-23 19:37:13.231 18763-19555/ W/LegacyRequestMapper: convertRequestToMetadata - Ignoring android.lens.focusDistance false, only 0.0f is supported 
06-23 19:37:13.231 18763-19555/ E/Camera: Invalid size parameter string= 
06-23 19:37:13.361 18763-18865/ W/FlurryAgent: Flurry session paused for context: [email protected] 
06-23 19:37:13.461 18763-19560/ I/CameraDeviceState: Legacy camera service transitioning to state CAPTURING 
06-23 19:37:16.861 18763-18763/ I/RequestQueue: Repeating capture request cancelled. 
06-23 19:37:16.861 18763-19555/ I/CameraDeviceState: Legacy camera service transitioning to state IDLE 
06-23 19:37:16.871 18763-18763/ I/HwMediaPermWrapper: confirmCameraPermission, blocked:false 
06-23 19:37:16.871 18763-18763/ W/ContextImpl: Failed to ensure directory: /storage/sdcard1/Android/data/ /files 
06-23 19:37:16.911 18763-18763/ I/CameraDeviceState: Legacy camera service transitioning to state CONFIGURING 
06-23 19:37:16.911 18763-19555/ I/RequestThread-1: Configure outputs: 2 surfaces configured. 
06-23 19:37:17.001 18763-19555/ E/BufferQueueProducer: [unnamed-18763-1] cancelBuffer: slot 3 is not owned by the producer (state = 0) 
06-23 19:37:17.001 18763-19555/ E/BufferQueueProducer: [unnamed-18763-1] cancelBuffer: slot 4 is not owned by the producer (state = 3) 
06-23 19:37:17.001 18763-19555/ E/BufferQueueProducer: [unnamed-18763-1] cancelBuffer: slot 0 is not owned by the producer (state = 0) 
06-23 19:37:17.001 18763-19555/ E/BufferQueueProducer: [unnamed-18763-1] cancelBuffer: slot 1 is not owned by the producer (state = 0) 
06-23 19:37:17.001 18763-19555/ E/BufferQueueProducer: [unnamed-18763-1] cancelBuffer: slot 2 is not owned by the producer (state = 0) 
06-23 19:37:17.001 18763-19555/ E/BufferQueueProducer: [unnamed-18763-1] cancelBuffer: slot 3 is not owned by the producer (state = 0) 
06-23 19:37:17.001 18763-19555/ E/BufferQueueProducer: [unnamed-18763-1] cancelBuffer: slot 4 is not owned by the producer (state = 3) 
06-23 19:37:17.071 18763-18763/ I/CameraDeviceState: Legacy camera service transitioning to state IDLE 
06-23 19:37:17.071 18763-19542/ I/RequestQueue: Repeating capture request set. 
06-23 19:37:17.071 18763-19555/ W/LegacyRequestMapper: convertRequestMetadata - control.awbRegions setting is not supported, ignoring value 
06-23 19:37:17.071 18763-19555/ W/LegacyRequestMapper: Only received metering rectangles with weight 0. 
06-23 19:37:17.071 18763-19555/ W/LegacyRequestMapper: convertRequestToMetadata - Ignoring android.lens.focusDistance false, only 0.0f is supported 
06-23 19:37:17.071 18763-19555/ E/Camera: Invalid size parameter string= 
06-23 19:37:17.071 18763-18763/ I/MediaRecorder: start 
06-23 19:37:17.241 18763-19560/ I/CameraDeviceState: Legacy camera service transitioning to state CAPTURING 
06-23 19:37:20.381 18763-19555/ E/RequestThread-1: Timed out while waiting for request to complete. 
06-23 19:37:20.381 18763-19555/ W/CaptureCollector: Preview buffers dropped for request: 1 
06-23 19:37:20.381 18763-19545/ E/CameraDevice-JV-1: Lost output buffer reported for frame 107 
06-23 19:37:20.381 18763-19545/ E/CameraDevice-JV-1: Lost output buffer reported for frame 107 
06-23 19:37:23.391 18763-19555/ E/RequestThread-1: Timed out while waiting for request to complete. 
06-23 19:37:23.391 18763-19555/ W/RequestHolder: Capture failed for request: 1 
06-23 19:37:26.391 18763-19555/ E/RequestThread-1: Timed out while waiting for request to complete. 
06-23 19:37:26.391 18763-19555/ W/RequestHolder: Capture failed for request: 1 
06-23 19:37:29.411 18763-19555/ E/RequestThread-1: Timed out while waiting for request to complete. 
06-23 19:37:29.411 18763-19555/ W/RequestHolder: Capture failed for request: 1 
06-23 19:37:32.421 18763-19555/ E/RequestThread-1: Timed out while waiting for request to complete. 
06-23 19:37:32.421 18763-19555/ W/RequestHolder: Capture failed for request: 1 
06-23 19:37:35.421 18763-19555/ E/RequestThread-1: Timed out while waiting for request to complete. 

を、最も重要な情報がありますこの問題が発生します。録画ボタンを押すと、私のビデオが凍っています。これらのデバイスにはどのような制限がありますか?適切なカメラ設定は何ですか?

答えて

0

あなたは

@Override 
       public void run() { 
        // UI 
        countDownTimer.start(); 
        mIsRecordingVideo = true; 

        //Add this line 
        updatePreview(); 

        // Start recording 
        mMediaRecorder.start(); 
       } 
を記録しているときに、プレビューを更新する必要がありました
関連する問題