diff --git a/plugins/python-codecs/package-lock.json b/plugins/python-codecs/package-lock.json index 11464ac4e..04f293890 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.51", + "version": "0.1.56", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@scrypted/python-codecs", - "version": "0.1.51", + "version": "0.1.56", "devDependencies": { "@scrypted/sdk": "file:../../sdk" } diff --git a/plugins/python-codecs/package.json b/plugins/python-codecs/package.json index 06f3a9187..150c7c007 100644 --- a/plugins/python-codecs/package.json +++ b/plugins/python-codecs/package.json @@ -1,6 +1,6 @@ { "name": "@scrypted/python-codecs", - "version": "0.1.51", + "version": "0.1.56", "description": "Python Codecs for Scrypted", "keywords": [ "scrypted", diff --git a/plugins/python-codecs/src/gstreamer.py b/plugins/python-codecs/src/gstreamer.py index acb3d1a82..7009898d4 100644 --- a/plugins/python-codecs/src/gstreamer.py +++ b/plugins/python-codecs/src/gstreamer.py @@ -82,10 +82,18 @@ async def generateVideoFramesGstreamer(mediaObject: scrypted_sdk.MediaObject, op fps = options and options.get('fps', None) videorate = '' if fps: - videorate = 'videorate !' + videorate = 'videorate ! ' videocaps += ',framerate={fps}/1'.format(fps=fps) - videosrc += ' ! {decoder} ! queue leaky=downstream max-size-buffers=0 ! videoconvert ! {videorate} {videocaps}'.format(decoder=decoder, videocaps=videocaps, videorate=videorate) + if decoder.find("{videocaps}") == -1: + videosrc += ' ! {decoder} ! queue leaky=downstream max-size-buffers=0 ! videoconvert ! {videorate} {videocaps}'.format(decoder=decoder, videocaps=videocaps, videorate=videorate) + else: + if format == 'RGB': + format = 'RGBA' + bands = 4 + videocaps += 'A' + d = decoder.replace('{videocaps}', '{videorate}{videocaps}'.format(videocaps=videocaps, videorate=videorate)) + videosrc += ' ! {decoder}'.format(decoder=d) gst, gen = await createPipelineIterator(videosrc) diff --git a/plugins/python-codecs/src/main.py b/plugins/python-codecs/src/main.py index 42a470764..3c05d7774 100644 --- a/plugins/python-codecs/src/main.py +++ b/plugins/python-codecs/src/main.py @@ -46,6 +46,7 @@ class GstreamerGenerator(scrypted_sdk.ScryptedDeviceBase, scrypted_sdk.VideoFram 'vtdec_hw', 'nvh264dec', 'vaapih264dec', + 'vaapih264dec ! vaapipostproc ! {videocaps}', ], 'combobox': True, } diff --git a/plugins/python-codecs/src/vipsimage.py b/plugins/python-codecs/src/vipsimage.py index 300fa907f..c744c8932 100644 --- a/plugins/python-codecs/src/vipsimage.py +++ b/plugins/python-codecs/src/vipsimage.py @@ -25,7 +25,7 @@ class VipsImage(scrypted_sdk.Image): return await to_thread(format) elif options['format'] == 'rgba': def format(): - if not vipsImage.vipsImage.hasalpha(): + if not vipsImage.vipsImage.bands == 3: rgba = vipsImage.vipsImage.addalpha() else: rgba = vipsImage.vipsImage @@ -33,7 +33,7 @@ class VipsImage(scrypted_sdk.Image): return await to_thread(format) elif options['format'] == 'rgb': def format(): - if vipsImage.vipsImage.hasalpha(): + if vipsImage.vipsImage.bands == 4: rgb = vipsImage.vipsImage.extract_band(0, n=vipsImage.vipsImage.bands - 1) else: rgb = vipsImage.vipsImage @@ -45,7 +45,11 @@ class VipsImage(scrypted_sdk.Image): return memoryview(vipsImage.vipsImage.write_to_memory()) else: def format(): - gray = vipsImage.vipsImage.colourspace("b-w") + if vipsImage.vipsImage.bands == 4: + gray = vipsImage.vipsImage.extract_band(0, n=vipsImage.vipsImage.bands - 1) + else: + gray = vipsImage.vipsImage + gray = gray.colourspace("b-w") return memoryview(gray.write_to_memory()) return await to_thread(format)