예제 #1
0
 IOutputStream&
 BinaryOutputStream::write(const void* data, const uint32_t size)
 {
     requestSize(size);
     Memory::Copy(mBuffer.getRawData() + mSize, data, size);
     mSize += size;
     return *this;
 }
예제 #2
0
void CDigitalCamera::PowerOnComplete(TInt aError)
{
    TCameraInfo cameraInfo;
    iCamera->CameraInfo(cameraInfo);

    if ((aError == KErrNone) &&
        (cameraInfo.iOptionsSupported & TCameraInfo::EViewFinderBitmapsSupported) &&
        (cameraInfo.iOrientation == TCameraInfo::EOrientationOutwards))
    {
        TSize requestSize(iViewportSize);

        LOGARG("Requesting viewfinder size %d x %d", requestSize.iWidth, requestSize.iHeight);
        TRAPD(error, iCamera->StartViewFinderL(CCamera::EFormatFbsBitmapColor16MU, requestSize));
        LOGARG("Obtaining viewfinder size %d x %d", requestSize.iWidth, requestSize.iHeight);

        iObserver.CameraReady(error);
    }
    else
    {
        // Either power complete error or viewfinder bitmap unsupported 
        iObserver.CameraReady(KErrNotSupported);
    }
}
void VideoInput::configure_v4l2(int index, bool silent)
{
#ifdef Q_OS_LINUX

    cv::Size requestSize(0,0);
    int CameraNumber = index;

    /* Print the CameraNumber at the end of the string with a width of one character */
    char deviceName[V4L2_MAX_DEVICE_DRIVER_NAME];
    sprintf(deviceName, "/dev/video%1d", CameraNumber);

    /* Test using an open to see if this new device name really does exists. */
    int deviceHandle = open(deviceName, O_RDONLY);
    if (deviceHandle != -1)
    {
        //find the maximum resolution
        struct v4l2_fmtdesc fmtdesc;
        fmtdesc.index = 0;
        fmtdesc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
        while (ioctl(deviceHandle, VIDIOC_ENUM_FMT, &fmtdesc)==0 && fmtdesc.index!=EINVAL)
        {
            if (!silent) { fprintf(stderr, "v4l cam %d, pixel_format %d: %s\n", CameraNumber, fmtdesc.index, fmtdesc.description); }
            
            struct v4l2_frmsizeenum frmsizeenum;
            frmsizeenum.index = 0;
            frmsizeenum.pixel_format = fmtdesc.pixelformat;

            while (ioctl(deviceHandle, VIDIOC_ENUM_FRAMESIZES, &frmsizeenum)==0 && frmsizeenum.index!=EINVAL)
            {
                cv::Size size;
                if (frmsizeenum.type==V4L2_FRMSIZE_TYPE_DISCRETE)
                {
                    size = cv::Size(frmsizeenum.discrete.width, frmsizeenum.discrete.height);
                }
                else
                {
                    size = cv::Size(frmsizeenum.stepwise.max_width, frmsizeenum.stepwise.min_height);
                }

                if (requestSize.width<size.width)
                {
                    requestSize = size;
                }
                
                if (!silent) { fprintf(stderr, "v4l cam %d, supported size w=%d h=%d\n", CameraNumber, size.width, size.height); }

                ++frmsizeenum.index;
            }
            ++fmtdesc.index;
        }
    }
    close(deviceHandle);

	 // RSA_HACK:
	 if (requestSize.width == 2304 && requestSize.height == 1296)
	 {
		 requestSize.width = 1920;
		 requestSize.height = 1080;
	 }

    if (_video_capture && requestSize.width>0)
    {
        if (!silent) { fprintf(stderr, " *** v4l cam %d, selected size w=%d h=%d\n", CameraNumber, requestSize.width, requestSize.height); }
        
        cvSetCaptureProperty(_video_capture, CV_CAP_PROP_FRAME_WIDTH, requestSize.width);
        cvSetCaptureProperty(_video_capture, CV_CAP_PROP_FRAME_HEIGHT, requestSize.height);
    }

#endif //Q_OS_LINUX
}