我对此感到有点困惑..在其中一部手机(三星Galaxy Ace风格)上,当MediaRecorder
启动时,相机预览会被压扁。但是,在按下录制按钮之前预览正常,并且实际视频文件中的分辨率很好。
为什么MediaRecorder
启动时预览分辨率会发生变化,更重要的是,哪个分辨率会更改为?这是录制期间用于预览的视频大小吗?虽然这并没有多大意义..无论如何,这些是我从相机获得的价值观:
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] Requested preview size 800 x 480
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] Requested video size 1280 x 720
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] Requested picture size 2560 x 1920
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] requested jpeg thumbnail size 512 x 384
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] set optimal jpeg thumbnail size 512 x 384
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] m_bNoDisplayMode = 0
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] dualrecording-hint : 0 m_FaceAE=1 Camera ID=0
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] ZSL = off
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] prev_val = off
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] str_val = off
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] flash mode = off
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] AEC lock = false
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] AWB lock = false
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] mHdrMode 0 mTakeLowlight 0
02-22 19:20:55.857: W/QCameraParameters(230): [PARM_DBG] live snapshot size 1280 x 720
编辑:
我根据相机的可用预览尺寸和表面视图的大小计算预览尺寸。我根据摄像机getSupportedVideoSizes
返回的视频大小计算视频大小,首先选择16:9,如果失败 - 默认为最大。如果getSupportedVideoSizes
返回的列表为空,我将回退到getSupportedPreviewSizes
。但是,此回退将通过视频大小逻辑而不是预览大小逻辑。看文档
如果返回的列表不为null,则返回的列表将包含at 至少一个大小和返回列表中的一个大小必须是 传递给MediaRecorder.setVideoSize()用于摄像机应用程序if 相机用作视频源。在这种情况下,的大小 预览可能与录制视频的分辨率不同 在视频录制过程中。
所以这款手机可能会为getSupportedPreviewSizes
返回null,我的后退给了我与我用于预览的分辨率不同的分辨率(因为列表通过不同的逻辑),因此我设置了一个视频尺寸与不支持它的手机上的预览尺寸不同,因此在录制过程中压缩预览。虽然现在这都是理论上的。