mirror of
https://github.com/koush/scrypted.git
synced 2026-09-16 16:50:40 +01:00
python-codecs: support vaapi color conversion
This commit is contained in:
@@ -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)
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ class GstreamerGenerator(scrypted_sdk.ScryptedDeviceBase, scrypted_sdk.VideoFram
|
||||
'vtdec_hw',
|
||||
'nvh264dec',
|
||||
'vaapih264dec',
|
||||
'vaapih264dec ! vaapipostproc ! {videocaps}',
|
||||
],
|
||||
'combobox': True,
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user