python-codecs: fix pil rgba to jpg. fix image close race condition.

This commit is contained in:
Koushik Dutta
2023-05-27 22:46:55 -07:00
parent 2063e3822a
commit dd98f12f2a
5 changed files with 18 additions and 10 deletions

View File

@@ -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": [

View File

@@ -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"
}

View File

@@ -1,6 +1,6 @@
{
"name": "@scrypted/python-codecs",
"version": "0.1.68",
"version": "0.1.69",
"description": "Python Codecs for Scrypted",
"keywords": [
"scrypted",

View File

@@ -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)

View File

@@ -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()