dear all,

I am wirte a demo to start camera preview/take picture/recording with Camera 
class in native lib.
It seems there are two ways to implement this. 
1. use surface (this is prefer for me)
2. the callback function(postData) in added camera listener.
 virtual void postData(int32_t msgType, const sp<IMemory>& dataPtr) 

I set a surface for camera, but can not preview. And I do not how to use the 
raw data in callback function.

Could anyone help me out, pls?
Thanks in advance!

#include <cutils/memory.h>
//#include <utils/Log.h>
#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IServiceManager.h>
#include <surfaceflinger/Surface.h>
#include <surfaceflinger/ISurface.h>
#include <surfaceflinger/ISurfaceComposer.h>
#include <surfaceflinger/SurfaceComposerClient.h>
#include <camera/Camera.h>
#include <camera/ICamera.h>
#include <ui/Overlay.h>
using namespace android;
class MyCameraListener : public CameraListener
{
public:
    virtual void notify(int32_t msgType, int32_t ext1, int32_t ext2)
{
printf("notify\n");
} 
    virtual void postData(int32_t msgType, const sp<IMemory>& dataPtr)
{
printf("postData IMemory = %p\n", dataPtr->pointer());
  }
    virtual void postDataTimestamp(nsecs_t timestamp, int32_t msgType, const 
sp<IMemory>& dataPtr)
{
printf("postDataTimestamp\n");
}
};
int main(int argc, char** argv)
{
   
    // set up the thread-pool
    sp<ProcessState> proc(ProcessState::self());
    ProcessState::self()->startThreadPool();
//create surface
sp<SurfaceComposerClient> client = new SurfaceComposerClient();
sp<SurfaceControl> surfaceControl = client->createSurface(getpid(), 0, 480, 
640, PIXEL_FORMAT_RGB_565);
client->openTransaction();
surfaceControl->setLayer(100000);
surfaceControl->setSize(640, 480);
client->closeTransaction();
sp<Surface> surface = surfaceControl->getSurface();
//create camera
sp<Camera> camera  = Camera::connect();
    if (camera == NULL)
    {
printf("Camera::connect() fail \n");
return 0;
    } 
camera->setPreviewCallbackFlags(FRAME_CALLBACK_FLAG_BARCODE_SCANNER);
//set listener
sp<CameraListener> listener = new MyCameraListener();
camera->setListener(listener);
    
//set Preview surface
    if (NO_INIT == camera->setPreviewDisplay(surface))
{
printf("camera->setPreviewDisplay(surface) fail \n");
}
//start preview
    
    if (NO_INIT == camera->startPreview())
{
printf("ICamera do not be init:startPreview\n");
exit(1);
}
printf("after preview ... \n");
//disconnect camera  
camera->disconnect();
    
    IPCThreadState::self()->joinThreadPool();
    return 0;
}


2010-10-14 



allen

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

Reply via email to