diff options
| author | scuri <scuri> | 2011-09-30 16:33:33 +0000 | 
|---|---|---|
| committer | scuri <scuri> | 2011-09-30 16:33:33 +0000 | 
| commit | 8bb988adebf949a8e48dd4e30d0b039808fc91b3 (patch) | |
| tree | 0083b6cbca0af11ce501495ac18536345da642a1 /html | |
| parent | 7f7f2c488079f2929f8295eccb491cbe3b40f301 (diff) | |
Diffstat (limited to 'html')
| -rw-r--r-- | html/examples/videocapture.wlua | 82 | 
1 files changed, 82 insertions, 0 deletions
diff --git a/html/examples/videocapture.wlua b/html/examples/videocapture.wlua new file mode 100644 index 0000000..f6b065f --- /dev/null +++ b/html/examples/videocapture.wlua @@ -0,0 +1,82 @@ +local im = require "imlua" +require "imlua_capture" +local gl = require "luagl" +local iup = require "iuplua" +require "iupluagl" + +local vc = im.VideoCaptureCreate() +if (not vc) then +  error("ERROR: No capture device found!") +end + +if (vc:Connect(0) == 0) then +  error("ERROR: Fail to connect to capture device") +end + +local capw, caph = vc:GetImageSize() +local initimgsize = string.format("%ix%i", capw, caph) + + +local frbuf = im.ImageCreate(capw, caph, im.RGB, im.BYTE) +local gldata, glformat = frbuf:GetOpenGLData() + +cnv = iup.glcanvas{buffer="DOUBLE", rastersize = initimgsize} + +function cnv:resize_cb(width, height) +  iup.GLMakeCurrent(self) +  gl.Viewport(0, 0, width, height) +end + +function cnv:action(x, y) +  iup.GLMakeCurrent(self) +  gl.PixelStore(gl.UNPACK_ALIGNMENT, 1) + +  gldata, glformat = frbuf:GetOpenGLData() --update the data +  gl.DrawPixelsRaw (capw, caph, glformat, gl.UNSIGNED_BYTE, gldata) + +  iup.GLSwapBuffers(self) +end + + +vc:Live(1) + +local dlg = iup.dialog{title = "Oh Snap!", cnv} + +local in_loop = true + +function dlg:close_cb() +  in_loop = false +end + +function dlg:k_any(c) +  if c == iup.K_q or c == iup.K_ESC then +    return iup.CLOSE +  end + +  if c == iup.K_F1 then +    if fullscreen then +      fullscreen = false +      dlg.fullscreen = "No" +    else +      fullscreen = true +      dlg.fullscreen = "Yes" +    end +    iup.SetFocus(cnv) +  end +end + +dlg:show() +iup.SetFocus(cnv) + +while in_loop do +  vc:Frame(frbuf,-1) +  iup.Update(cnv) +  local result = iup.LoopStep() +  if result == iup.CLOSE then +    in_loop = false +  end +end + +vc:Live(0) +vc:Disconnect() +vc:Destroy()  | 
