Fixed crash when running start_capture a second time

This commit is contained in:
Mathias Westerdahl 2017-11-17 14:12:08 +01:00
parent 49f954ae04
commit 652242fe85
4 changed files with 177 additions and 19 deletions

View File

@ -390,6 +390,7 @@ int CameraPlatform_StopCapture()
{ {
[g_Camera.m_Delegate stopCamera]; [g_Camera.m_Delegate stopCamera];
[g_Camera.m_Delegate release]; [g_Camera.m_Delegate release];
g_Camera.m_Delegate = 0;
dmBuffer::Destroy(g_Camera.m_VideoBuffer); dmBuffer::Destroy(g_Camera.m_VideoBuffer);
g_Camera.m_VideoBuffer = 0; g_Camera.m_VideoBuffer = 0;

View File

@ -0,0 +1,12 @@
key_trigger {
input: KEY_SPACE
action: "space"
}
mouse_trigger {
input: MOUSE_BUTTON_1
action: "touch"
}
touch_trigger {
input: TOUCH_MULTI
action: "touch"
}

View File

@ -77,6 +77,116 @@ embedded_instances {
" w: 1.0\n" " w: 1.0\n"
" }\n" " }\n"
"}\n" "}\n"
"embedded_components {\n"
" id: \"label\"\n"
" type: \"label\"\n"
" data: \"size {\\n"
" x: 128.0\\n"
" y: 32.0\\n"
" z: 0.0\\n"
" w: 0.0\\n"
"}\\n"
"scale {\\n"
" x: 1.0\\n"
" y: 1.0\\n"
" z: 1.0\\n"
" w: 0.0\\n"
"}\\n"
"color {\\n"
" x: 1.0\\n"
" y: 1.0\\n"
" z: 1.0\\n"
" w: 1.0\\n"
"}\\n"
"outline {\\n"
" x: 0.0\\n"
" y: 0.0\\n"
" z: 0.0\\n"
" w: 1.0\\n"
"}\\n"
"shadow {\\n"
" x: 0.0\\n"
" y: 0.0\\n"
" z: 0.0\\n"
" w: 1.0\\n"
"}\\n"
"leading: 1.0\\n"
"tracking: 0.0\\n"
"pivot: PIVOT_NW\\n"
"blend_mode: BLEND_MODE_ALPHA\\n"
"line_break: false\\n"
"text: \\\"Space/Touch to toggle capture\\\"\\n"
"font: \\\"/builtins/fonts/system_font.font\\\"\\n"
"material: \\\"/builtins/fonts/label.material\\\"\\n"
"\"\n"
" position {\n"
" x: 90.0\n"
" y: 0.0\n"
" z: 0.0\n"
" }\n"
" rotation {\n"
" x: 0.0\n"
" y: 0.0\n"
" z: 0.0\n"
" w: 1.0\n"
" }\n"
"}\n"
"embedded_components {\n"
" id: \"status\"\n"
" type: \"label\"\n"
" data: \"size {\\n"
" x: 128.0\\n"
" y: 32.0\\n"
" z: 0.0\\n"
" w: 0.0\\n"
"}\\n"
"scale {\\n"
" x: 1.0\\n"
" y: 1.0\\n"
" z: 1.0\\n"
" w: 0.0\\n"
"}\\n"
"color {\\n"
" x: 1.0\\n"
" y: 1.0\\n"
" z: 1.0\\n"
" w: 1.0\\n"
"}\\n"
"outline {\\n"
" x: 0.0\\n"
" y: 0.0\\n"
" z: 0.0\\n"
" w: 1.0\\n"
"}\\n"
"shadow {\\n"
" x: 0.0\\n"
" y: 0.0\\n"
" z: 0.0\\n"
" w: 1.0\\n"
"}\\n"
"leading: 1.0\\n"
"tracking: 0.0\\n"
"pivot: PIVOT_NW\\n"
"blend_mode: BLEND_MODE_ALPHA\\n"
"line_break: false\\n"
"text: \\\"label\\\\n"
"\\\"\\n"
" \\\"\\\"\\n"
"font: \\\"/builtins/fonts/system_font.font\\\"\\n"
"material: \\\"/builtins/fonts/label.material\\\"\\n"
"\"\n"
" position {\n"
" x: 90.0\n"
" y: -24.0\n"
" z: 0.0\n"
" }\n"
" rotation {\n"
" x: 0.0\n"
" y: 0.0\n"
" z: 0.0\n"
" w: 1.0\n"
" }\n"
"}\n"
"" ""
position { position {
x: 95.39966 x: 95.39966

View File

@ -1,12 +1,20 @@
function init(self) local function stop_capture(self)
local logosize = 128 if self.cameraframe == nil then
local screen_width = sys.get_config("display.width", 600) return
local screen_height = sys.get_config("display.height", 800) end
local scale_width = screen_width / logosize
local scale_height = screen_height / logosize self.cameraframe = nil
camera.stop_capture()
go.set("#sprite", "scale", vmath.vector3(scale_width, scale_height, 1) ) label.set_text("logo#status", "Capture Status: OFF")
end
local function start_capture(self)
if self.cameraframe ~= nil then
return
end
if camera ~= nil then if camera ~= nil then
@ -20,22 +28,39 @@ function init(self)
end end
if camera.start_capture(type, quality) then if camera.start_capture(type, quality) then
self.cameraframe = camera.get_frame() self.cameraframe = camera.get_frame()
self.camerainfo = camera.get_info() self.camerainfo = camera.get_info()
print("Initialized camera") print("Initialized camera")
pprint(self.camerainfo) pprint(self.camerainfo)
self.cameratextureheader = {width=self.camerainfo.width, self.cameratextureheader = {width=self.camerainfo.width,
height=self.camerainfo.height, height=self.camerainfo.height,
type=resource.TEXTURE_TYPE_2D, type=resource.TEXTURE_TYPE_2D,
format=resource.TEXTURE_FORMAT_RGB, format=resource.TEXTURE_FORMAT_RGB,
num_mip_maps=1 } num_mip_maps=1 }
end end
label.set_text("logo#status", "Capture Status: ON")
else else
print("could not start camera capture") print("could not start camera capture")
label.set_text("logo#status", "Capture Status: UNAVAILABLE")
end end
end end
function init(self)
msg.post(".", "acquire_input_focus")
local logosize = 128
local screen_width = sys.get_config("display.width", 600)
local screen_height = sys.get_config("display.height", 800)
local scale_width = screen_width / logosize
local scale_height = screen_height / logosize
go.set("#sprite", "scale", vmath.vector3(scale_width, scale_height, 1) )
start_capture(self)
end
function final(self) function final(self)
if self.cameraframe ~= nil then if self.cameraframe ~= nil then
camera.stop_capture() camera.stop_capture()
@ -44,10 +69,20 @@ end
function update(self, dt) function update(self, dt)
if self.cameraframe then if self.cameraframe ~= nil then
local pathmodelcamera = go.get("#sprite", "texture0") local pathmodelcamera = go.get("#sprite", "texture0")
resource.set_texture(pathmodelcamera, self.cameratextureheader, self.cameraframe) resource.set_texture(pathmodelcamera, self.cameratextureheader, self.cameraframe)
end end
end
function on_input(self, action_id, action)
if (action_id == hash("space") or action_id == hash("touch")) and action.pressed then
if self.cameraframe == nil then
start_capture(self)
else
stop_capture(self)
end
end
end end