Branch: refs/heads/Cog
Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
Commit: db6bf0a073da280322088d6ad7defdee60a95c89
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/db6bf0a073da280322…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2021-04-13 (Tue, 13 Apr 2021)
Changed paths:
M build.win64x64/common/Makefile.msvc.flags
M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp
Log Message:
-----------
Implement the frame buffer interface for the win32 CameraPlugin.
Filter out some warnings from the win32 MSVC compile (CRT_SECURE). [ci ckip]
Branch: refs/heads/Cog
Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
Commit: 56635fc325bfb9bc9188b11a450723992ae35f8c
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/56635fc325bfb9bc91…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2021-04-12 (Mon, 12 Apr 2021)
Changed paths:
M src/plugins/ADPCMCodecPlugin/ADPCMCodecPlugin.c
M src/plugins/AioPlugin/AioPlugin.c
M src/plugins/AsynchFilePlugin/AsynchFilePlugin.c
M src/plugins/B2DPlugin/B2DPlugin.c
M src/plugins/B3DAcceleratorPlugin/B3DAcceleratorPlugin.c
M src/plugins/BMPReadWriterPlugin/BMPReadWriterPlugin.c
M src/plugins/BitBltPlugin/BitBltPlugin.c
M src/plugins/BochsIA32Plugin/BochsIA32Plugin.c
M src/plugins/BochsX64Plugin/BochsX64Plugin.c
M src/plugins/CameraPlugin/CameraPlugin.c
M src/plugins/ClipboardExtendedPlugin/ClipboardExtendedPlugin.c
M src/plugins/CroquetPlugin/CroquetPlugin.c
M src/plugins/DESPlugin/DESPlugin.c
M src/plugins/DSAPrims/DSAPrims.c
M src/plugins/DropPlugin/DropPlugin.c
M src/plugins/FFTPlugin/FFTPlugin.c
M src/plugins/FileAttributesPlugin/FileAttributesPlugin.c
M src/plugins/FilePlugin/FilePlugin.c
M src/plugins/Float64ArrayPlugin/Float64ArrayPlugin.c
M src/plugins/FloatArrayPlugin/FloatArrayPlugin.c
M src/plugins/FloatMathPlugin/FloatMathPlugin.c
M src/plugins/GdbARMPlugin/GdbARMPlugin.c
M src/plugins/GdbARMv8Plugin/GdbARMv8Plugin.c
M src/plugins/GeniePlugin/GeniePlugin.c
M src/plugins/HostWindowPlugin/HostWindowPlugin.c
M src/plugins/IA32ABI/IA32ABI.c
M src/plugins/ImmX11Plugin/ImmX11Plugin.c
M src/plugins/JPEGReadWriter2Plugin/JPEGReadWriter2Plugin.c
M src/plugins/JPEGReaderPlugin/JPEGReaderPlugin.c
M src/plugins/JoystickTabletPlugin/JoystickTabletPlugin.c
M src/plugins/Klatt/Klatt.c
M src/plugins/LargeIntegers/LargeIntegers.c
M src/plugins/MD5Plugin/MD5Plugin.c
M src/plugins/MIDIPlugin/MIDIPlugin.c
M src/plugins/MacMenubarPlugin/MacMenubarPlugin.c
M src/plugins/Matrix2x3Plugin/Matrix2x3Plugin.c
M src/plugins/MiscPrimitivePlugin/MiscPrimitivePlugin.c
M src/plugins/Mpeg3Plugin/Mpeg3Plugin.c
M src/plugins/QuicktimePlugin/QuicktimePlugin.c
M src/plugins/RePlugin/RePlugin.c
M src/plugins/SHA2Plugin/SHA2Plugin.c
M src/plugins/ScratchPlugin/ScratchPlugin.c
M src/plugins/SerialPlugin/SerialPlugin.c
M src/plugins/SocketPlugin/SocketPlugin.c
M src/plugins/SoundCodecPrims/SoundCodecPrims.c
M src/plugins/SoundGenerationPlugin/SoundGenerationPlugin.c
M src/plugins/SoundPlugin/SoundPlugin.c
M src/plugins/Squeak3D/Squeak3D.c
M src/plugins/SqueakFFIPrims/ARM32FFIPlugin.c
M src/plugins/SqueakFFIPrims/ARM64FFIPlugin.c
M src/plugins/SqueakFFIPrims/IA32FFIPlugin.c
M src/plugins/SqueakFFIPrims/X64SysVFFIPlugin.c
M src/plugins/SqueakFFIPrims/X64Win64FFIPlugin.c
M src/plugins/SqueakSSL/SqueakSSL.c
M src/plugins/StarSqueakPlugin/StarSqueakPlugin.c
M src/plugins/UUIDPlugin/UUIDPlugin.c
M src/plugins/UnicodePlugin/UnicodePlugin.c
M src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c
M src/plugins/VMProfileLinuxSupportPlugin/VMProfileLinuxSupportPlugin.c
M src/plugins/VMProfileMacSupportPlugin/VMProfileMacSupportPlugin.c
M src/plugins/WeDoPlugin/WeDoPlugin.c
M src/plugins/Win32OSProcessPlugin/Win32OSProcessPlugin.c
M src/plugins/XDisplayControlPlugin/XDisplayControlPlugin.c
M src/plugins/ZipPlugin/ZipPlugin.c
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.2950
Fix huge horrible win32 Spur VM bug. Plugins must export accessor depths (via
the EXPORT macro) otherwise the external primitive loading machinery will
silently compute their accessor depths as -1 (no accessor depth), and so no
primitives will be scanned for forwarders, and hence none will retry when given
forwarders, breaking the while Spur transparent forwarding mechanism for
primitives on win32. The bug showed up with the new CameraPlugin
primSetCameraBuffers primitive which is given a newly becomed forwarder to a
pinned bitmap. The primitive doesn't retry and hence always fails.
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2950.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2950
Author: eem
Time: 12 April 2021, 10:38:04.402462 pm
UUID: dbcba85e-dc26-495f-9ce8-aa01633f6aa5
Ancestors: VMMaker.oscog-eem.2949
Fix huge horrible win32 Spur VM bug. Plugins must export accessor depths (via the EXPORT macro) otherwise the external primitive loading machinery will silently compute their accessor depths as -1 (no accessor depth), and so no primitives will be scanned for forwarders, and hence none will retry when given forwarders, breaking the while Spur transparent forwarding mechanism for primitives on win32. The bug showed up with the new CameraPlugin primSetCameraBuffers primitive which is given a newly becomed forwarder to a pinned bitmap. The primitive doesn't retry and hence always fails.
=============== Diff against VMMaker.oscog-eem.2949 ===============
Item was changed:
----- Method: VMPluginCodeGenerator>>emitAccessorDepthsOn: (in category 'C code generator') -----
emitAccessorDepthsOn: aStream
"Output accessor depth bytes for all primitives in the plugin.
This is for external primitives in Spur."
self sortedExportMethods do:
[:method| | primName |
primName := self cFunctionNameFor: method selector.
(self accessorDepthForSelector: primName asSymbol) ifNotNil:
[:depth|
"store the accessor depth in a byte variable; save a little space
by omitting depths < 0; support code supplies the default."
self assert: depth < 128.
depth >= 0 ifTrue:
[self withOptionalConditionalDefineFor: method
on: aStream
do: [aStream
+ nextPutAll: 'EXPORT(signed char) ';
- nextPutAll: 'signed char ';
nextPutAll: primName;
nextPutAll: 'AccessorDepth = ';
nextPutAll: (self cLiteralFor: depth);
nextPut: $;;
cr]]]]!
Branch: refs/heads/Cog
Home: https://github.com/OpenSmalltalk/opensmalltalk-vm
Commit: effa97f75ee6bd216a482c3983b401feba1de05c
https://github.com/OpenSmalltalk/opensmalltalk-vm/commit/effa97f75ee6bd216a…
Author: Eliot Miranda <eliot.miranda(a)gmail.com>
Date: 2021-04-12 (Mon, 12 Apr 2021)
Changed paths:
M platforms/Cross/plugins/CameraPlugin/CameraPlugin.h
M platforms/iOS/plugins/CameraPlugin/AVFoundationVideoGrabber.m
M platforms/unix/plugins/CameraPlugin/sqCamera-linux.c
M platforms/win32/plugins/CameraPlugin/winCameraOps.cpp
M src/plugins/CameraPlugin/CameraPlugin.c
Log Message:
-----------
CogVM source as per VMMaker.oscog-eem.2949
Add CameraPlugin primSetCameraBuffers to avoid a copy when reading a frame.
Provide an implementation for macOS.
Eliot Miranda uploaded a new version of VMMaker to project VM Maker:
http://source.squeak.org/VMMaker/VMMaker.oscog-eem.2949.mcz
==================== Summary ====================
Name: VMMaker.oscog-eem.2949
Author: eem
Time: 12 April 2021, 2:46:31.537712 pm
UUID: 2fd2c871-435a-4312-ac4c-79c95820c5a4
Ancestors: VMMaker.oscog-eem.2948
Add CameraPlugin primSetCameraBuffers to avoid a copy when reading a frame.
=============== Diff against VMMaker.oscog-eem.2948 ===============
Item was changed:
----- Method: CameraPlugin>>primGetFrame (in category 'primitives') -----
primGetFrame
"Copy a camera frame into the given Bitmap. The Bitmap should be for a Form of depth 32 that is the same width and height as the current camera frame. Fail if the camera is not open or if the bitmap is not the right size. If successful, answer the number of frames received from the camera since the last call. If this is zero, then there has been no change."
| cameraNum bitmapOop bitmap pixCount result |
<export: true>
<var: 'bitmap' type: #'unsigned char *'>
cameraNum := interpreterProxy stackIntegerValue: 1.
bitmapOop := interpreterProxy stackValue: 0.
interpreterProxy success: (interpreterProxy isWords: bitmapOop).
interpreterProxy failed ifTrue:
[^ 0].
bitmap := self cCoerce: (interpreterProxy firstIndexableField: bitmapOop) to: #'unsigned char *'.
pixCount := interpreterProxy stSizeOf: bitmapOop.
result := self Camera: cameraNum Get: bitmap Frame: pixCount.
result < 0 ifTrue:
+ [^interpreterProxy primitiveFailFor: result negated].
- [^interpreterProxy primitiveFail].
interpreterProxy methodReturnInteger: result!
Item was added:
+ ----- Method: CameraPlugin>>primSetCameraBuffers (in category 'primitives') -----
+ primSetCameraBuffers
+ "Sets one or two frame buffers to receive camera frames. The buffer(s) must be big enough and pinned.
+ Provides these two interfaces:
+ camera: cameraNum setFrameBuffer: pinnedNonPointers
+ camera: cameraNum setFrameBufferA: pinnedNonPointers B: pinnedNonPointersOrNil"
+
+ <export: true>
+ | cameraNum failCode bufferOne bufferTwo |
+ interpreterProxy methodArgumentCount
+ caseOf: {
+ [3] -> [cameraNum := interpreterProxy stackValue: 2.
+ bufferOne := interpreterProxy stackValue: 1.
+ bufferTwo := interpreterProxy stackValue: 0].
+ [2] -> [cameraNum := interpreterProxy stackValue: 1.
+ bufferOne := interpreterProxy stackValue: 0.
+ bufferTwo := nil] }
+ otherwise:
+ [^interpreterProxy primitiveFailFor: PrimErrBadNumArgs].
+
+ ((interpreterProxy isIntegerObject: cameraNum)
+ and: [(interpreterProxy isWordsOrBytes: bufferOne)
+ and: [(interpreterProxy isPinned: bufferOne)
+ and: [bufferTwo isNil
+ or: [bufferTwo = interpreterProxy nilObject
+ or: [(interpreterProxy isWordsOrBytes: bufferTwo)
+ and: [interpreterProxy isPinned: bufferTwo]]]]]]) ifFalse:
+ [^interpreterProxy primitiveFailFor: PrimErrBadArgument].
+
+ failCode := self Camera: (interpreterProxy integerValueOf: cameraNum)
+ SetFrame: bufferOne
+ Buffers: (bufferTwo = interpreterProxy nilObject ifFalse: [bufferTwo]). "coerce nilObject to nil"
+ failCode ~= 0 ifTrue: [^interpreterProxy primitiveFailFor: failCode].
+
+ interpreterProxy methodReturnReceiver!