python-codecs: support vaapi color conversion

This commit is contained in:
Koushik Dutta
2023-05-15 14:37:22 -07:00
parent 59db3b622c
commit 866706505a
5 changed files with 21 additions and 8 deletions

View File

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

View File

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

View File

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

View File

@@ -46,6 +46,7 @@ class GstreamerGenerator(scrypted_sdk.ScryptedDeviceBase, scrypted_sdk.VideoFram
'vtdec_hw',
'nvh264dec',
'vaapih264dec',
'vaapih264dec ! vaapipostproc ! {videocaps}',
],
'combobox': True,
}

View File

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