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 [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-beginners?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to