Add Martin M2, M3, and M4
This commit is contained in:
parent
a2901aec3a
commit
864fe39adb
9 changed files with 158 additions and 2 deletions
|
@ -1,5 +1,5 @@
|
||||||
extends SSTVEncoder
|
extends SSTVEncoder
|
||||||
class_name Martin1
|
class_name MartinM1
|
||||||
|
|
||||||
const COLOR_FREQ_MULT = 3.1372549
|
const COLOR_FREQ_MULT = 3.1372549
|
||||||
|
|
50
addons/godot-sstv/src/MartinM2.gd
Normal file
50
addons/godot-sstv/src/MartinM2.gd
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
extends SSTVEncoder
|
||||||
|
class_name MartinM2
|
||||||
|
|
||||||
|
const COLOR_FREQ_MULT = 3.1372549
|
||||||
|
|
||||||
|
func PixelRGBAsFrequencies(image: Image, scanLine: int, scanLinePos: int) -> Array:
|
||||||
|
var color = image.get_pixel(scanLinePos, scanLine)
|
||||||
|
var redFreq = float(color.r8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
var greenFreq = float(color.g8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
var blueFreq = float(color.b8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
return [redFreq, greenFreq, blueFreq]
|
||||||
|
|
||||||
|
const IMAGE_WIDTH = 160.0
|
||||||
|
const IMAGE_HEIGHT = 256.0
|
||||||
|
const BLANKING_INTERVAL = 0.000572
|
||||||
|
const SCAN_LINE_LENGTH = 0.073216
|
||||||
|
const SYNC_PULSE_LENGTH = 0.004862
|
||||||
|
|
||||||
|
var preparedImage = []
|
||||||
|
|
||||||
|
func PrepareImage(image: Image):
|
||||||
|
image.resize(IMAGE_WIDTH, IMAGE_HEIGHT)
|
||||||
|
image.convert(Image.FORMAT_RGB8)
|
||||||
|
|
||||||
|
for scanLine in range(0, IMAGE_HEIGHT):
|
||||||
|
var red = []
|
||||||
|
var green = []
|
||||||
|
var blue = []
|
||||||
|
for vertPos in range(0, IMAGE_WIDTH):
|
||||||
|
var freqs = PixelRGBAsFrequencies(image, scanLine, vertPos)
|
||||||
|
red.push_back(freqs[0])
|
||||||
|
green.push_back(freqs[1])
|
||||||
|
blue.push_back(freqs[2])
|
||||||
|
preparedImage.push_back([green, blue, red])
|
||||||
|
|
||||||
|
func EncodeSSTV(image: Image, skipHeader: bool = false):
|
||||||
|
PrepareImage(image)
|
||||||
|
|
||||||
|
if not skipHeader:
|
||||||
|
EncodePrefix()
|
||||||
|
EncodeHeader([false, true, false, true, false, false, false])
|
||||||
|
|
||||||
|
for scanLine in range(0, IMAGE_HEIGHT):
|
||||||
|
outputFloats.append_array(GenerateTone(SYNC_PULSE_FREQ, SYNC_PULSE_LENGTH))
|
||||||
|
outputFloats.append_array(GenerateTone(BLANKING_PULSE_FREQ, BLANKING_INTERVAL))
|
||||||
|
for dataLine in range(0, 3):
|
||||||
|
outputFloats.append_array(GenerateToneFromCurve(preparedImage[scanLine][dataLine], SCAN_LINE_LENGTH))
|
||||||
|
outputFloats.append_array(GenerateTone(BLANKING_PULSE_FREQ, BLANKING_INTERVAL))
|
||||||
|
|
||||||
|
return outputFloats
|
1
addons/godot-sstv/src/MartinM2.gd.uid
Normal file
1
addons/godot-sstv/src/MartinM2.gd.uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uid://70y3sjnd0v3r
|
50
addons/godot-sstv/src/MartinM3.gd
Normal file
50
addons/godot-sstv/src/MartinM3.gd
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
extends SSTVEncoder
|
||||||
|
class_name MartinM3
|
||||||
|
|
||||||
|
const COLOR_FREQ_MULT = 3.1372549
|
||||||
|
|
||||||
|
func PixelRGBAsFrequencies(image: Image, scanLine: int, scanLinePos: int) -> Array:
|
||||||
|
var color = image.get_pixel(scanLinePos, scanLine)
|
||||||
|
var redFreq = float(color.r8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
var greenFreq = float(color.g8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
var blueFreq = float(color.b8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
return [redFreq, greenFreq, blueFreq]
|
||||||
|
|
||||||
|
const IMAGE_WIDTH = 320.0
|
||||||
|
const IMAGE_HEIGHT = 128.0
|
||||||
|
const BLANKING_INTERVAL = 0.000572
|
||||||
|
const SCAN_LINE_LENGTH = 0.146432
|
||||||
|
const SYNC_PULSE_LENGTH = 0.004862
|
||||||
|
|
||||||
|
var preparedImage = []
|
||||||
|
|
||||||
|
func PrepareImage(image: Image):
|
||||||
|
image.resize(IMAGE_WIDTH, IMAGE_HEIGHT)
|
||||||
|
image.convert(Image.FORMAT_RGB8)
|
||||||
|
|
||||||
|
for scanLine in range(0, IMAGE_HEIGHT):
|
||||||
|
var red = []
|
||||||
|
var green = []
|
||||||
|
var blue = []
|
||||||
|
for vertPos in range(0, IMAGE_WIDTH):
|
||||||
|
var freqs = PixelRGBAsFrequencies(image, scanLine, vertPos)
|
||||||
|
red.push_back(freqs[0])
|
||||||
|
green.push_back(freqs[1])
|
||||||
|
blue.push_back(freqs[2])
|
||||||
|
preparedImage.push_back([green, blue, red])
|
||||||
|
|
||||||
|
func EncodeSSTV(image: Image, skipHeader: bool = false):
|
||||||
|
PrepareImage(image)
|
||||||
|
|
||||||
|
if not skipHeader:
|
||||||
|
EncodePrefix()
|
||||||
|
EncodeHeader([false, true, false, false, true, false, false])
|
||||||
|
|
||||||
|
for scanLine in range(0, IMAGE_HEIGHT):
|
||||||
|
outputFloats.append_array(GenerateTone(SYNC_PULSE_FREQ, SYNC_PULSE_LENGTH))
|
||||||
|
outputFloats.append_array(GenerateTone(BLANKING_PULSE_FREQ, BLANKING_INTERVAL))
|
||||||
|
for dataLine in range(0, 3):
|
||||||
|
outputFloats.append_array(GenerateToneFromCurve(preparedImage[scanLine][dataLine], SCAN_LINE_LENGTH))
|
||||||
|
outputFloats.append_array(GenerateTone(BLANKING_PULSE_FREQ, BLANKING_INTERVAL))
|
||||||
|
|
||||||
|
return outputFloats
|
1
addons/godot-sstv/src/MartinM3.gd.uid
Normal file
1
addons/godot-sstv/src/MartinM3.gd.uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uid://ccf7kch1577re
|
50
addons/godot-sstv/src/MartinM4.gd
Normal file
50
addons/godot-sstv/src/MartinM4.gd
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
extends SSTVEncoder
|
||||||
|
class_name MartinM4
|
||||||
|
|
||||||
|
const COLOR_FREQ_MULT = 3.1372549
|
||||||
|
|
||||||
|
func PixelRGBAsFrequencies(image: Image, scanLine: int, scanLinePos: int) -> Array:
|
||||||
|
var color = image.get_pixel(scanLinePos, scanLine)
|
||||||
|
var redFreq = float(color.r8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
var greenFreq = float(color.g8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
var blueFreq = float(color.b8) * COLOR_FREQ_MULT + 1500.0
|
||||||
|
return [redFreq, greenFreq, blueFreq]
|
||||||
|
|
||||||
|
const IMAGE_WIDTH = 160.0
|
||||||
|
const IMAGE_HEIGHT = 128.0
|
||||||
|
const BLANKING_INTERVAL = 0.000572
|
||||||
|
const SCAN_LINE_LENGTH = 0.073216
|
||||||
|
const SYNC_PULSE_LENGTH = 0.004862
|
||||||
|
|
||||||
|
var preparedImage = []
|
||||||
|
|
||||||
|
func PrepareImage(image: Image):
|
||||||
|
image.resize(IMAGE_WIDTH, IMAGE_HEIGHT)
|
||||||
|
image.convert(Image.FORMAT_RGB8)
|
||||||
|
|
||||||
|
for scanLine in range(0, IMAGE_HEIGHT):
|
||||||
|
var red = []
|
||||||
|
var green = []
|
||||||
|
var blue = []
|
||||||
|
for vertPos in range(0, IMAGE_WIDTH):
|
||||||
|
var freqs = PixelRGBAsFrequencies(image, scanLine, vertPos)
|
||||||
|
red.push_back(freqs[0])
|
||||||
|
green.push_back(freqs[1])
|
||||||
|
blue.push_back(freqs[2])
|
||||||
|
preparedImage.push_back([green, blue, red])
|
||||||
|
|
||||||
|
func EncodeSSTV(image: Image, skipHeader: bool = false):
|
||||||
|
PrepareImage(image)
|
||||||
|
|
||||||
|
if not skipHeader:
|
||||||
|
EncodePrefix()
|
||||||
|
EncodeHeader([false, true, false, false, false, false, false])
|
||||||
|
|
||||||
|
for scanLine in range(0, IMAGE_HEIGHT):
|
||||||
|
outputFloats.append_array(GenerateTone(SYNC_PULSE_FREQ, SYNC_PULSE_LENGTH))
|
||||||
|
outputFloats.append_array(GenerateTone(BLANKING_PULSE_FREQ, BLANKING_INTERVAL))
|
||||||
|
for dataLine in range(0, 3):
|
||||||
|
outputFloats.append_array(GenerateToneFromCurve(preparedImage[scanLine][dataLine], SCAN_LINE_LENGTH))
|
||||||
|
outputFloats.append_array(GenerateTone(BLANKING_PULSE_FREQ, BLANKING_INTERVAL))
|
||||||
|
|
||||||
|
return outputFloats
|
1
addons/godot-sstv/src/MartinM4.gd.uid
Normal file
1
addons/godot-sstv/src/MartinM4.gd.uid
Normal file
|
@ -0,0 +1 @@
|
||||||
|
uid://cj7mcnr5e463v
|
|
@ -1,7 +1,10 @@
|
||||||
extends Node3D
|
extends Node3D
|
||||||
|
|
||||||
func encode_sstv():
|
func encode_sstv():
|
||||||
var encoder = Martin1.new()
|
#var encoder = MartinM4.new()
|
||||||
|
#var encoder = MartinM3.new()
|
||||||
|
#var encoder = MartinM1.new()
|
||||||
|
var encoder = Scottie1.new()
|
||||||
#var encoder = RobotBW8.new()
|
#var encoder = RobotBW8.new()
|
||||||
var cameraImage = get_viewport().get_texture().get_image()
|
var cameraImage = get_viewport().get_texture().get_image()
|
||||||
#var cameraImage = load("res://tests/checker.png").get_image()
|
#var cameraImage = load("res://tests/checker.png").get_image()
|
||||||
|
|
Loading…
Add table
Reference in a new issue