2

Camera をベースに 1 つのアプリケーションを開発しています。正常に動作しますが、カメラと Android 4.0 の Sony Xperia Sola OS に問題が 1 つあります。

問題は次のとおりです。

アプリケーションからカメラを起動すると、カメラのプレビューは、Sony Xperia Sola デバイスではハーフスクリーンで表示され、他のデバイス HTC、Samsung ではフルスクリーンでうまく動作します。

カメラのプレビューにはSurfaceViewクラスを使用しました。SurfaceChanged()メソッドでは、次のコードを使用します

Parameters parameters = mCamera.getParameters();
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();

    if(display.getRotation() == Surface.ROTATION_0)
    {

        System.out.println("Preview Height : " + h);
        System.out.println("Preview Width  : " + w);

        parameters.setPreviewSize(h, w);                           
        mCamera.setDisplayOrientation(90);
    }

解決策を見つけるのを手伝ってください。

4

4 に答える 4

0

ここでも同じ問題が発生します。上記のコードを使用してどのように機能するかを確認しました。回転の中心がずれているように見えるため、縦向きに90度回転すると、ビューの約10〜20%が表示されます。

それは次のようです:

mCamera.setDisplayOrientation(90);

これが問題の原因です。

これは以下で再現可能です:

  • Sony Xperia ST25i、Androidバージョン4.0.4(ビルド:6.1.1.B.1.54)
  • Sony Xperia Solo MT27i、Android 4.0.4(ビルド:6.1.1.B.1.54)

情報が含まれている場合のカメラパラメータは次のとおりです。

01-22 16:04:01.015: D/CameraTest(1336): Haz camera: true
01-22 16:04:01.095: D/TextLayoutCache(1336): Using debug level: 0 - Debug Enabled: 0
01-22 16:04:01.425: D/libEGL(1336): loaded /system/lib/egl/libGLES_android.so
01-22 16:04:01.505: D/libEGL(1336): loaded /system/lib/egl/libEGL_mali.so
01-22 16:04:01.535: D/libEGL(1336): loaded /system/lib/egl/libGLESv1_CM_mali.so
01-22 16:04:01.545: D/libEGL(1336): loaded /system/lib/egl/libGLESv2_mali.so
01-22 16:04:01.725: D/OpenGLRenderer(1336): Enabling debug mode 0
01-22 16:04:02.987: D/CameraTest(1336): preferred-preview-size-for-video=864x480
01-22 16:04:02.987: D/CameraTest(1336): zoom=0
01-22 16:04:02.987: D/CameraTest(1336): recording-hint=false
01-22 16:04:02.987: D/CameraTest(1336): max-num-detected-faces-hw=5
01-22 16:04:02.987: D/CameraTest(1336): zoom-supported=true
01-22 16:04:02.987: D/CameraTest(1336): whitebalance=auto
01-22 16:04:02.987: D/CameraTest(1336): scene-mode=auto
01-22 16:04:02.987: D/CameraTest(1336): jpeg-quality=85
01-22 16:04:02.987: D/CameraTest(1336): preview-format-values=yuv420sp,yuv420p
01-22 16:04:02.987: D/CameraTest(1336): jpeg-thumbnail-quality=100
01-22 16:04:02.987: D/CameraTest(1336): preview-format=yuv420sp
01-22 16:04:02.987: D/CameraTest(1336): video-size-values=1280x720,864x480,720x480,640x480,352x288,320x240,176x144
01-22 16:04:02.987: D/CameraTest(1336): preview-size=640x480
01-22 16:04:02.987: D/CameraTest(1336): focal-length=3.5
01-22 16:04:02.987: D/CameraTest(1336): flash-mode-values=off,auto,on,red-eye,torch
01-22 16:04:02.987: D/CameraTest(1336): preview-frame-rate-values=15,30
01-22 16:04:02.987: D/CameraTest(1336): max-num-metering-areas=0
01-22 16:04:02.987: D/CameraTest(1336): preview-frame-rate=30
01-22 16:04:02.987: D/CameraTest(1336): focus-mode-values=auto,infinity,macro,fixed,continuous-picture,continuous-video
01-22 16:04:02.987: D/CameraTest(1336): jpeg-thumbnail-width=160
01-22 16:04:02.987: D/CameraTest(1336): video-size=1280x720
01-22 16:04:02.987: D/CameraTest(1336): scene-mode-values=auto,portrait,landscape,night,night-portrait,beach,snow,sports,party,barcode
01-22 16:04:02.987: D/CameraTest(1336): preview-fps-range-values=(1000,15000),(1000,30000)
01-22 16:04:02.987: D/CameraTest(1336): jpeg-thumbnail-size-values=160x120,0x0
01-22 16:04:02.987: D/CameraTest(1336): zoom-ratios=100,107,115,123,132,141,152,162,174,187,200,214,230,246,264,283,303,325,348,373,400,429,459,492,528,566,606,650,696,746,800
01-22 16:04:02.987: D/CameraTest(1336): preview-size-values=864x480,720x480,640x480,480x320,352x288,320x240,176x144
01-22 16:04:02.987: D/CameraTest(1336): picture-size-values=2592x1944,2560x1440,1632x1224,1920x1080,640x480,480x320,320x240
01-22 16:04:02.987: D/CameraTest(1336): preview-fps-range=1000,30000
01-22 16:04:02.987: D/CameraTest(1336): auto-whitebalance-lock=false
01-22 16:04:02.987: D/CameraTest(1336): min-exposure-compensation=-6
01-22 16:04:02.987: D/CameraTest(1336): antibanding=auto
01-22 16:04:02.987: D/CameraTest(1336): max-num-focus-areas=1
01-22 16:04:02.987: D/CameraTest(1336): vertical-view-angle=360
01-22 16:04:02.987: D/CameraTest(1336): horizontal-view-angle=360
01-22 16:04:02.987: D/CameraTest(1336): video-stabilization-supported=false
01-22 16:04:02.987: D/CameraTest(1336): jpeg-thumbnail-height=120
01-22 16:04:02.987: D/CameraTest(1336): smooth-zoom-supported=true
01-22 16:04:02.987: D/CameraTest(1336): focus-mode=macro
01-22 16:04:02.987: D/CameraTest(1336): auto-whitebalance-lock-supported=true
01-22 16:04:02.987: D/CameraTest(1336): video-frame-format=yuv420mb
01-22 16:04:02.987: D/CameraTest(1336): max-num-detected-faces-sw=5
01-22 16:04:02.987: D/CameraTest(1336): picture-format-values=jpeg
01-22 16:04:02.987: D/CameraTest(1336): max-exposure-compensation=6
01-22 16:04:02.987: D/CameraTest(1336): focus-areas=(0,0,0,0,0)
01-22 16:04:02.987: D/CameraTest(1336): video-snapshot-supported=false
01-22 16:04:02.987: D/CameraTest(1336): exposure-compensation=0
01-22 16:04:02.987: D/CameraTest(1336): exposure-compensation-step=0.333333
01-22 16:04:02.987: D/CameraTest(1336): flash-mode=off
01-22 16:04:02.987: D/CameraTest(1336): auto-exposure-lock=false
01-22 16:04:02.987: D/CameraTest(1336): effect-values=none,mono,negative,solarize,sepia,posterize
01-22 16:04:02.987: D/CameraTest(1336): picture-size=2592x1944
01-22 16:04:02.987: D/CameraTest(1336): max-zoom=30
01-22 16:04:02.987: D/CameraTest(1336): effect=none
01-22 16:04:02.987: D/CameraTest(1336): whitebalance-values=auto,incandescent,fluorescent,daylight,cloudy-daylight
01-22 16:04:02.987: D/CameraTest(1336): picture-format=jpeg
01-22 16:04:02.987: D/CameraTest(1336): focus-distances=Infinity,Infinity,Infinity
01-22 16:04:02.987: D/CameraTest(1336): auto-exposure-lock-supported=true
01-22 16:04:02.987: D/CameraTest(1336): antibanding-values=auto,50hz,60hz,off
01-22 16:04:03.037: D/CameraTest(1336): Rotation : 0
01-22 16:04:03.037: D/CameraTest(1336): Preview Width : 480
01-22 16:04:03.037: D/CameraTest(1336): Preview Height  : 744
01-22 16:04:03.057: D/CameraTest(1336): Supported FPS  : [[1000, 15000], [1000, 30000]]
于 2013-01-22T15:21:44.010 に答える
0

