Get all properties for a specific frame
| 227 | |
| 228 | // Get all properties for a specific frame |
| 229 | std::string Mask::PropertiesJSON(int64_t requested_frame) const { |
| 230 | |
| 231 | // Generate JSON properties list |
| 232 | Json::Value root = BasePropertiesJSON(requested_frame); |
| 233 | |
| 234 | // Add replace_image choices (dropdown style) |
| 235 | root["replace_image"] = add_property_json("Replace Image", replace_image, "int", "", NULL, 0, 1, false, requested_frame); |
| 236 | root["replace_image"]["choices"].append(add_property_choice_json("Yes", true, replace_image)); |
| 237 | root["replace_image"]["choices"].append(add_property_choice_json("No", false, replace_image)); |
| 238 | |
| 239 | root["fade_audio_hint"] = add_property_json("Fade Audio", fade_audio_hint, "int", "", NULL, 0, 1, false, requested_frame); |
| 240 | root["fade_audio_hint"]["choices"].append(add_property_choice_json("Yes", true, fade_audio_hint)); |
| 241 | root["fade_audio_hint"]["choices"].append(add_property_choice_json("No", false, fade_audio_hint)); |
| 242 | |
| 243 | // Keyframes |
| 244 | root["brightness"] = add_property_json("Brightness", brightness.GetValue(requested_frame), "float", "", &brightness, -1.0, 1.0, false, requested_frame); |
| 245 | root["contrast"] = add_property_json("Contrast", contrast.GetValue(requested_frame), "float", "", &contrast, 0, 20, false, requested_frame); |
| 246 | |
| 247 | // Return formatted string |
| 248 | return root.toStyledString(); |
| 249 | } |
| 250 | |
| 251 | void Mask::Reader(ReaderBase *new_reader) { |
| 252 | if (!new_reader) { |