hi, all

when I code a demo to record video, but i meet "prepare" error.
Following is my steps:
1.create surface
2. create mediarecorder
3. set audio,video endec/format/output file
4. add surface to mediarecorder
5. prepare
6. start

#define LOG_TAG "Video_Demo"

#include <cutils/memory.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>

#include <surfaceflinger/Surface.h>
#include <surfaceflinger/ISurfaceComposer.h>
#include <surfaceflinger/ISurface.h>
#include <surfaceflinger/SurfaceComposerClient.h>
#include <camera/Camera.h>
#include <camera/ICamera.h>
#include <media/mediarecorder.h>
#include <ui/Overlay.h>
#include <camera/CameraParameters.h>
#include <utils/Log.h>
#include <time.h>
#include <sys/stat.h>
#include <fcntl.h>

using namespace android;


#define INFO(...) \
    do { \
        printf(__VA_ARGS__); \
        printf("\n"); \
        LOGD(__VA_ARGS__); \
    } while(0)


int main ( )
{
        int ret = 0;
        sp<ProcessState> proc(ProcessState::self());
        ProcessState::self()->startThreadPool();

        //sp<Camera> camera = Camera::connect();
        //camera->setPreviewCallbackFlags(FRAME_CALLBACK_FLAG_CAMERA);
        //camera->startPreview();

        //INFO("camera = %p\n", camera.get());

        sp<SurfaceComposerClient> client = new SurfaceComposerClient();
        sp<SurfaceControl> sc = client->createSurface(getpid(), 0, 320, 240, 
PIXEL_FORMAT_RGB_565, ISurfaceComposer::ePushBuffers);
        INFO("SurfaceControl = %p \n", sc.get());
        client->openTransaction();
        sc->setLayer(100000);
        //sc->setSize(640, 480);
        sc->show();
        client->closeTransaction();
        INFO("closeTransaction\n");
        sp<Surface> surface = sc->getSurface();

        INFO("surface = %p\n", surface.get());

        sp<MediaRecorder> mr = new MediaRecorder();

        INFO("mediacorder = %p\n", mr.get());

        ret = mr->init();
        if (ret != NO_ERROR)
        {
                INFO("init error\n");
        }

/*
        ret = mr->setCamera(camera->remote());
        if (ret != NO_ERROR)
        {
                INFO("setCamera error\n");
        }
        */

        ret = mr->setAudioSource(AUDIO_SOURCE_MIC);
        if (ret != NO_ERROR)
        {
                INFO("setAudioSource error\n");
        }


        ret = mr->setVideoSource(VIDEO_SOURCE_CAMERA);
        if (ret != NO_ERROR)
        {
                INFO("setVideoSource error\n");
        }


        ret = mr->setOutputFormat(OUTPUT_FORMAT_MPEG_4);
        if (ret != NO_ERROR)
        {
                INFO("setOutputFormat error\n");
        }

        ret = mr->setVideoEncoder(VIDEO_ENCODER_DEFAULT);
        if (ret != NO_ERROR)
        {
                INFO("setVideoEncoder error\n");
        }


        ret = mr->setAudioEncoder(AUDIO_ENCODER_AMR_NB);
        if (ret != NO_ERROR)
        {
                INFO("setAudioEncoder error\n");
        }
        mr->setVideoSize(200, 200);
        mr->setVideoFrameRate(15);



        ret = mr->setPreviewSurface(surface);
        INFO("setPreviewSurface E28_MOT_PHONE = %d\n", E28_MOT_PHONE);

        if (ret != NO_ERROR)
        {
                INFO("setPreviewSurface error\n");
        }

        ret = mr->setOutputFile("/system/videoTest.mpeg");
        if (ret != NO_ERROR)
        {
                INFO("setOutputFile error\n");
        }


        ret = mr->prepare();
        if (ret != NO_ERROR)
        {
                INFO("prepare error\n");
        }

        ret = mr->start();
        if (ret != NO_ERROR)
        {
                INFO("start error\n");
        }

        sleep(15);

        mr->stop();
        mr->release();

        return 0;
}





-- 
unsubscribe: [email protected]
website: http://groups.google.com/group/android-porting

Reply via email to