From dd98f12f2af6286dda5cc99f2712ccf4c0c2cfdc Mon Sep 17 00:00:00 2001 From: Koushik Dutta Date: Sat, 27 May 2023 22:46:55 -0700 Subject: [PATCH] python-codecs: fix pil rgba to jpg. fix image close race condition. --- plugins/python-codecs/.vscode/settings.json | 8 ++++---- plugins/python-codecs/package-lock.json | 4 ++-- plugins/python-codecs/package.json | 2 +- plugins/python-codecs/src/gstreamer.py | 5 +++-- plugins/python-codecs/src/pilimage.py | 9 ++++++++- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/plugins/python-codecs/.vscode/settings.json b/plugins/python-codecs/.vscode/settings.json index 0b1007d62..1f0ae224f 100644 --- a/plugins/python-codecs/.vscode/settings.json +++ b/plugins/python-codecs/.vscode/settings.json @@ -1,8 +1,8 @@ { // docker installation - // "scrypted.debugHost": "koushik-thin", - // "scrypted.serverRoot": "/server", + "scrypted.debugHost": "koushik-windows", + "scrypted.serverRoot": "/server", // windows installation // "scrypted.debugHost": "koushik-windows", @@ -13,8 +13,8 @@ // "scrypted.serverRoot": "/home/pi/.scrypted", // local checkout - "scrypted.debugHost": "127.0.0.1", - "scrypted.serverRoot": "/Users/koush/.scrypted", + // "scrypted.debugHost": "127.0.0.1", + // "scrypted.serverRoot": "/Users/koush/.scrypted", "scrypted.pythonRemoteRoot": "${config:scrypted.serverRoot}/volume/plugin.zip", "python.analysis.extraPaths": [ diff --git a/plugins/python-codecs/package-lock.json b/plugins/python-codecs/package-lock.json index dc5b3ea8f..213939b12 100644 --- a/plugins/python-codecs/package-lock.json +++ b/plugins/python-codecs/package-lock.json @@ -1,12 +1,12 @@ { "name": "@scrypted/python-codecs", - "version": "0.1.68", + "version": "0.1.69", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@scrypted/python-codecs", - "version": "0.1.68", + "version": "0.1.69", "devDependencies": { "@scrypted/sdk": "file:../../sdk" } diff --git a/plugins/python-codecs/package.json b/plugins/python-codecs/package.json index 7123ce3ed..c099594ae 100644 --- a/plugins/python-codecs/package.json +++ b/plugins/python-codecs/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/python-codecs", - "version": "0.1.68", + "version": "0.1.69", "description": "Python Codecs for Scrypted", "keywords": [ "scrypted", diff --git a/plugins/python-codecs/src/gstreamer.py b/plugins/python-codecs/src/gstreamer.py index 56b9db8d5..56bed615a 100644 --- a/plugins/python-codecs/src/gstreamer.py +++ b/plugins/python-codecs/src/gstreamer.py @@ -144,6 +144,7 @@ class GstImage(scrypted_sdk.Image): if bands and bands != capsBands: reformat = format + colored = None if reformat or crop: colored = image image = await image.toImageInternal( @@ -152,8 +153,6 @@ class GstImage(scrypted_sdk.Image): "format": reformat, } ) - asyncio.ensure_future(colored.close(), loop = asyncio.get_event_loop()) - try: return await image.toBuffer( { @@ -162,6 +161,8 @@ class GstImage(scrypted_sdk.Image): ) finally: await image.close() + if colored: + await colored.close() finally: gst_buffer.unmap(info) diff --git a/plugins/python-codecs/src/pilimage.py b/plugins/python-codecs/src/pilimage.py index bdfe92c21..8e5f85b24 100644 --- a/plugins/python-codecs/src/pilimage.py +++ b/plugins/python-codecs/src/pilimage.py @@ -54,7 +54,14 @@ class PILImage(scrypted_sdk.Image): def save(): bytesArray = io.BytesIO() - pilImage.pilImage.save(bytesArray, format='JPEG') + if pilImage.pilImage.mode == 'RGBA': + rgb = pilImage.pilImage.convert('RGB') + try: + rgb.save(bytesArray, format='JPEG') + finally: + rgb.close() + else: + pilImage.pilImage.save(bytesArray, format='JPEG') # pilImage.pilImage.save(bytesArray, format=options['format']) return bytesArray.getvalue()