by roundabout, Thursday, 15 January 2026, 16:34:11 (1768494851), pushed by roundabout, Thursday, 15 January 2026, 17:14:34 (1768497274)
Author identity: vlad <vlad.muntoiu@gmail.com>
1098cf35d1668461a86a0d166f335ed7fdb82c9b
main.cc
@@ -15,6 +15,7 @@
#include <ctime>
#include <sstream>
#include <iomanip>
#include <unordered_map>
static inline uint8_t clamp(int v) {
return v < 0 ? 0 : (v > 255 ? 255 : v);
@@ -30,6 +31,14 @@ inline void set_expand_in_direction(Gtk::Widget &widget, Gtk::Orientation orient
}
}
std::string write_parameters(std::unordered_map<std::string, std::string> const parameters) {
std::stringstream str;
for(auto const ¶m: parameters) {
str << param.first << '=' << param.second << ';';
}
return str.str();
}
std::map<std::string, int> const ORIENTATIONS = {
{"", 0},
{"normal", 0},
@@ -195,6 +204,8 @@ class PanoramaCamera : public Gtk::Application {
sigc::connection compressed_image_connection, frame_available_connection, accelerometer_connection;
std::unordered_map<std::string, std::string> parameters;
int device_rotation_degrees = 0;
void on_compressed_image(DroidMediaData *mem) {
@@ -333,12 +344,12 @@ public:
format_adjustment->signal_value_changed().connect([this]() {
int value = format_adjustment->get_value(), w = cam->picture_sizes.at(cam->picture_sizes.size() - 1 - value).first, h = cam->picture_sizes.at(cam->picture_sizes.size() - 1 - value).second;
droid_media_camera_stop_preview(cam->camera);
std::string param_str = "picture-size=" + std::to_string(w) + "x" + std::to_string(h) + ";preview-size=1024x768;video-size=176x144;sensitivity=100;exposure-time=83200;flash-mode=off;";
std::cout << param_str << '\n';
parameters["picture-size"] = std::to_string(w) + "x" + std::to_string(h);
droid_media_camera_set_parameters(cam->camera, param_str.c_str());
std::string new_params = write_parameters(parameters);
droid_media_camera_set_parameters(cam->camera, new_params.c_str());
droid_media_camera_start_preview(cam->camera);
droid_media_camera_set_parameters(cam->camera, param_str.c_str());
droid_media_camera_set_parameters(cam->camera, new_params.c_str());
if(format_label) {
format_label->set_text(std::to_string(w) + "×" + std::to_string(h));
}
@@ -347,14 +358,16 @@ public:
std::cout << droid_media_camera_get_parameters(cam->camera) << '\n';
parameters["picture-size"] = "1920x1080";
parameters["preview-size"] = "1024x768";
parameters["video-size"] = "176x144";
parameters["sensitivity"] = "100";
parameters["exposure-time"] = "83200";
parameters["flash-mode"] = "off";
droid_media_camera_set_parameters(
cam->camera,
"picture-size=1920x1080;"
"preview-size=1024x768;"
"video-size=176x144;"
"sensitivity=100;"
"exposure-time=83200;"
"flash-mode=off;"
write_parameters(parameters).c_str()
);
compressed_image_connection = cam->signal_compressed_image.connect(sigc::mem_fun(*this, &PanoramaCamera::on_compressed_image));
@@ -373,12 +386,7 @@ public:
droid_media_camera_set_parameters(
cam->camera,
"picture-size=1920x1080;"
"preview-size=1024x576;"
"video-size=176x144;"
"sensitivity=100;"
"exposure-time=83200;"
"flash-mode=off;"
write_parameters(parameters).c_str()
);
fprintf(stderr, "start_preview OK\n");
@@ -423,8 +431,9 @@ public:
void on_orientation_changed(std::string const &orientation) {
device_rotation_degrees = ORIENTATIONS.at(orientation);
int actual_orientation = (cam->physical_info.orientation + device_rotation_degrees) % 360;
std::string param_str = "jpeg-orientation=" + std::to_string(actual_orientation); + ";";
droid_media_camera_set_parameters(cam->camera, param_str.c_str());
std::cout << "rotation is " << actual_orientation << " degrees!\n";
parameters["jpeg-orientation"] = std::to_string(actual_orientation);
droid_media_camera_set_parameters(cam->camera, write_parameters(parameters).c_str());
}
void on_activate() override {