[Vm-dev] VM Maker: VMMaker.oscog-eem.2835.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Oct 7 22:30:45 UTC 2020
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2835.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2835
Author: eem
Time: 7 October 2020, 3:30:37.335531 pm
UUID: 026231bb-5f37-4ea7-8aa1-88114061ee43
Ancestors: VMMaker.oscog-eem.2834
CameraPlugin: extend the interface to allow interrupt-driven frame receipt.
=============== Diff against VMMaker.oscog-eem.2834 ===============
Item was changed:
----- Method: CameraPlugin>>primCameraName (in category 'primitives') -----
primCameraName
+ "Answer the name for the camera with the given number.
+ Fail if the camera number is less than one or greater than the number of available cameras."
- "Get the name for the camera with the given number. Fail if the camera number is greater than the number of available cameras."
- | cameraNum nameStr count resultOop dst |
<export: true>
+ | cameraNum |
- <var: 'nameStr' declareC: 'char* nameStr'>
- <var: 'dst' declareC: 'char* dst'>
-
cameraNum := interpreterProxy stackIntegerValue: 0.
+ interpreterProxy failed ifFalse:
+ [interpreterProxy methodReturnString: (self CameraName: cameraNum)]!
- interpreterProxy failed ifTrue: [^ 0].
-
- nameStr := self cCode: 'CameraName(cameraNum)'.
- nameStr = nil ifTrue: [
- interpreterProxy success: false.
- ^ 0].
-
- count := self cCode: '(int) strlen(nameStr)'.
- resultOop := interpreterProxy instantiateClass: interpreterProxy classString indexableSize: count.
- dst := self cCoerce: (interpreterProxy firstIndexableField: resultOop) to: 'char *'.
- 0 to: count - 1 do: [:i | dst at: i put: (nameStr at: i)].
-
- interpreterProxy pop: 2 thenPush: resultOop. "pop arg and rcvr, push result"
- ^ 0
- !
Item was changed:
----- Method: CameraPlugin>>primCloseCamera (in category 'primitives') -----
primCloseCamera
"Close the camera. Do nothing if it was not open."
- | cameraNum |
<export: true>
+ | cameraNum |
cameraNum := interpreterProxy stackIntegerValue: 0.
interpreterProxy failed ifTrue: [^ 0].
+ self CameraClose: cameraNum.
- self cCode: 'CameraClose(cameraNum)'.
+ interpreterProxy methodReturnReceiver!
- interpreterProxy pop: 1. "pop arg, leave rcvr on stack"
- ^ 0
- !
Item was changed:
----- Method: CameraPlugin>>primOpenCamera (in category 'primitives') -----
primOpenCamera
"Open a camera. Takes one argument, the index of the device to open."
- | cameraNum desiredFrameWidth desiredFrameHeight ok |
<export: true>
+ | cameraNum desiredFrameWidth desiredFrameHeight ok |
cameraNum := interpreterProxy stackIntegerValue: 2.
desiredFrameWidth := interpreterProxy stackIntegerValue: 1.
desiredFrameHeight := interpreterProxy stackIntegerValue: 0.
+ interpreterProxy failed ifTrue: [^0].
- interpreterProxy failed ifTrue: [^ 0].
+ ok := self CameraOpen: cameraNum _: desiredFrameWidth _: desiredFrameHeight.
+ ok <= 0 ifTrue:
+ [interpreterProxy success: false.
+ ^0].
- ok := self cCode: 'CameraOpen(cameraNum, desiredFrameWidth, desiredFrameHeight)'.
- ok = 0 ifTrue: [
- interpreterProxy success: false.
- ^ 0].
+ interpreterProxy methodReturnReceiver!
- interpreterProxy pop: 3. "pop args, leave rcvr on stack"
- ^ 0
- !
Item was added:
+ ----- Method: CameraPlugin>>primSetCameraSemaphore (in category 'primitives') -----
+ primSetCameraSemaphore
+ "Supplies a semaphoreIndex through which to signal a semaphore when a frame is available from a camera.
+ Fails if the platform does not provide an interrupt-driven camera interface."
+
+ <export: true>
+ | cameraNum failCode semaphoreIndex |
+
+ cameraNum := interpreterProxy stackIntegerValue: 1.
+ semaphoreIndex := interpreterProxy stackIntegerValue: 0.
+ interpreterProxy failed ifTrue: [^0].
+
+ failCode := self Camera: cameraNum SetSemaphore: semaphoreIndex.
+ failCode ~= 0 ifTrue: [^interpreterProxy primitiveFailFor: failCode].
+
+ interpreterProxy methodReturnReceiver!
Item was changed:
----- Method: HostWindowPluginSimulator>>ioSizeOfWindowSet:x:y: (in category 'primitive simulation') -----
ioSizeOfWindowSet: windowIndex x: x y: y
<primitive: 'primitiveHostWindowSizeSet' module: 'HostWindowPlugin' error: ec>
^-1
+ "self basicNew ioSizeOfWindowSet: 1 x: Display width - 32 y: Display height - 32"
+ "self basicNew ioSizeOfWindowSet: 1 x: Display width + 32 y: Display height + 32"!
- "self basicNew ioSizeOfWindowSet: 1 x: 500 y: 500"
- "self basicNew ioSizeOfWindowSet: 1 x: 64 y: 64"!
More information about the Vm-dev
mailing list