Advertisement
techmik

QualcommCamera.cpp

Jul 27th, 2012
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 19.40 KB | None | 0 0
  1. /*
  2. ** Copyright (c) 2011 Code Aurora Forum. All rights reserved.
  3. **
  4. ** Licensed under the Apache License, Version 2.0 (the "License");
  5. ** you may not use this file except in compliance with the License.
  6. ** You may obtain a copy of the License at
  7. **
  8. **     http://www.apache.org/licenses/LICENSE-2.0
  9. **
  10. ** Unless required by applicable law or agreed to in writing, software
  11. ** distributed under the License is distributed on an "AS IS" BASIS,
  12. ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. ** See the License for the specific language governing permissions and
  14. ** limitations under the License.
  15. */
  16.  
  17. /*#error uncomment this for compiler test!*/
  18.  
  19. //#define ALOG_NDEBUG 0
  20. #define ALOG_NIDEBUG 0
  21. #define ALOG_TAG "QualcommCamera"
  22. #include <utils/Log.h>
  23. #include <utils/threads.h>
  24. #include <fcntl.h>
  25. #include <sys/mman.h>
  26.  
  27. /* include QCamera Hardware Interface Header*/
  28. #include "QualcommCamera.h"
  29. #include "QualcommCameraHardware.h"
  30. //#include <camera/CameraHardwareInterface.h>
  31.  
  32. extern "C" {
  33. #include <sys/time.h>
  34. }
  35.  
  36. /* HAL function implementation goes here*/
  37.  
  38. /**
  39.  * The functions need to be provided by the camera HAL.
  40.  *
  41.  * If getNumberOfCameras() returns N, the valid cameraId for getCameraInfo()
  42.  * and openCameraHardware() is 0 to N-1.
  43.  */
  44.  
  45. static hw_module_methods_t camera_module_methods = {
  46.     open: camera_device_open,
  47. };
  48.  
  49.  
  50. static hw_module_t camera_common  = {
  51.   tag: HARDWARE_MODULE_TAG,
  52.   version_major: 0,
  53.   version_minor: 01,
  54.   id: CAMERA_HARDWARE_MODULE_ID,
  55.   name: "Qcamera",
  56.   author:"Qcom",
  57.   methods: &camera_module_methods,
  58.   dso: NULL,
  59.   //reserved[0]:  0,
  60. };
  61.  
  62. camera_module_t HAL_MODULE_INFO_SYM = {
  63.   common: camera_common,
  64.   get_number_of_cameras: get_number_of_cameras,
  65.   get_camera_info: get_camera_info,
  66. };
  67.  
  68. camera_device_ops_t camera_ops = {
  69.   set_preview_window: android::set_preview_window,
  70.   set_callbacks:      android::set_callbacks,
  71.   enable_msg_type:    android::enable_msg_type,
  72.   disable_msg_type:   android::disable_msg_type,
  73.   msg_type_enabled:   android::msg_type_enabled,
  74.  
  75.   start_preview:      android::start_preview,
  76.   stop_preview:       android::stop_preview,
  77.   preview_enabled:    android::preview_enabled,
  78.   store_meta_data_in_buffers: android::store_meta_data_in_buffers,
  79.  
  80.   start_recording:            android::start_recording,
  81.   stop_recording:             android::stop_recording,
  82.   recording_enabled:          android::recording_enabled,
  83.   release_recording_frame:    android::release_recording_frame,
  84.  
  85.   auto_focus:                 android::auto_focus,
  86.   cancel_auto_focus:          android::cancel_auto_focus,
  87.  
  88.   take_picture:               android::take_picture,
  89.   cancel_picture:             android::cancel_picture,
  90.  
  91.   set_parameters:             android::set_parameters,
  92.   get_parameters:             android::get_parameters,
  93.   put_parameters:             android::put_parameters,
  94.   send_command:               android::send_command,
  95.  
  96.   release:                    android::release,
  97.   dump:                       android::dump,
  98. };
  99.  
  100. namespace android {
  101.  
  102. typedef struct {
  103.   QualcommCameraHardware *hardware;
  104.   int camera_released;
  105.   QCameraParameters parameters;
  106.   #if 1
  107.   camera_notify_callback notify_cb;
  108.   camera_data_callback data_cb;
  109.   camera_data_timestamp_callback data_cb_timestamp;
  110.   camera_request_memory get_memory;
  111.   void *user_data;
  112.   #endif
  113. } camera_hardware_t;
  114.  
  115. typedef struct {
  116.   camera_memory_t mem;
  117.   int32_t msgType;
  118.   sp<IMemory> dataPtr;
  119.   void* user;
  120.   unsigned int index;
  121. } q_cam_memory_t;
  122.  
  123.  
  124. static void camera_release_memory(struct camera_memory *mem)
  125. {
  126. }
  127.  
  128. void cam_notify_callback(int32_t msgType,
  129.                                 int32_t ext1,
  130.                                 int32_t ext2,
  131.                                 void* user)
  132. {
  133.   ALOGE("Q%s: E", __func__);
  134.   camera_device * device = (camera_device *)user;
  135.   if(device) {
  136.     camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  137.     if(camHal) {
  138.       camera_notify_callback notify_cb = camHal->notify_cb;
  139.       void *user_data = camHal->user_data;
  140.       if(notify_cb) {
  141.         notify_cb(msgType, ext1, ext2, user_data);
  142.       }
  143.     }
  144.   }
  145. }
  146.  
  147. camera_memory_t* get_mem(int fd,size_t buf_size,
  148.                                 unsigned int num_bufs,
  149.                                 void *user)
  150. {
  151.   ALOGE("Q%s: E", __func__);
  152.   camera_device * device = (camera_device *)user;
  153.   if(device) {
  154.     camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  155.     if(camHal) {
  156.       camera_request_memory getmem_cb = camHal->get_memory;
  157.       void *user_data = camHal->user_data;
  158.       if(getmem_cb) {
  159.         return getmem_cb(fd, buf_size, num_bufs, user_data);
  160.       }
  161.     }
  162.   }
  163.   return NULL;
  164. }
  165. #if 0
  166. void native_send_data_callback(int32_t msgType,
  167.                               camera_memory_t * framebuffer,
  168.                               void* user)
  169. {
  170.   ALOGE("Q%s: E", __func__);
  171.   static unsigned int counter = 0;
  172. #if 0
  173.   camera_device * device = (camera_device *)user;
  174.   if(device) {
  175.     camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  176.     if(camHal) {
  177.       camera_data_callback data_cb = camHal->data_cb;
  178.       void *user_data = camHal->user_data;
  179.       if(data_cb) {
  180.         q_cam_memory_t *qmem = (q_cam_memory_t *)malloc(sizeof(q_cam_memory_t));
  181.         if (qmem) {
  182.           qmem->dataPtr = dataPtr;
  183.           qmem->mem.data = (void *)((int)dataPtr->pointer() + dataPtr->offset());
  184.           qmem->mem.handle = NULL; //(void *)dataPtr->getHeapID();
  185.           qmem->mem.size = dataPtr->size( );
  186.           qmem->mem.release = camera_release_memory;
  187.           qmem->msgType = msgType;
  188.           qmem->index = counter;
  189. #endif
  190.           data_cb(msgType, framebuffer, counter, NULL, user);
  191.           counter++;
  192. #if 0
  193.         } else {
  194.           ALOGE("%s: out of memory", __func__);
  195.         }
  196. #endif
  197. //      }
  198. //    }
  199. //  }
  200. }
  201. #endif
  202.  
  203. static void cam_data_callback(int32_t msgType,
  204.                               const sp<IMemory>& dataPtr,
  205.                               void* user)
  206. {
  207.   ALOGE("Q%s: E", __func__);
  208.   static unsigned int counter = 0;
  209.   camera_device * device = (camera_device *)user;
  210.   if(device) {
  211.     camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  212.     if(camHal) {
  213.       camera_data_callback data_cb = camHal->data_cb;
  214.       void *user_data = camHal->user_data;
  215.       if(data_cb) {
  216.         q_cam_memory_t *qmem = (q_cam_memory_t *)malloc(sizeof(q_cam_memory_t));
  217.         if (qmem) {
  218.           qmem->dataPtr = dataPtr;
  219.           qmem->mem.data = (void *)((int)dataPtr->pointer() + dataPtr->offset());
  220.           qmem->mem.handle = NULL; //(void *)dataPtr->getHeapID();
  221.           qmem->mem.size = dataPtr->size( );
  222.           qmem->mem.release = camera_release_memory;
  223.           qmem->msgType = msgType;
  224.           qmem->index = counter;
  225.           counter++;
  226.           data_cb(msgType, (camera_memory_t *)qmem, counter, NULL, user_data);
  227.         } else {
  228.           ALOGE("%s: out of memory", __func__);
  229.         }
  230.       }
  231.     }
  232.   }
  233. }
  234.  
  235. static void cam_data_callback_timestamp(nsecs_t timestamp,
  236.                                         int32_t msgType,
  237.                                         const sp<IMemory>& dataPtr,
  238.                                         void* user)
  239. {
  240.   ALOGE("Q%s: E", __func__);
  241.  
  242.   static unsigned int counter = 0;
  243.   camera_device * device = (camera_device *)user;
  244.   if(device) {
  245.     camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  246.     if(camHal) {
  247.       camera_data_timestamp_callback data_cb_timestamp = camHal->data_cb_timestamp;
  248.       void *user_data = camHal->user_data;
  249.       if(data_cb_timestamp) {
  250.         q_cam_memory_t *qmem = (q_cam_memory_t *)malloc(sizeof(q_cam_memory_t));
  251.         if (qmem) {
  252.           qmem->dataPtr = dataPtr;
  253.           qmem->mem.data = (void *)((int)dataPtr->pointer() + dataPtr->offset());
  254.           qmem->mem.handle = NULL; //(void *)dataPtr->getHeapID();
  255.           qmem->mem.size = dataPtr->size( );
  256.           qmem->mem.release = camera_release_memory;
  257.           qmem->msgType = msgType;
  258.           qmem->index = counter;
  259.           counter++;
  260.           data_cb_timestamp(timestamp, msgType, (camera_memory_t *)qmem, counter, user_data);
  261.         } else {
  262.           ALOGE("%s: out of memory", __func__);
  263.         }
  264.       }
  265.     }
  266.   }
  267. }
  268.  
  269. QualcommCameraHardware * util_get_Hal_obj( struct camera_device * device)
  270. {
  271.   QualcommCameraHardware* hardware = NULL;
  272.   if(device && device->priv){
  273.       camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  274.       hardware = camHal->hardware;
  275.   }
  276.   return hardware;
  277. }
  278. void close_Hal_obj( struct camera_device * device)
  279. {
  280.   ALOGI("%s: E", __func__);
  281.   QualcommCameraHardware* hardware = NULL;
  282.   if(device && device->priv){
  283.       camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  284.       ALOGI("%s: clear hw", __func__);
  285.       hardware = camHal->hardware;
  286.       delete hardware;
  287.   }
  288.   ALOGI("%s: X", __func__);
  289. }
  290.  
  291.  
  292. QCameraParameters* util_get_HAL_parameter( struct camera_device * device)
  293. {
  294.   QCameraParameters *param = NULL;
  295.   if(device && device->priv){
  296.       camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  297.       param = &(camHal->parameters);
  298.   }
  299.   return param;
  300. }
  301.  
  302.  
  303. extern "C" int get_number_of_cameras()
  304. {
  305.     /* try to query every time we get the call!*/
  306.  
  307.     ALOGE("Q%s: E", __func__);
  308.     return android::HAL_getNumberOfCameras( );
  309. }
  310.  
  311. extern "C" int get_camera_info(int camera_id, struct camera_info *info)
  312. {
  313.   int rc = -1;
  314.   ALOGE("Q%s: E", __func__);
  315.   if(info) {
  316.     struct CameraInfo camInfo;
  317.     memset(&camInfo, -1, sizeof (struct CameraInfo));
  318.     HAL_getCameraInfo(camera_id, &camInfo);
  319.     if (camInfo.facing >= 0) {
  320.       rc = 0;
  321.       info->facing = camInfo.facing;
  322.       info->orientation = camInfo.orientation;
  323.     }
  324.   }
  325.    ALOGV("Q%s: X", __func__);
  326.    return rc;
  327. }
  328.  
  329.  
  330. /* HAL should return NULL if it fails to open camera hardware. */
  331. extern "C" int  camera_device_open(
  332.   const struct hw_module_t* module, const char* id,
  333.           struct hw_device_t** hw_device)
  334. {
  335.     ALOGE("Q%s: E", __func__);
  336.     int rc = -1;
  337.     camera_device *device = NULL;
  338.     if(module && id && hw_device) {
  339.       int cameraId = atoi(id);
  340.  
  341.       if (!strcmp(module->name, camera_common.name)) {
  342.         device =
  343.           (camera_device *)malloc(sizeof (struct camera_device));
  344.         if(device) {
  345.           camera_hardware_t *camHal =
  346.             (camera_hardware_t *) malloc(sizeof (camera_hardware_t));
  347.           if(camHal) {
  348.             memset(camHal, 0, sizeof (camera_hardware_t));
  349.             camHal->hardware = HAL_openCameraHardware(cameraId);
  350.             if (camHal->hardware != NULL) {
  351.               /*To Do: populate camHal*/
  352.               device->common.close = close_camera_device;
  353.               device->ops = &camera_ops;
  354.               device->priv = (void *)camHal;
  355.               rc =  0;
  356.             } else {
  357.               free(camHal);
  358.               free (device);
  359.              device = NULL;
  360.             }
  361.           } else {
  362.             free (device);
  363.             device = NULL;
  364.           }
  365.         }
  366.       }
  367.     }
  368.     *hw_device = (hw_device_t*)device;
  369.     return rc;
  370. }
  371.  
  372. extern "C"  int close_camera_device( hw_device_t *hw_dev)
  373. {
  374.   ALOGE("Q%s: device =%p E", __func__, hw_dev);
  375.   int rc =  -1;
  376.   camera_device_t *device = (camera_device_t *)hw_dev;
  377.   if(device) {
  378.     camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  379.     if(camHal ) {
  380.       //if(!camHal->camera_released) {
  381.          QualcommCameraHardware* hardware = util_get_Hal_obj( device);
  382.          if(hardware != NULL) {
  383.            if(camHal->camera_released != true)
  384.            hardware->release( );
  385.            //hardware.clear( );
  386.  
  387.          }
  388.       //}
  389.       close_Hal_obj(device);
  390.       free(device->priv);
  391.       device->priv = NULL;
  392.     }
  393.     free(device);
  394.     rc = 0;
  395.   }
  396.   return rc;
  397. }
  398.  
  399.  
  400. int set_preview_window(struct camera_device * device,
  401.         struct preview_stream_ops *window)
  402. {
  403.   ALOGE("Q%s: E window = %p", __func__, window);
  404.   int rc = -1;
  405.   QualcommCameraHardware *hardware = util_get_Hal_obj(device);
  406.   if(hardware != NULL) {
  407.    rc = hardware->set_PreviewWindow((void *)window);
  408.   }
  409.   return rc;
  410. }
  411.  
  412. void set_callbacks(struct camera_device * device,
  413.         camera_notify_callback notify_cb,
  414.         camera_data_callback data_cb,
  415.         camera_data_timestamp_callback data_cb_timestamp,
  416.         camera_request_memory get_memory,
  417.         void *user)
  418. {
  419.   ALOGE("Q%s: E", __func__);
  420.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  421.   if(hardware != NULL){
  422.     camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  423.     if(camHal) {
  424.       camera_notify_callback cam_nt_cb;
  425.       camera_data_callback cam_dt_cb;
  426.       camera_data_timestamp_callback cam_dt_timestamp_cb;
  427.  
  428.       camHal->notify_cb = notify_cb;
  429.       camHal->data_cb = data_cb;
  430.       camHal->data_cb_timestamp = data_cb_timestamp;
  431.       camHal->user_data = user;
  432.       camHal->get_memory = get_memory;
  433.       #if 0
  434.       if(notify_cb) {
  435.         cam_nt_cb = cam_notify_callback;
  436.       } else {
  437.         cam_nt_cb = NULL;
  438.       }
  439.  
  440.       if(data_cb) {
  441.         cam_dt_cb = cam_data_callback;
  442.       } else {
  443.         cam_dt_cb = NULL;
  444.       }
  445.  
  446.       if(data_cb_timestamp) {
  447.         cam_dt_timestamp_cb = cam_data_callback_timestamp;
  448.       } else {
  449.         cam_dt_timestamp_cb = NULL;
  450.       }
  451.       #endif
  452.       ALOGE("cam_nt_cb =%p,cam_dt_cb=%p,cam_dt_timestamp_cb=%p",  cam_nt_cb, cam_dt_cb, cam_dt_timestamp_cb);
  453.       hardware->setCallbacks(notify_cb,data_cb,data_cb_timestamp,get_memory, user);
  454.     }
  455.   }
  456. }
  457.  
  458. void enable_msg_type(struct camera_device * device, int32_t msg_type)
  459. {
  460.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  461.   if(hardware != NULL){
  462.     hardware->enableMsgType(msg_type);
  463.   }
  464. }
  465.  
  466. void disable_msg_type(struct camera_device * device, int32_t msg_type)
  467. {
  468.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  469.   ALOGE("Q%s: E", __func__);
  470.   if(hardware != NULL){
  471.     hardware->disableMsgType(msg_type);
  472.   }
  473. }
  474.  
  475. int msg_type_enabled(struct camera_device * device, int32_t msg_type)
  476. {
  477.   ALOGE("Q%s: E", __func__);
  478.   int rc = -1;
  479.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  480.   if(hardware != NULL){
  481.     rc = hardware->msgTypeEnabled(msg_type);
  482.   }
  483.   return rc;
  484. }
  485.  
  486. int start_preview(struct camera_device * device)
  487. {
  488.   ALOGE("Q%s: E", __func__);
  489.   int rc = -1;
  490.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  491.   if(hardware != NULL){
  492.     rc = hardware->startPreview( );
  493.   }
  494.   ALOGE("Q%s: X", __func__);
  495.   return rc;
  496. }
  497.  
  498. void stop_preview(struct camera_device * device)
  499. {
  500.   ALOGE("Q%s: E", __func__);
  501.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  502.   if(hardware != NULL){
  503.     hardware->stopPreview( );
  504.   }
  505. }
  506.  
  507. int preview_enabled(struct camera_device * device)
  508. {
  509.   ALOGE("Q%s: E", __func__);
  510.   int rc = -1;
  511.   QualcommCameraHardware* hardware = util_get_Hal_obj(device);
  512.   if(hardware != NULL){
  513.     rc = hardware->previewEnabled( );
  514.   }
  515.   return rc;
  516. }
  517.  
  518. int store_meta_data_in_buffers(struct camera_device * device, int enable)
  519. {
  520.   ALOGE("Q%s: E", __func__);
  521.   int rc = -1;
  522.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  523.   if(hardware != NULL){
  524.     rc = hardware->storeMetaDataInBuffers( enable);
  525.   }
  526.   return rc;
  527. }
  528.  
  529. int start_recording(struct camera_device * device)
  530. {
  531.   ALOGE("Q%s: E", __func__);
  532.   int rc = -1;
  533.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  534.   if(hardware != NULL){
  535.     rc = hardware->startRecording( );
  536.   }
  537.   return rc;
  538. }
  539.  
  540. void stop_recording(struct camera_device * device)
  541. {
  542.   ALOGE("Q%s: E", __func__);
  543.   QualcommCameraHardware* hardware = util_get_Hal_obj(device);
  544.   if(hardware != NULL){
  545.     hardware->stopRecording( );
  546.   }
  547. }
  548.  
  549. int recording_enabled(struct camera_device * device)
  550. {
  551.   ALOGE("Q%s: E", __func__);
  552.   int rc = -1;
  553.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  554.   if(hardware != NULL){
  555.     rc = hardware->recordingEnabled( );
  556.   }
  557.   return rc;
  558. }
  559.  
  560. void release_recording_frame(struct camera_device * device,
  561.                 const void *opaque)
  562. {
  563.   ALOGE("Q%s: E", __func__);
  564.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  565.   if(hardware != NULL){
  566.     hardware->releaseRecordingFrame( opaque);
  567.   }
  568. }
  569.  
  570. int auto_focus(struct camera_device * device)
  571. {
  572.   ALOGE("Q%s: E", __func__);
  573.   int rc = -1;
  574.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  575.   if(hardware != NULL){
  576.     rc = hardware->autoFocus( );
  577.   }
  578.   return rc;
  579. }
  580.  
  581. int cancel_auto_focus(struct camera_device * device)
  582. {
  583.   ALOGE("Q%s: E", __func__);
  584.   int rc = -1;
  585.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  586.   if(hardware != NULL){
  587.     rc = hardware->cancelAutoFocus( );
  588.   }
  589.   return rc;
  590. }
  591.  
  592. int take_picture(struct camera_device * device)
  593. {
  594.   ALOGE("Q%s: E", __func__);
  595.   int rc = -1;
  596.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  597.   if(hardware != NULL){
  598.     rc = hardware->takePicture( );
  599.   }
  600.   return rc;
  601. }
  602.  
  603. int cancel_picture(struct camera_device * device)
  604.  
  605. {
  606.   ALOGE("Q%s: E", __func__);
  607.   int rc = -1;
  608.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  609.   if(hardware != NULL){
  610.     rc = hardware->cancelPicture( );
  611.   }
  612.   return rc;
  613. }
  614.  
  615. QCameraParameters g_param;
  616. String8 g_str;
  617. int set_parameters(struct camera_device * device, const char *parms)
  618.  
  619. {
  620.   ALOGE("Q%s: E", __func__);
  621.   int rc = -1;
  622.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  623.   if(hardware != NULL && parms){
  624.     // = util_get_HAL_parameter(device);
  625.     g_str = String8(parms);
  626.  
  627.    g_param.unflatten(g_str);
  628.    rc = hardware->setParameters( g_param );
  629.   }
  630.   return rc;
  631. }
  632.  
  633. char* get_parameters(struct camera_device * device)
  634. {
  635.   ALOGE("Q%s: E", __func__);
  636.   char* rc = NULL;
  637.  
  638.   QCameraParameters param;
  639.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  640.   if(hardware != NULL){
  641.     g_param = hardware->getParameters( );
  642.     g_str = g_param.flatten( );
  643.     rc = (char *)g_str.string( );
  644.     if (!rc) {
  645.       ALOGE("get_parameters: NULL string");
  646.     } else {
  647.       //ALOGE("get_parameters: %s", rc);
  648.     }
  649.   }
  650.   ALOGE("get_parameters X");
  651.   return rc;
  652. }
  653.  
  654. void put_parameters(struct camera_device * device, char *parm)
  655.  
  656. {
  657.   ALOGE("Q%s: E", __func__);
  658.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  659.   if(hardware != NULL){
  660.     if(hardware != NULL){
  661.       //rc = hardware->putParameters(parm );
  662.     }
  663.   }
  664.   ALOGE("put_parameters X");
  665. }
  666.  
  667. int send_command(struct camera_device * device,
  668.             int32_t cmd, int32_t arg1, int32_t arg2)
  669. {
  670.   ALOGE("Q%s: E", __func__);
  671.   int rc = -1;
  672.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  673.   if(hardware != NULL){
  674.     rc = hardware->sendCommand( cmd, arg1, arg2);
  675.   }
  676.   return rc;
  677. }
  678.  
  679. void release(struct camera_device * device)
  680. {
  681.   ALOGE("Q%s: E", __func__);
  682.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  683.   if(hardware != NULL){
  684.     camera_hardware_t *camHal = (camera_hardware_t *)device->priv;
  685.     hardware->release( );
  686.     camHal->camera_released = true;
  687.   }
  688. }
  689.  
  690. int dump(struct camera_device * device, int fd)
  691. {
  692.   ALOGE("Q%s: E", __func__);
  693.   int rc = -1;
  694.   QualcommCameraHardware * hardware = util_get_Hal_obj(device);
  695.   if(hardware != NULL){
  696.     //rc = hardware->dump( fd );
  697.     rc = 0;
  698.   }
  699.   return rc;
  700. }
  701.  
  702. }; // namespace android
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement