mirror of
https://github.com/koush/scrypted.git
synced 2026-02-13 18:32:56 +00:00
snapshot/python-codecs: move high performance native image library to larger package as optional dependency
This commit is contained in:
@@ -4,6 +4,7 @@ from scrypted_sdk import Setting, SettingValue
|
||||
from typing import Any
|
||||
import gstreamer
|
||||
import libav
|
||||
import vips
|
||||
|
||||
Gst = None
|
||||
try:
|
||||
@@ -84,6 +85,24 @@ class PythonCodecs(scrypted_sdk.ScryptedDeviceBase, scrypted_sdk.DeviceProvider)
|
||||
}
|
||||
manifest['devices'].append(avDevice)
|
||||
|
||||
manifest['devices'].append({
|
||||
'name': 'Image Reader',
|
||||
'type': scrypted_sdk.ScryptedDeviceType.Builtin.value,
|
||||
'nativeId': 'reader',
|
||||
'interfaces': [
|
||||
scrypted_sdk.ScryptedInterface.BufferConverter.value,
|
||||
]
|
||||
})
|
||||
|
||||
manifest['devices'].append({
|
||||
'name': 'Image Writer',
|
||||
'type': scrypted_sdk.ScryptedDeviceType.Builtin.value,
|
||||
'nativeId': 'writer',
|
||||
'interfaces': [
|
||||
scrypted_sdk.ScryptedInterface.BufferConverter.value,
|
||||
]
|
||||
})
|
||||
|
||||
await scrypted_sdk.deviceManager.onDevicesChanged(manifest)
|
||||
|
||||
def getDevice(self, nativeId: str) -> Any:
|
||||
@@ -91,6 +110,10 @@ class PythonCodecs(scrypted_sdk.ScryptedDeviceBase, scrypted_sdk.DeviceProvider)
|
||||
return GstreamerGenerator('gstreamer')
|
||||
if nativeId == 'libav':
|
||||
return LibavGenerator('libav')
|
||||
if nativeId == 'reader':
|
||||
return vips.ImageReader('reader')
|
||||
if nativeId == 'writer':
|
||||
return vips.ImageWriter('writer')
|
||||
|
||||
def create_scrypted_plugin():
|
||||
return PythonCodecs()
|
||||
|
||||
@@ -87,3 +87,26 @@ async def createVipsMediaObject(image: VipsImage):
|
||||
'toImage': lambda options = None: image.toImage(options),
|
||||
})
|
||||
return ret
|
||||
|
||||
class ImageReader(scrypted_sdk.ScryptedDeviceBase, scrypted_sdk.BufferConverter):
|
||||
def __init__(self, nativeId: str | None = None):
|
||||
super().__init__(nativeId)
|
||||
|
||||
self.fromMimeType = 'image/*'
|
||||
self.toMimeType = scrypted_sdk.ScryptedMimeTypes.Image.value
|
||||
|
||||
async def convert(self, data: Any, fromMimeType: str, toMimeType: str, options: scrypted_sdk.MediaObjectOptions = None) -> Any:
|
||||
vips = pyvips.Image.new_from_buffer(data, '')
|
||||
return await createVipsMediaObject(VipsImage(vips))
|
||||
|
||||
class ImageWriter(scrypted_sdk.ScryptedDeviceBase, scrypted_sdk.BufferConverter):
|
||||
def __init__(self, nativeId: str | None = None):
|
||||
super().__init__(nativeId)
|
||||
|
||||
self.fromMimeType = scrypted_sdk.ScryptedMimeTypes.Image.value
|
||||
self.toMimeType = 'image/*'
|
||||
|
||||
async def convert(self, data: scrypted_sdk.VideoFrame, fromMimeType: str, toMimeType: str, options: scrypted_sdk.MediaObjectOptions = None) -> Any:
|
||||
return await data.toBuffer({
|
||||
format: 'jpg',
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user