Esempio n. 1
0
void
set_manual_exposure_gain(int camID, int exposure, int gain)
{
  int                       success =
    dc1394_auto_on_off(handles[cameras[camID].port], cameras[camID].node,
                       FEATURE_EXPOSURE, DC1394_FALSE);
  if (success != DC1394_SUCCESS) {
    fprintf(stderr, "can not turn off camera auto exposure\n");
    return;
  }

  success =
    dc1394_set_exposure(handles[cameras[camID].port], cameras[camID].node,
                        exposure);
  if (success != DC1394_SUCCESS) {
    fprintf(stderr, "set_exposure returned %d\n", success);
    return;
  }

  success =
    dc1394_set_gain(handles[cameras[camID].port], cameras[camID].node, gain);
  if (success != DC1394_SUCCESS) {
    fprintf(stderr, "set_gain returned %d\n", success);
    return;
  }
}
Esempio n. 2
0
//*** Method for automatic adaption of the lumination parameter****//
int CameraDcam::autoBrightness(camera_data_msg *dataPackage)
{
    int i, count, minCount, maxCount, bytesPerPixel, gain, shutter;
    double unclearPixel;
    unsigned int ubrightness;
    unsigned int ushutter;
    unsigned int ugain;
    int start;

    minCount = 0;
    maxCount = 0;
//    third = dataPackage->data.width * dataPackage->data.height

    bytesPerPixel = dataPackage->data.depth / 8;

    count = dataPackage->data.width * dataPackage->data.height * bytesPerPixel;
    start = (int)(count * (((double ) 1) - ((double) 1) / autoBrightnessSize));

    start += start % bytesPerPixel;
    start++;

    for(i = start; i < count; i += bytesPerPixel)
    {
       if((unsigned char)dataPackage->byteStream[i] <= minHue)
        {
            minCount++;
        }
        else if((unsigned char)dataPackage->byteStream[i] >= maxHue)
        {
            maxCount++;
        }
    }

    if (dc1394_get_shutter(porthandle[dc1394CameraPortNo], camera_node, &ushutter) != DC1394_SUCCESS)
    {
        GDOS_WARNING("getting of shutter failed! ");
        return DC1394_FAILURE;
    }

    if (dc1394_get_gain(porthandle[dc1394CameraPortNo], camera_node, &ugain) != DC1394_SUCCESS)
    {
        GDOS_WARNING("getting of gain failed! ");
        return DC1394_FAILURE;
    }

    if (dc1394_get_brightness(porthandle[dc1394CameraPortNo], camera_node, &ubrightness) != DC1394_SUCCESS)
    {
        GDOS_WARNING("getting of brightness failed! ");
        return DC1394_FAILURE;
    }

    GDOS_DBG_DETAIL("count %i minCount %i maxCount %i actual shutter %i gain:%i brightness:%i \n", count, minCount, maxCount, ushutter, ugain, ubrightness);

    //if pixel are too dark, light them up!
    unclearPixel = ((double)(minCount - maxCount)) / count; //percent of over or under illum. pixel

    ubrightness = 124;

    if (unclearPixel > 0)
    {   //light up
        if (ushutter < 4095)
        {
            ushutter += (unsigned int) (unclearPixel * shutterMult);
              if(ushutter > 4095)
                  ushutter = 4095;
        } else
        {   //increase gain
            ugain += (unsigned int) (unclearPixel * gainMult);
            if (ugain > 1023)
                { ugain = 1023;}
        }
    } else
    {  //unclearPixel is negative, darken image
       if (ugain > 192)
       {
           //to handle negative values
           gain = (int) (ugain + unclearPixel * gainMult);
           if (gain < 192)
               gain = 192;
           ugain = gain;
       } else
       {
           shutter = (int) (ushutter + unclearPixel * shutterMult);
           if (shutter < 1)
               shutter = 1;
           ushutter = shutter;
       }
    }

    if (dc1394_set_shutter(porthandle[dc1394CameraPortNo], camera_node, ushutter) != DC1394_SUCCESS)
    {
        GDOS_WARNING("setting of shutter failed! is value:%i", ushutter  );
        return DC1394_FAILURE;
    }

    if (dc1394_set_gain(porthandle[dc1394CameraPortNo], camera_node, ugain) != DC1394_SUCCESS)
    {
        GDOS_WARNING("setting of gain failed! is value:%i", ugain  );
        return DC1394_FAILURE;
    }

    if (dc1394_set_brightness(porthandle[dc1394CameraPortNo], camera_node, ubrightness) != DC1394_SUCCESS)
    {
        GDOS_WARNING("setting of brightness failed! is value:%i", ubrightness  );
        return DC1394_FAILURE;
    }
    GDOS_DBG_DETAIL("set shutter:%i gain:%i brightness:%i \n", ushutter, ugain, ubrightness);
    return DC1394_SUCCESS;
}