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