X-Git-Url: http://47.100.26.94:8080/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjni%2Flibuvc-0.0.6%2Fsrc%2Ftest.c;fp=app%2Fsrc%2Fmain%2Fjni%2Flibuvc-0.0.6%2Fsrc%2Ftest.c;h=e48cfc96febd3a5499d7697ee4049f33ef438cb0;hb=577426ccc66649228285c4a0b6ba8752836059c6;hp=0000000000000000000000000000000000000000;hpb=b7202442677d0cf41e6e59870cd6c34e5619b8b9;p=rtmpclient.git diff --git a/app/src/main/jni/libuvc-0.0.6/src/test.c b/app/src/main/jni/libuvc-0.0.6/src/test.c new file mode 100644 index 0000000..e48cfc9 --- /dev/null +++ b/app/src/main/jni/libuvc-0.0.6/src/test.c @@ -0,0 +1,153 @@ +/********************************************************************* +* Software License Agreement (BSD License) +* +* Copyright (C) 2010-2012 Ken Tossell +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without +* modification, are permitted provided that the following conditions +* are met: +* +* * Redistributions of source code must retain the above copyright +* notice, this list of conditions and the following disclaimer. +* * Redistributions in binary form must reproduce the above +* copyright notice, this list of conditions and the following +* disclaimer in the documentation and/or other materials provided +* with the distribution. +* * Neither the name of the author nor other contributors may be +* used to endorse or promote products derived from this software +* without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +* POSSIBILITY OF SUCH DAMAGE. +*********************************************************************/ +#include +#include + +#include "libuvc/libuvc.h" + +void cb(uvc_frame_t *frame, void *ptr) { + uvc_frame_t *bgr; + uvc_error_t ret; + IplImage* cvImg; + + printf("callback! length = %u, ptr = %d\n", frame->data_bytes, (int) ptr); + + bgr = uvc_allocate_frame(frame->width * frame->height * 3); + if (!bgr) { + printf("unable to allocate bgr frame!"); + return; + } + + ret = uvc_any2bgr(frame, bgr); + if (ret) { + uvc_perror(ret, "uvc_any2bgr"); + uvc_free_frame(bgr); + return; + } + + cvImg = cvCreateImageHeader( + cvSize(bgr->width, bgr->height), + IPL_DEPTH_8U, + 3); + + cvSetData(cvImg, bgr->data, bgr->width * 3); + + cvNamedWindow("Test", CV_WINDOW_AUTOSIZE); + cvShowImage("Test", cvImg); + cvWaitKey(10); + + cvReleaseImageHeader(&cvImg); + + uvc_free_frame(bgr); +} + +int main(int argc, char **argv) { + uvc_context_t *ctx; + uvc_error_t res; + uvc_device_t *dev; + uvc_device_handle_t *devh; + uvc_stream_ctrl_t ctrl; + + res = uvc_init(&ctx, NULL); + + if (res < 0) { + uvc_perror(res, "uvc_init"); + return res; + } + + puts("UVC initialized"); + + res = uvc_find_device( + ctx, &dev, + 0, 0, NULL); + + if (res < 0) { + uvc_perror(res, "uvc_find_device"); + } else { + puts("Device found"); + + res = uvc_open(dev, &devh); + + if (res < 0) { + uvc_perror(res, "uvc_open"); + } else { + puts("Device opened"); + + uvc_print_diag(devh, stderr); + + res = uvc_get_stream_ctrl_format_size( + devh, &ctrl, UVC_FRAME_FORMAT_YUYV, 640, 480, 30 + ); + + uvc_print_stream_ctrl(&ctrl, stderr); + + if (res < 0) { + uvc_perror(res, "get_mode"); + } else { + res = uvc_start_streaming(devh, &ctrl, cb, 12345, 0); + + if (res < 0) { + uvc_perror(res, "start_streaming"); + } else { + puts("Streaming for 10 seconds..."); + uvc_error_t resAEMODE = uvc_set_ae_mode(devh, 1); + uvc_perror(resAEMODE, "set_ae_mode"); + int i; + for (i = 1; i <= 10; i++) { + /* uvc_error_t resPT = uvc_set_pantilt_abs(devh, i * 20 * 3600, 0); */ + /* uvc_perror(resPT, "set_pt_abs"); */ + uvc_error_t resEXP = uvc_set_exposure_abs(devh, 20 + i * 5); + uvc_perror(resEXP, "set_exp_abs"); + + sleep(1); + } + sleep(10); + uvc_stop_streaming(devh); + puts("Done streaming."); + } + } + + uvc_close(devh); + puts("Device closed"); + } + + uvc_unref_device(dev); + } + + uvc_exit(ctx); + puts("UVC exited"); + + return 0; +} +