Hi first thank you for read this Thread

I want make video record App

first seeing camera preview  with Camera(Device camera) and record
start User interaction(MediaRecorder)
but Camera.setPreviewDisplay(surfaceholder) and
MediaRecorder.setPreviewDisplay(surfaceholder) crash

i attached  setPreviewDisplay in surfacechange: in devicecamera
and When user pushed record start buttn  in activity  start recording

but it didnt work just Exception in startRecord();

just generated empty file my given name


Thank you have a nice day;

Here is my code------------------------------------------------------

package com.test.camera.Preview

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.content.Context;
import android.os.*;

import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.FrameLayout;

import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.media.MediaRecorder;
import android.media.CamcorderProfile;
import android.media.CameraProfile;

public class CameraOverlay {
        Context mContext;
    private SurfaceView mCameraPreview;
    private SurfaceHolder mSurfaceHolder;

    private Camera mCameraDevice;
    private MediaRecorder mRecorder;

    private OnCameraStateChangeListener mStatusListener;
    /**
     *
     */
    public CameraOverlay(Context context){
        mContext = context;
        mCameraPreview = new SurfaceView(mContext);
        mSurfaceHolder = mCameraPreview.getHolder();

        mSurfaceHolder.addCallback(getSurfaceHolderCallback());
 
mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        }
    /**
     *
     */
    public void startRecord(){
        if(mRecorder !=  null){
                stopRecord();
                try {
                        Thread.sleep(2000);
                } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                        Debug.log("startRecord:"+e.getMessage());
                }
        }
        SimpleDateFormat formatter = new SimpleDateFormat
( "yyyyMMddHHmmss");
        Date currentTime = new Date ( );
        String _szFile = String.format("/sdcard/test/
%s.mp4",formatter.format ( currentTime ));

        mRecorder = new MediaRecorder();
        mCameraDevice.unlock();
        mRecorder.setCamera(mCameraDevice);

        mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
        mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

        mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mRecorder.setVideoFrameRate(15);

        mRecorder.setVideoSize(176,144);
        mRecorder.setMaxDuration(1000*10);
        mRecorder.setMaxFileSize(1024*3000);

        mRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
        mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

        try{
                mCameraDevice.setPreviewDisplay(null);
                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
                mRecorder.setOutputFile(_szFile);

                mRecorder.prepare();
                Thread.sleep(1000);
                mRecorder.start(); <<< not work just sound pong and generate
empty file
        }catch (IllegalStateException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                Debug.log("IllegalStateException:::"+_szFile+" : 
"+e.getMessage()
+":"+e.getLocalizedMessage());
        }catch (IOException e) {
                Debug.log("IOException:::"+_szFile+" : "+e.getMessage()
+":"+e.getLocalizedMessage());
        }catch(Exception error){
                Debug.log("Exception:::"+_szFile+" : "+error.getMessage()
+":"+error.getLocalizedMessage());
        }
    }
    /**
     *
     */
    public void stopRecord(){
        if(mRecorder != null){
                mRecorder.reset();
                mRecorder.release();
                mRecorder = null;
                mCameraDevice.lock();
        }
    }
        /**
         *
         * @return
         */
    public SurfaceHolder.Callback getSurfaceHolderCallback() {
        return new SurfaceHolder.Callback() {
                /**
                 *
                 */
            public void surfaceCreated(SurfaceHolder holder) {
                Debug.log("surfaceCreated");
                        try {
                            mCameraDevice = Camera.open();
                            mCameraDevice.setPreviewDisplay(holder);
                        }catch (IOException e) {
                                mCameraDevice.release();
                                mCameraDevice = null;
                                e.printStackTrace();
                                Debug.log("surfaceCreated:"+e.getMessage());
                        }catch (RuntimeException e) {
                                mCameraDevice.release();
                                mCameraDevice = null;
                                e.printStackTrace();
                                Debug.log("surfaceCreated:"+e.getMessage());
                        }
                        mStatusListener.onOpenCamera();
            }
            /**
             *
             */
            public void surfaceChanged(SurfaceHolder holder, int
format, int width, int height) {
                        if(mCameraDevice != null) {
                                Parameters _param = 
mCameraDevice.getParameters();
                            Camera.Size _camSize =
_param.getSupportedPreviewSizes().get(0);
                                
_param.setPreviewSize(_camSize.width,_camSize.height);

                                mCameraDevice.setParameters(_param);
                            mCameraDevice.startPreview();
                            Debug.log("surfaceChanged");
                        } else {
                            // Maybe OutOfMemory
                                Debug.log("surfaceChanged : outofmemory");
                        }
                        mStatusListener.onCameraChange();
            }
            /**
             *
             */
            public void surfaceDestroyed(SurfaceHolder holder) {
                stopRecord();
                Debug.log("surfaceDestroyed");
                        if(mCameraDevice != null) {
                            mCameraDevice.stopPreview();
                            mCameraDevice.release();
                            mCameraDevice = null;
                            Debug.log("surfaceDestroyed OK");
                        }else{
                                Debug.log("surfaceDestroyed : ??");
                        }
                        mStatusListener.onCameraDestroy();
            }
        };
    }
    /**
     *
     * @return
     */
        public FrameLayout getDeviceCameraView(){
                FrameLayout layout = new FrameLayout(mContext);
                layout.addView(mCameraPreview);
                return layout;
        }
        /**
         *
         * @author kage
         *
         */
        public interface OnCameraStateChangeListener{
                public void onOpenCamera();
                public void onCameraChange();
                public void onCameraDestroy();
        }
        public void setCameraStatusListener(OnCameraStateChangeListener l)
{mStatusListener = l;}
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to