setOrientationHint在某些手机的前置摄像头(HTC)上逆时针旋转视频

时间:2013-02-07 23:37:48

标签: android android-camera android-mediarecorder htc-android

问题:某些Android设备(问题底部列出)在使用前置摄像头拍摄的视频使用setOrientationHint(int degrees)功能时会出现意外行为。预期的行为是视频顺时针旋转,但这些设备逆时针旋转视频。

我的目标:要识别相机设置或硬件方向内的变量,以便我可以预测知道何时会发生这种情况。具体来说,我想避免在我的代码中特别包装这些​​手机!

进一步说明:我正在使用标准MediaRecorder对象录制视频,在准备录制时,我使用setOrientationHint()设置了视频的方向。在setOrientationHint()的文档中,为degrees参数指定了以下内容:

  

- 以度为单位顺时针旋转的角度。支持的角度是   0,90,180和270。

该功能旨在添加一个包含旋转角度的合成矩阵,以便视频播放器可以按预期显示视频。所以,我所做的是I get the camera hardware's orientation using the CameraInfo class并将其用作degrees fn中的setOrientationHint参数。 (我已尝试使用AOSP作为指南对此代码进行了修改,但结果完全相同。)

一个真实的例子:三星Galaxy S3前置摄像头(事实上大多数其他人)的硬件方向都是270,所以我在录制时使用它,结果视频是显示正确。 HTC Vivid同样会为同一台相机返回270的硬件方向,但只有在degrees fn中使用90作为setOrientationHint参数时才能正确显示。如果我像任何其他手机一样使用270硬件方向,则视频将颠倒过来。

NB: setOrientationHint()功能包含警告:

  

请注意,某些视频播放器可能会选择忽略构图   播放期间视频中的矩阵。

然而,这是正在发生的事情,因为我可以轻松地在这些手机上修复此问题,如果我伪造它并放入90而不是270.

我见过的手机专门展示了这个问题: HTC Vivid(PH39100)运行Android 4.0.3,HTC EVO 4G(PG86100)运行Android 4.0.3,HTC Thunderbolt(ADR6400L)运行Android 2.3.4。请注意,它们都是HTC手机。也许HTC的某个人顺时针错误地逆时针错误。

1 个答案:

答案 0 :(得分:1)

是的,HTC手机朝向前置摄像头方向旋转方向错误。我没有尝试猜测,而是添加了一个设置屏幕,可以拍摄两张照片,第二张照片旋转90度。然后,当我循环通过不同的旋转方向和角度组合时,用户可以继续按下,直到两张图片的方向相同。