アプリを実行したときに高さと幅のプリントアウトが何を提供するのか知りたいです。単純なSurfaceViewクラスを実装し、コードを使用しました。logcatを通じて報告された幅と高さは

I / System.out(4706):プレビュー幅:480

I / System.out(4706):プレビューの高さ:744

これは、SurfaceViewがまたがる領域の大きさとかなり一致しています。

これに使用したパネルコード:

public class Panel extends SurfaceView implements SurfaceHolder.Callback {
    private Camera  mCamera;
    private Context mContext;

    public Panel(Context context) {
        super(context);
        mContext = context;
        getHolder().addCallback(this);
    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        try {
            mCamera = Camera.open();
            mCamera.setPreviewDisplay(getHolder());
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }

    }
    
    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)    {
        Parameters parameters = mCamera.getParameters();

        Display display = ((WindowManager) mContext.getSystemService(android.content.Context.WINDOW_SERVICE)).getDefaultDisplay();

        if (display.getRotation() == Surface.ROTATION_0) {

            System.out.println("Preview Width : " + width);
            System.out.println("Preview Height  : " + height);

            parameters.setPreviewSize(width, height);
            mCamera.setDisplayOrientation(90);
        }
    }


    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mCamera.stopPreview();
        mCamera.release();
        mCamera = null;
    }

}

詳細を教えてください。必要に応じてさらに調査します。

私は4.0.4のXperiaSolaで実行しています。デバイスのビルド番号を教えていただければ、これも役立ちます。

于 2012-11-29T16:29:23.493 に答える
0

問題がカメラ ソフトウェアに関連していることを確認しました。

残念ながら、回避策はありません。

唯一の解決策は、カメラの問題の修正を含む将来のファームウェア アップデートです。

于 2013-03-07T09:59:42.690 に答える
0

私のSony Experia LT22Iの場合、画面を回転させると同じ問題が発生しました

mCamera.setDisplayOrientation(90);

ビューの約 10 ~ 20% を表示するだけです。最後に、この電話の解決策 (パッチ) を見つけました。ビューの上部のマージンを変更するだけで(理由はわかりません)、次のようにうまく機能します。

String model = (Build.MANUFACTURER+Build.MODEL).toUpperCase(Locale.getDefault());
if (model.equals(Constants.MODEL_EXCEPTION)) {
    final ViewGroup.MarginLayoutParams lpt =(MarginLayoutParams)       
    surfaceView.getLayoutParams();
    lpt.setMargins(0,-150,0,0);
    surfaceView.setLayoutParams(lpt);
}
于 2014-06-06T11:41:17.423 に答える