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
|
||||
class_name Martin1
|
||||
class_name MartinM1
|
||||
|
||||
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
|
||||
|
||||
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 cameraImage = get_viewport().get_texture().get_image()
|
||||
#var cameraImage = load("res://tests/checker.png").get_image()
|
||||
|
|
Loading…
Add table
Reference in a new issue