hi:all ,i'm seeing same issue .can you help me ?



2009/9/8 preetam_pict <preetam.pa...@gmail.com>

>
> Hi all
>
> I am trying to write a sample program to record the video (say
> camcorder application).
> When i run my program using the emulator (I have android-sdk-
> windows-1.5_r3) I see java.io.IOException: prepare failed. error in
> logcat output.
>
> Further I can see that I have came across this error when i call
> MediaRecorder.prepare()
> from CamcorderActivity.surfaceCreated()
> But I am surprised to see that activity got launched and I am seeing
> the camera preview!  Again the preview is seen only in half of the
> screen! Its weird!!!
>
> Further when i do recorder.start() to record the video I get
> java.lang.IllegalStateException. Yes this is obvious since the prepare
> () has failed.
> But the question is why prepare() has failed ?
>
> Can someone please help me to understand whats happening here!
> Am i missing something ???
>
> thanks in advance
> ~pp
>
> Here is my code ...
> package com.example;
>
> import java.io.IOException;
>
> import android.app.Activity;
> import android.graphics.PixelFormat;
> import android.media.MediaRecorder;
> import android.os.Bundle;
> import android.util.Log;
> import android.view.KeyEvent;
> import android.view.SurfaceHolder;
> import android.view.SurfaceView;
>
> public class CamcorderActivity extends Activity implements
>       SurfaceHolder.Callback
> {
>   private MediaRecorder recorder;
>   private SurfaceView   surfaceView;
>   private SurfaceHolder surfaceHolder;
>
>   private boolean       recording = false;
>
>   /** Called when the activity is first created. */
>   @Override
>   public void onCreate(Bundle savedInstanceState)
>   {
>       super.onCreate(savedInstanceState);
>
>       // configure the surface
>       getWindow().setFormat(PixelFormat.TRANSLUCENT);
>       setContentView(R.layout.main);
>       surfaceView = (SurfaceView) findViewById
> (R.id.camcordersurface);
>       surfaceHolder = surfaceView.getHolder();
>       surfaceHolder.addCallback(this);
>       surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
>       configureRecorder();
>   }
>
>   private void configureRecorder()
>   {
>       // configure media recorder
>       recorder = new MediaRecorder();
>       recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
>       recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
>       recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
>       recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
>       recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);
>   }
>
>   private void stopRecorder()
>   {
>       try
>       {
>           if (recorder == null)
>           {
>               return;
>           }
>           recorder.stop();
>           recorder.reset();
>           recorder.release();
>           recording = false;
>           recorder = null;
>       }
>       finally
>       {
>           if (recorder != null)
>           {
>               recorder.release();
>           }
>       }
>   }
>
>   private void startRecorder()
>   {
>       recorder.start();
>       recording = true;
>   }
>
>   @Override
>   public boolean onKeyDown(int keyCode, KeyEvent event)
>   {
>       if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER)
>       {
>           // if not recording then start
>           if (!recording)
>           {
>               startRecorder();
>           }
>           else
>           {
>               // if already recording then stop
>               stopRecorder();
>               finish();
>           }
>           return true;
>       }
>       return super.onKeyDown(keyCode, event);
>   }
>
>   @Override
>   public void surfaceChanged(SurfaceHolder holder, int format, int
> width,
>           int height)
>   {
>       // do nothing
>   }
>
>   @Override
>   public void surfaceCreated(SurfaceHolder holder)
>   {
>       recorder.setOutputFile("/sdcard/test" + System.currentTimeMillis
> ()
>               + ".mp4");
>       recorder.setPreviewDisplay(holder.getSurface());
>       try
>       {
>           recorder.prepare();
>       }
>       catch (IOException e)
>       {
>           Log.e("error -- ", e.toString(), e);
>           // TODO:
>           // show error message
>       }
>   }
>
>   @Override
>   public void surfaceDestroyed(SurfaceHolder holder)
>   {
>       stopRecorder();
>   }
> }
>
> And the layout ...
>
> <?xml version="1.0" encoding="utf-8"?>
> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/
> android"
>       android:orientation="vertical"
> android:layout_width="fill_parent"
>       android:layout_height="fill_parent">
>       <SurfaceView android:id="@+id/camcordersurface"
>               android:layout_width="fill_parent"
> android:layout_height="10dip"
>               android:layout_weight="1">
>       </SurfaceView>
> </LinearLayout>
>
> --~--~---------~--~----~------------~-------~--~----~
> You received this message because you are subscribed to the Google
> Groups "Android Beginners" group.
> To post to this group, send email to android-beginners@googlegroups.com
> To unsubscribe from this group, send email to
> android-beginners-unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/android-beginners?hl=en
> -~----------~----~----~----~------~----~------~--~---
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Android Beginners" group.

NEW! Try asking and tagging your question on Stack Overflow at
http://stackoverflow.com/questions/tagged/android

To unsubscribe from this group, send email to
android-beginners+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-beginners?hl=en

Reply via email to