Skip to content

Commit 366fdca

Browse files
authored
Merge pull request #48 from Elly2018/v1.0.4
Camera item name rule And Denosie option
2 parents dd7a7b7 + 2afcf19 commit 366fdca

9 files changed

Lines changed: 103 additions & 58 deletions

File tree

src/common/camera_code.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,7 @@ const static int32_t GOPRO_MEDIA_STATUS_IDS[] = {
322322
// Lookup functions
323323
inline const int32_t GET_SETTING_SIZE_BY_ID(int32_t x) {
324324
switch(x) {
325+
case DENOISE_ID : return DENOISE_SIZE;
325326
case BURST_OUTPUT_ID : return BURST_OUTPUT_SIZE;
326327
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_SIZE;
327328
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_SIZE;
@@ -393,6 +394,7 @@ inline const int32_t GET_SETTING_SIZE_BY_ID(int32_t x) {
393394

394395
inline const int32_t GET_SETTING_AVA_BY_ID(int32_t x) {
395396
switch(x) {
397+
case DENOISE_ID : return DENOISE_AVA;
396398
case BURST_OUTPUT_ID : return BURST_OUTPUT_AVA;
397399
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_AVA;
398400
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_AVA;
@@ -464,6 +466,7 @@ inline const int32_t GET_SETTING_AVA_BY_ID(int32_t x) {
464466

465467
inline const char* GET_SETTING_NAME_BY_ID(int32_t x) {
466468
switch(x) {
469+
case DENOISE_ID : return DENOISE_NAME;
467470
case BURST_OUTPUT_ID : return BURST_OUTPUT_NAME;
468471
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_NAME;
469472
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_NAME;
@@ -535,6 +538,7 @@ inline const char* GET_SETTING_NAME_BY_ID(int32_t x) {
535538

536539
inline const char** GET_SETTING_STRING_BY_ID(int32_t x) {
537540
switch(x) {
541+
case DENOISE_ID : return DENOISE_STRING;
538542
case BURST_OUTPUT_ID : return BURST_OUTPUT_STRING;
539543
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_STRING;
540544
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_STRING;
@@ -606,6 +610,7 @@ inline const char** GET_SETTING_STRING_BY_ID(int32_t x) {
606610

607611
inline const int32_t* GET_SETTING_VALUE_BY_ID(int32_t x) {
608612
switch(x) {
613+
case DENOISE_ID : return DENOISE_VALUE;
609614
case BURST_OUTPUT_ID : return BURST_OUTPUT_VALUE;
610615
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_VALUE;
611616
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_VALUE;
@@ -677,6 +682,7 @@ inline const int32_t* GET_SETTING_VALUE_BY_ID(int32_t x) {
677682

678683
inline const int32_t* GET_SETTING_SUPPORT_BY_ID(int32_t x) {
679684
switch(x) {
685+
case DENOISE_ID : return DENOISE_SUPPORT;
680686
case BURST_OUTPUT_ID : return BURST_OUTPUT_SUPPORT;
681687
case PHOTO_BURST_RATE_ID : return PHOTO_BURST_RATE_SUPPORT;
682688
case ISO_MIN_BURST_ID : return ISO_MIN_BURST_SUPPORT;

src/common/camera_other.h

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
#define CAMERA_OTHER
44
#include <cinttypes>
55

6+
#pragma region GoPro Mode
67
#define GOPRO_MODE_SIZE 9
78
#define GOPRO_MODE_NAME "Webcam Mode"
8-
99
const static char* GOPRO_MODE_STRING[] = {
1010
"Video",
1111
"Photo Burst",
@@ -17,7 +17,6 @@ const static char* GOPRO_MODE_STRING[] = {
1717
"Timelapse Video",
1818
"Timelapse Night Video",
1919
};
20-
2120
const static int32_t GOPRO_MODE_VALUE[] = {
2221
0, // Video
2322
65538, // Photo Burst
@@ -29,6 +28,20 @@ const static int32_t GOPRO_MODE_VALUE[] = {
2928
131073, // Timelapse Video
3029
131074, // Timelapse Night Video
3130
};
31+
#pragma endregion
32+
33+
#pragma region Media Download Type
34+
#define MEDIA_DOWNLOAD_TYPE_SIZE 3
35+
#define MEDIA_DOWNLOAD_TYPE_NAME "Media Download Type"
36+
const static char* MEDIA_DOWNLOAD_TYPE_STRING[] = {
37+
"All",
38+
"Front Chars",
39+
"Back Chars"
40+
};
41+
const static int32_t MEDIA_DOWNLOAD_TYPE_VALUE[] = {
42+
0, 1, 2
43+
};
44+
#pragma endregion
3245

3346
#define WEBCAM_START_RES_SIZE 3
3447
#define WEBCAM_START_RES_NAME "Webcam Resolution"

src/common/camera_setting.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2172,21 +2172,21 @@ const static int32_t SHARPNESS_SUPPORT[] = {
21722172
#define DENOISE_ID 198
21732173
#define DENOISE_SIZE 3
21742174
#define DENOISE_NAME "Denoise"
2175-
#define DENOISE_AVA MODEL_MAX2_ALL
2175+
#define DENOISE_AVA MODEL_MAX2|MODEL_13
21762176
const static char* DENOISE_STRING[] = {
21772177
"High",
21782178
"Midium",
2179-
"Low"
2179+
"Low",
21802180
};
21812181
const static int32_t DENOISE_VALUE[] = {
21822182
2, // High
21832183
1, // Midium
2184-
1, // Low
2184+
0, // Low
21852185
};
21862186
const static int32_t DENOISE_SUPPORT[] = {
2187-
MODEL_MAX2_ALL, // High
2188-
MODEL_MAX2_ALL, // Midium
2189-
MODEL_MAX2_ALL, // Low
2187+
MODEL_MAX2|MODEL_13, // High
2188+
MODEL_MAX2|MODEL_13, // Midium
2189+
MODEL_MAX2|MODEL_13, // Low
21902190
};
21912191
#pragma endregio
21922192

src/master/GoProMaster.cpp

Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -280,9 +280,9 @@ void GoProMaster::media_only(const std::string command, std::string target){
280280

281281
}
282282

283-
void GoProMaster::download_last_media(const std::string dir, bool put_finish){
283+
void GoProMaster::download_last_media(const std::string ip, const DownloadMediaParameters params){
284284
std::thread([=](){
285-
if(put_finish){
285+
if(params.put_finish){
286286
downloading_last_media_flag = 2;
287287
}else{
288288
downloading_last_media_flag = 1;
@@ -292,55 +292,26 @@ void GoProMaster::download_last_media(const std::string dir, bool put_finish){
292292

293293
for(auto& s : cameras){
294294
if(!s->connected) continue;
295-
295+
if(ip.size() > 0 && s->ip != ip) continue;
296296
std::string filename = s->name + fs::path(s->last_media).extension().string();
297297
if(filename.size() == 0 || s->name.size() == 0) {
298298
std::cerr << "[download_last_media] filename size is 0, we just skip..." << std::endl;
299299
continue;
300300
}
301-
bool islocal = s->server == "127.0.0.1";
302-
303-
json data = json::object();
304-
data["key"] = "media";
305-
data["value"] = json::object();
306-
data["value"]["name"] = "url";
307-
data["value"]["item"] = s->name;
308-
data["value"]["ip"] = s->ip;
309-
data["value"]["local"] = islocal;
310-
data["value"]["dir"] = dir;
311-
data["value"]["filename"] = filename;
312-
313-
for(auto ss : servers){
314-
if(s->server == ss->ip && ss->connected){
315-
ss->client.send(data.dump());
316-
downloading_last_media_total++;
317-
break;
301+
size_t filename_size = filename.size();
302+
if(params.c_count > 0){
303+
std::string ccc = "";
304+
if(params.type == 1){
305+
filename.reserve();
318306
}
319-
}
320-
}
321-
if(downloading_last_media_total == 0){
322-
downloading_last_media_flag = 0;
323-
}
324-
}).detach();
325-
}
326-
327-
void GoProMaster::download_last_media(const std::string ip, const std::string dir, bool put_finish){
328-
std::thread([=](){
329-
if(put_finish){
330-
downloading_last_media_flag = 2;
331-
}else{
332-
downloading_last_media_flag = 1;
333-
}
334-
downloading_last_media_total = 0;
335-
downloading_last_media_done = 0;
336-
337-
for(auto& s : cameras){
338-
if(!s->connected) continue;
339-
if(s->ip != ip) continue;
340-
std::string filename = s->name + fs::path(s->last_media).extension().string();
341-
if(filename.size() == 0 || s->name.size() == 0) {
342-
std::cerr << "[download_last_media] filename size is 0, we just skip..." << std::endl;
343-
continue;
307+
for(int32_t i = 0; i < params.c_count && i < filename_size; i++){
308+
ccc += filename.at(filename.size() - 1);
309+
filename.pop_back();
310+
}
311+
if(params.type == 2){
312+
ccc.reserve();
313+
}
314+
filename = ccc;
344315
}
345316
bool islocal = s->server == "127.0.0.1";
346317

@@ -351,7 +322,7 @@ void GoProMaster::download_last_media(const std::string ip, const std::string di
351322
data["value"]["item"] = s->name;
352323
data["value"]["ip"] = s->ip;
353324
data["value"]["local"] = islocal;
354-
data["value"]["dir"] = dir;
325+
data["value"]["dir"] = params.dir;
355326
data["value"]["filename"] = filename;
356327

357328
for(auto ss : servers){

src/master/GoProMaster.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ typedef void (*camera_log_feedback)(std::string key, std::string value);
2424
typedef void (*camera_preset_save)();
2525
typedef void (*camera_apply_all_feedback)();
2626

27+
struct DownloadMediaParameters {
28+
std::string dir;
29+
bool put_finish;
30+
int32_t type;
31+
int32_t c_count;
32+
};
33+
2734
///
2835
/// GoPro Master Worker
2936
/// Use this hub stuff to control multiple websocket server or camera
@@ -88,8 +95,7 @@ class GoProMaster {
8895
void preview_start(std::string server, std::string target);
8996
void preview_end(std::string server, std::string target);
9097
void media_only(const std::string command, std::string target = "");
91-
void download_last_media(const std::string dir, bool put_finish);
92-
void download_last_media(const std::string ip, const std::string dir, bool put_finish);
98+
void download_last_media(const std::string ip, const DownloadMediaParameters params);
9399

94100
void presetSwitch(const std::string server, const std::string target, int32_t mode);
95101
void locate(const std::string server, const std::string target);

src/master/windows/inspector.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,11 @@ class InspectorWindow : public BaseWindow {
6666
bool put_finish;
6767
bool should_disabled;
6868
bool applying_all_last;
69+
///
70+
/// 0: None
71+
/// 1: Front Characters
72+
/// 2: Back Characters
73+
///
74+
int32_t media_name_rule_type;
75+
int32_t media_name_character_count;
6976
};

src/master/windows/inspector/inspector.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@ json InspectorWindow::get_window_data() {
4949
json data = json::object();
5050
data["put_finish"] = put_finish;
5151
data["create_date_folder"] = create_date_folder;
52+
data["media_name_rule_type"] = media_name_rule_type;
53+
data["media_name_character_count"] = media_name_character_count;
5254
data["current_download_location"] = state->current_download_location;
5355
data["setting_order"] = json::object();
5456
data["status_order"] = json::object();
@@ -74,6 +76,15 @@ void InspectorWindow::set_window_data(json data) {
7476
if(data["create_date_folder"].is_boolean()){
7577
create_date_folder = data["create_date_folder"].get<bool>();
7678
}
79+
if(data["media_name_rule_type"].is_number()){
80+
media_name_rule_type = data["media_name_rule_type"].get<int32_t>();
81+
}
82+
if(data["media_name_character_count"].is_number()){
83+
media_name_character_count = data["media_name_character_count"].get<int32_t>();
84+
}
85+
if(data["put_finish"].is_number()){
86+
put_finish = data["put_finish"].get<int32_t>();
87+
}
7788
if(data["current_download_location"].is_string()){
7889
state->current_download_location = data["current_download_location"].get<std::string>();
7990
}

src/master/windows/inspector/media.cpp

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ void InspectorWindow::draw_media_global(){
3838
ImVec2 button_size = ImVec2(size.x / 2.0F - style.ItemSpacing.x, 0);
3939
ImVec2 button3_size = ImVec2(size.x / 3.0F - style.ItemSpacing.x, 0);
4040

41+
DownloadMediaParameters params;
42+
params.dir = state->current_download_location;
43+
params.put_finish = put_finish;
44+
params.type = media_name_rule_type;
45+
params.c_count = media_name_character_count;
46+
4147
int32_t camera_ip = master->findCamera(state->current_camera_server, state->current_camera_item);
4248
if(ImGui::InputText("Media Download", &state->current_download_location)){
4349
state->update_server();
@@ -53,7 +59,8 @@ void InspectorWindow::draw_media_global(){
5359
buffer.append("/" + date);
5460
}
5561
fs::create_directories(buffer);
56-
master->download_last_media(buffer, put_finish);
62+
params.dir = buffer;
63+
master->download_last_media("", params);
5764
}
5865
}
5966
if(ImGui::IsItemHovered()) ImGui::SetTooltip("Download all exist camera instances");
@@ -69,7 +76,8 @@ void InspectorWindow::draw_media_global(){
6976
buffer.append("/" + date);
7077
}
7178
fs::create_directories(buffer);
72-
master->download_last_media(state->current_camera_item, buffer, put_finish);
79+
params.dir = buffer;
80+
master->download_last_media(state->current_camera_item, params);
7381
}
7482
}
7583
if(ImGui::IsItemHovered()) ImGui::SetTooltip("Download current select camera instance");
@@ -94,6 +102,28 @@ void InspectorWindow::draw_media_global(){
94102
state->update_server();
95103
}
96104

105+
const char* selection = MEDIA_DOWNLOAD_TYPE_STRING[media_name_rule_type];
106+
if(ImGui::BeginCombo("Media Name Rule", selection)){
107+
for(int32_t i = 0; i < MEDIA_DOWNLOAD_TYPE_SIZE; i++){
108+
bool selected = (media_name_rule_type == i);
109+
if(ImGui::Selectable(MEDIA_DOWNLOAD_TYPE_STRING[i], selected)){
110+
media_name_rule_type = i;
111+
state->update_server();
112+
}
113+
if(selected){
114+
ImGui::SetItemDefaultFocus();
115+
}
116+
}
117+
ImGui::EndCombo();
118+
}
119+
120+
if(media_name_rule_type > 0){
121+
if(ImGui::InputInt("Character Count", &media_name_character_count, 1, 5)){
122+
if(media_name_character_count < 1) media_name_character_count = 1;
123+
state->update_server();
124+
}
125+
}
126+
97127
if(ImGui::IsItemHovered()) ImGui::SetTooltip("Open file explorer for path select directory");
98128
if(camera_ip >= 0){
99129
std::shared_ptr<CameraInfo> t = master->getCameras()[camera_ip];

src/master/windows/websocket_server.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ WebsocketWindow::WebsocketWindow(
1515
title = "Websocket Dashboard";
1616
}
1717

18+
1819
WebsocketWindow::~WebsocketWindow(){
1920

2021
}

0 commit comments

Comments
 (0)