summaryrefslogtreecommitdiff
path: root/src/tools
diff options
context:
space:
mode:
authorrimio <vasi.vilvoiu@gmail.com>2019-02-10 22:53:04 +0200
committerrimio <vasi.vilvoiu@gmail.com>2019-02-10 22:53:04 +0200
commita76e7ef6b9459d3b0f908eecebb33c4c76e1d36e (patch)
tree8f8d6307dcb19edb98d2e41c027b894672c42fcd /src/tools
parentde931b95f6dc358b20fdfdf493013fcd673ac70a (diff)
Internal colorspace conversion routine
Diffstat (limited to 'src/tools')
-rw-r--r--src/tools/sstv-encode.cpp37
1 files changed, 10 insertions, 27 deletions
diff --git a/src/tools/sstv-encode.cpp b/src/tools/sstv-encode.cpp
index 51b5a33..48c6623 100644
--- a/src/tools/sstv-encode.cpp
+++ b/src/tools/sstv-encode.cpp
@@ -61,7 +61,6 @@ int main(int argc, char **argv)
LOG(INFO) << "Loading image from " << FLAGS_input;
Magick::Image image;
- std::string map = "";
uint8_t *image_buffer = NULL;
try {
@@ -73,42 +72,26 @@ int main(int argc, char **argv)
Magick::Geometry nsize(width, height);
nsize.aspect(true);
image.scale(nsize);
-
- /* format */
- //format = SSTV_FORMAT_Y;
- switch (format) {
- case SSTV_FORMAT_Y:
- map = "R";
- image.magick("Y");
- break;
-
- case SSTV_FORMAT_YCBCR:
- map = "RGB";
- image.colorSpace(Magick::YCbCrColorspace);
- break;
-
- case SSTV_FORMAT_RGB:
- map = "RGB";
- image.colorSpace(Magick::RGBColorspace);
- break;
-
- default:
- LOG(FATAL) << "Unknown pixel format";
- break;
- }
} catch (int e) {
LOG(FATAL) << "Magick++ failed";
}
- /* get raw */
- Magick::PixelData blob(image, map, Magick::CharPixel);
+ /* get raw RGB (and convert it if necessary) */
+ image.colorSpace(Magick::RGBColorspace);
+ Magick::PixelData blob(image, "RGB", Magick::CharPixel);
image_buffer = (uint8_t *)blob.data();
sstv_image_t sstv_image;
- if (sstv_pack_image(&sstv_image, width, height, format, image_buffer) != SSTV_OK) {
+ if (sstv_pack_image(&sstv_image, width, height, SSTV_FORMAT_RGB, image_buffer) != SSTV_OK) {
+ LOG(INFO) << image_buffer;
LOG(FATAL) << "sstv_pack_image() failed";
}
+ /* convert to mode's colorspace */
+ if (sstv_convert_image(&sstv_image, format) != SSTV_OK) {
+ LOG(FATAL) << "sstv_convert_image() failed";
+ }
+
/* create a sample buffer for output */
int16_t samp_buffer[128 * 1024];
sstv_signal_t signal;