From fd88a60bb144399bb4aeb3169e15bbda9fc018bf Mon Sep 17 00:00:00 2001 From: Brenno Date: Wed, 27 Jan 2021 17:54:49 -0300 Subject: [PATCH] Updated variable names Updated "attached_id" to "parentObjectId", "attachedObject" to "parentTrackedObject", and "attachedClip" to "parentClipObject" --- src/Clip.cpp | 213 ++++++++++++++++++++++++++++++--------------------- src/Clip.h | 20 ++--- 2 files changed, 134 insertions(+), 99 deletions(-) diff --git a/src/Clip.cpp b/src/Clip.cpp index af09db1e..f61913f1 100644 --- a/src/Clip.cpp +++ b/src/Clip.cpp @@ -58,7 +58,7 @@ void Clip::init_settings() mixing = VOLUME_MIX_NONE; waveform = false; previous_properties = ""; - attached_id = ""; + parentObjectId = ""; // Init scale curves scale_x = Keyframe(1.0); @@ -101,8 +101,8 @@ void Clip::init_settings() has_video = Keyframe(-1.0); // Initialize the attached object and attached clip as null pointers - attachedObject = nullptr; - attachedClip = NULL; + parentTrackedObject = nullptr; + parentClipObject = NULL; // Init reader info struct and cache size init_reader_settings(); @@ -272,13 +272,13 @@ void Clip::AttachToObject(std::string object_id) // Set the pointer to the trackedObject this clip is attached to void Clip::SetAttachedObject(std::shared_ptr trackedObject){ - attachedObject = trackedObject; + parentTrackedObject = trackedObject; return; } // Set the pointer to the clip this clip is attached to void Clip::SetAttachedClip(Clip* clipObject){ - attachedClip = clipObject; + parentClipObject = clipObject; return; } @@ -800,10 +800,10 @@ std::string Clip::PropertiesJSON(int64_t requested_frame) const { root["display"] = add_property_json("Frame Number", display, "int", "", NULL, 0, 3, false, requested_frame); root["mixing"] = add_property_json("Volume Mixing", mixing, "int", "", NULL, 0, 2, false, requested_frame); root["waveform"] = add_property_json("Waveform", waveform, "int", "", NULL, 0, 1, false, requested_frame); - if (!attached_id.empty()) { - root["attached_id"] = add_property_json("Attached ID", 0.0, "string", attached_id, NULL, -1, -1, false, requested_frame); + if (!parentObjectId.empty()) { + root["parentObjectId"] = add_property_json("Parent Object ID", 0.0, "string", parentObjectId, NULL, -1, -1, false, requested_frame); } else { - root["attached_id"] = add_property_json("Attached ID", 0.0, "string", "None", NULL, -1, -1, false, requested_frame); + root["parentObjectId"] = add_property_json("Parent Object ID", 0.0, "string", "None", NULL, -1, -1, false, requested_frame); } // Add gravity choices (dropdown style) root["gravity"]["choices"].append(add_property_choice_json("Top Left", GRAVITY_TOP_LEFT, gravity)); @@ -837,49 +837,76 @@ std::string Clip::PropertiesJSON(int64_t requested_frame) const { root["waveform"]["choices"].append(add_property_choice_json("Yes", true, waveform)); root["waveform"]["choices"].append(add_property_choice_json("No", false, waveform)); - if (attachedObject){ - + // Add the parentTrackedObject's properties + if (parentTrackedObject) + { // Convert Clip's frame position to Timeline's frame position long clip_start_position = round(Position() * info.fps.ToDouble()) + 1; long clip_start_frame = (Start() * info.fps.ToDouble()) + 1; double timeline_frame_number = requested_frame + clip_start_position - clip_start_frame; // Get attached object's parent clip properties - std::map< std::string, float > attached_clip_properties = attachedObject->GetParentClipProperties(timeline_frame_number); - double attached_frame_number = attached_clip_properties["frame_number"]; - + std::map< std::string, float > trackedObjectParentClipProperties = parentTrackedObject->GetParentClipProperties(timeline_frame_number); + double parentObject_frame_number = trackedObjectParentClipProperties["frame_number"]; // Get attached object properties - std::map< std::string, float > attached_properties = attachedObject->GetBoxValues(attached_frame_number); - - // Compose attachedObject's properties with it's parent clip's properties - float attached_location_x = attached_properties["cx"] - 0.5 + attached_clip_properties["cx"]; - float attached_location_y = attached_properties["cy"] - 0.5 + attached_clip_properties["cy"]; - float attached_scale_x = attached_properties["w"]*attached_properties["sx"]; - float attached_scale_y = attached_properties["h"]*attached_properties["sy"]; - float attached_rotation = attached_properties["r"] + attached_clip_properties["r"]; - - // Set JSON properties with composed attached object's properties - root["location_x"] = add_property_json("Location X", attached_location_x, "float", "", &location_x, -1.0, 1.0, false, requested_frame); - root["location_y"] = add_property_json("Location Y", attached_location_y, "float", "", &location_y, -1.0, 1.0, false, requested_frame); - root["scale_x"] = add_property_json("Scale X", attached_scale_x, "float", "", &scale_x, 0.0, 1.0, false, requested_frame); - root["scale_y"] = add_property_json("Scale Y", attached_scale_y, "float", "", &scale_y, 0.0, 1.0, false, requested_frame); - root["rotation"] = add_property_json("Rotation", attached_rotation, "float", "", &rotation, -360, 360, false, requested_frame); - - } else { + std::map< std::string, float > trackedObjectProperties = parentTrackedObject->GetBoxValues(parentObject_frame_number); - // Set JSON properties with clip's properties + // Correct the parent Tracked Object properties by the clip's reference system + float parentObject_location_x = trackedObjectProperties["cx"] - 0.5 + trackedObjectParentClipProperties["cx"]; + float parentObject_location_y = trackedObjectProperties["cy"] - 0.5 + trackedObjectParentClipProperties["cy"]; + float parentObject_scale_x = trackedObjectProperties["w"]*trackedObjectProperties["sx"]; + float parentObject_scale_y = trackedObjectProperties["h"]*trackedObjectProperties["sy"]; + float parentObject_rotation = trackedObjectProperties["r"] + trackedObjectParentClipProperties["r"]; + + // Add the parent Tracked Object properties to JSON + root["location_x"] = add_property_json("Location X", parentObject_location_x, "float", "", &location_x, -1.0, 1.0, false, requested_frame); + root["location_y"] = add_property_json("Location Y", parentObject_location_y, "float", "", &location_y, -1.0, 1.0, false, requested_frame); + root["scale_x"] = add_property_json("Scale X", parentObject_scale_x, "float", "", &scale_x, 0.0, 1.0, false, requested_frame); + root["scale_y"] = add_property_json("Scale Y", parentObject_scale_y, "float", "", &scale_y, 0.0, 1.0, false, requested_frame); + root["rotation"] = add_property_json("Rotation", parentObject_rotation, "float", "", &rotation, -360, 360, false, requested_frame); + root["shear_x"] = add_property_json("Shear X", shear_x.GetValue(requested_frame), "float", "", &shear_x, -1.0, 1.0, false, requested_frame); + root["shear_y"] = add_property_json("Shear Y", shear_y.GetValue(requested_frame), "float", "", &shear_y, -1.0, 1.0, false, requested_frame); + } + // Add the parentClipObject's properties + else if (parentClipObject) + { + // Convert Clip's frame position to Timeline's frame position + long clip_start_position = round(Position() * info.fps.ToDouble()) + 1; + long clip_start_frame = (Start() * info.fps.ToDouble()) + 1; + double timeline_frame_number = requested_frame + clip_start_position - clip_start_frame; + + // Correct the parent Clip Object properties by the clip's reference system + float parentObject_location_x = parentClipObject->location_x.GetValue(timeline_frame_number); + float parentObject_location_y = parentClipObject->location_y.GetValue(timeline_frame_number); + float parentObject_scale_x = parentClipObject->scale_x.GetValue(timeline_frame_number); + float parentObject_scale_y = parentClipObject->scale_y.GetValue(timeline_frame_number); + float parentObject_shear_x = parentClipObject->shear_x.GetValue(timeline_frame_number); + float parentObject_shear_y = parentClipObject->shear_y.GetValue(timeline_frame_number); + float parentObject_rotation = parentClipObject->rotation.GetValue(timeline_frame_number); + + // Add the parent Clip Object properties to JSON + root["location_x"] = add_property_json("Location X", parentObject_location_x, "float", "", &location_x, -1.0, 1.0, false, requested_frame); + root["location_y"] = add_property_json("Location Y", parentObject_location_y, "float", "", &location_y, -1.0, 1.0, false, requested_frame); + root["scale_x"] = add_property_json("Scale X", parentObject_scale_x, "float", "", &scale_x, 0.0, 1.0, false, requested_frame); + root["scale_y"] = add_property_json("Scale Y", parentObject_scale_y, "float", "", &scale_y, 0.0, 1.0, false, requested_frame); + root["rotation"] = add_property_json("Rotation", parentObject_rotation, "float", "", &rotation, -360, 360, false, requested_frame); + root["shear_x"] = add_property_json("Shear X", parentObject_shear_x, "float", "", &shear_x, -1.0, 1.0, false, requested_frame); + root["shear_y"] = add_property_json("Shear Y", parentObject_shear_y, "float", "", &shear_y, -1.0, 1.0, false, requested_frame); + } + else + { + // Add this own clip's properties to JSON root["location_x"] = add_property_json("Location X", location_x.GetValue(requested_frame), "float", "", &location_x, -1.0, 1.0, false, requested_frame); root["location_y"] = add_property_json("Location Y", location_y.GetValue(requested_frame), "float", "", &location_y, -1.0, 1.0, false, requested_frame); root["scale_x"] = add_property_json("Scale X", scale_x.GetValue(requested_frame), "float", "", &scale_x, 0.0, 1.0, false, requested_frame); root["scale_y"] = add_property_json("Scale Y", scale_y.GetValue(requested_frame), "float", "", &scale_y, 0.0, 1.0, false, requested_frame); root["rotation"] = add_property_json("Rotation", rotation.GetValue(requested_frame), "float", "", &rotation, -360, 360, false, requested_frame); - + root["shear_x"] = add_property_json("Shear X", shear_x.GetValue(requested_frame), "float", "", &shear_x, -1.0, 1.0, false, requested_frame); + root["shear_y"] = add_property_json("Shear Y", shear_y.GetValue(requested_frame), "float", "", &shear_y, -1.0, 1.0, false, requested_frame); } // Keyframes root["alpha"] = add_property_json("Alpha", alpha.GetValue(requested_frame), "float", "", &alpha, 0.0, 1.0, false, requested_frame); - root["shear_x"] = add_property_json("Shear X", shear_x.GetValue(requested_frame), "float", "", &shear_x, -1.0, 1.0, false, requested_frame); - root["shear_y"] = add_property_json("Shear Y", shear_y.GetValue(requested_frame), "float", "", &shear_y, -1.0, 1.0, false, requested_frame); root["origin_x"] = add_property_json("Origin X", origin_x.GetValue(requested_frame), "float", "", &origin_x, 0.0, 1.0, false, requested_frame); root["origin_y"] = add_property_json("Origin Y", origin_y.GetValue(requested_frame), "float", "", &origin_y, 0.0, 1.0, false, requested_frame); root["volume"] = add_property_json("Volume", volume.GetValue(requested_frame), "float", "", &volume, 0.0, 1.0, false, requested_frame); @@ -912,7 +939,7 @@ Json::Value Clip::JsonValue() const { // Create root json object Json::Value root = ClipBase::JsonValue(); // get parent properties - root["attached_id"] = attached_id; + root["parentObjectId"] = parentObjectId; root["gravity"] = gravity; root["scale"] = scale; root["anchor"] = anchor; @@ -990,13 +1017,13 @@ void Clip::SetJsonValue(const Json::Value root) { cache.Clear(); // Set data from Json (if key is found) - if (!root["attached_id"].isNull()){ - attached_id = root["attached_id"].asString(); - if (attached_id.size() > 0 && attached_id != "None"){ - AttachToObject(attached_id); + if (!root["parentObjectId"].isNull()){ + parentObjectId = root["parentObjectId"].asString(); + if (parentObjectId.size() > 0 && parentObjectId != "None"){ + AttachToObject(parentObjectId); } else{ - attachedObject = nullptr; - attachedClip = NULL; + parentTrackedObject = nullptr; + parentClipObject = NULL; } } if (!root["gravity"].isNull()) @@ -1288,7 +1315,7 @@ void Clip::apply_keyframes(std::shared_ptr frame, int width, int height) QSize source_size = source_image->size(); // Apply stretch scale to correctly fit the bounding-box - if (attachedObject){ + if (parentTrackedObject){ scale = SCALE_STRETCH; } @@ -1329,63 +1356,71 @@ void Clip::apply_keyframes(std::shared_ptr frame, int width, int height) } } - // Initialize attached object's properties values - float attached_location_x = 0.0; - float attached_location_y = 0.0; - float attached_scale_x = 1.0; - float attached_scale_y = 1.0; - float attached_rotation = 0.0; + // Initialize parent object's properties (Clip or Tracked Object) + float parentObject_location_x = 0.0; + float parentObject_location_y = 0.0; + float parentObject_scale_x = 1.0; + float parentObject_scale_y = 1.0; + float parentObject_shear_x = 0.0; + float parentObject_shear_y = 0.0; + float parentObject_rotation = 0.0; - if (attachedClip){ + // Get the parentClipObject properties + if (parentClipObject){ // Convert Clip's frame position to Timeline's frame position long clip_start_position = round(Position() * info.fps.ToDouble()) + 1; long clip_start_frame = (Start() * info.fps.ToDouble()) + 1; double timeline_frame_number = frame->number + clip_start_position - clip_start_frame; - attached_location_x = attachedClip->location_x.GetValue(timeline_frame_number); - attached_location_y = attachedClip->location_y.GetValue(timeline_frame_number); - attached_scale_x = attachedClip->scale_x.GetValue(timeline_frame_number); - attached_scale_y = attachedClip->scale_y.GetValue(timeline_frame_number); - attached_rotation = attachedClip->rotation.GetValue(timeline_frame_number); + // Get parent object's properties (Clip) + parentObject_location_x = parentClipObject->location_x.GetValue(timeline_frame_number); + parentObject_location_y = parentClipObject->location_y.GetValue(timeline_frame_number); + parentObject_scale_x = parentClipObject->scale_x.GetValue(timeline_frame_number); + parentObject_scale_y = parentClipObject->scale_y.GetValue(timeline_frame_number); + parentObject_shear_x = parentClipObject->shear_x.GetValue(timeline_frame_number); + parentObject_shear_y = parentClipObject->shear_y.GetValue(timeline_frame_number); + parentObject_rotation = parentClipObject->rotation.GetValue(timeline_frame_number); } - /* TRANSFORM CLIP TO ATTACHED OBJECT'S POSITION AND DIMENSION */ - if (attachedObject){ + // Get the parentTrackedObject properties + if (parentTrackedObject){ // Convert Clip's frame position to Timeline's frame position long clip_start_position = round(Position() * info.fps.ToDouble()) + 1; long clip_start_frame = (Start() * info.fps.ToDouble()) + 1; double timeline_frame_number = frame->number + clip_start_position - clip_start_frame; - // Get attached object's parent clip properties - std::map< std::string, float > attached_clip_properties = attachedObject->GetParentClipProperties(timeline_frame_number); + // Get parentTrackedObject's parent clip's properties + std::map trackedObjectParentClipProperties = parentTrackedObject->GetParentClipProperties(timeline_frame_number); - // Get attachedObject's properties and compose with attachedObject's parent clip properties - if (!attached_clip_properties.empty()){ - - // Get attachedObject's parent clip frame number - double attached_frame_number = attached_clip_properties["frame_number"]; + // Get the attached object's parent clip's properties + if (!trackedObjectParentClipProperties.empty()) + { + // Get parent object's properties (Tracked Object) + float parentObject_frame_number = trackedObjectParentClipProperties["frame_number"]; - // Get attachedObject's properties values - std::map< std::string, float > attached_properties = attachedObject->GetBoxValues(attached_frame_number); + // Access the parentTrackedObject's properties + std::map trackedObjectProperties = parentTrackedObject->GetBoxValues(parentObject_frame_number); - attached_location_x = attached_properties["cx"] - 0.5 + attached_clip_properties["cx"]; - attached_location_y = attached_properties["cy"] - 0.5 + attached_clip_properties["cy"]; - attached_scale_x = attached_properties["w"]*attached_properties["sx"]; - attached_scale_y = attached_properties["h"]*attached_properties["sy"]; - attached_rotation = attached_properties["r"] + attached_clip_properties["r"]; - - } else { - // Get attachedObject's properties values - std::map< std::string, float > attached_properties = attachedObject->GetBoxValues(timeline_frame_number); - - attached_location_x = attached_properties["cx"] - 0.5; - attached_location_y = attached_properties["cy"] - 0.5; - attached_scale_x = attached_properties["w"]*attached_properties["sx"]; - attached_scale_y = attached_properties["h"]*attached_properties["sy"]; - attached_rotation = attached_properties["r"]; + // Get the Tracked Object's properties and correct them by the clip's reference system + parentObject_location_x = trackedObjectProperties["cx"] - 0.5 + trackedObjectParentClipProperties["location_x"]; + parentObject_location_y = trackedObjectProperties["cy"] - 0.5 + trackedObjectParentClipProperties["location_y"]; + parentObject_scale_x = trackedObjectProperties["w"]*trackedObjectProperties["sx"]; + parentObject_scale_y = trackedObjectProperties["h"]*trackedObjectProperties["sy"]; + parentObject_rotation = trackedObjectProperties["r"] + trackedObjectParentClipProperties["rotation"]; + } + else + { + // Access the parentTrackedObject's properties + std::map trackedObjectProperties = parentTrackedObject->GetBoxValues(timeline_frame_number); + // Get the Tracked Object's properties and correct them by the clip's reference system + parentObject_location_x = trackedObjectProperties["cx"] - 0.5; + parentObject_location_y = trackedObjectProperties["cy"] - 0.5; + parentObject_scale_x = trackedObjectProperties["w"]*trackedObjectProperties["sx"]; + parentObject_scale_y = trackedObjectProperties["h"]*trackedObjectProperties["sy"]; + parentObject_rotation = trackedObjectProperties["r"]; } } @@ -1397,10 +1432,10 @@ void Clip::apply_keyframes(std::shared_ptr frame, int width, int height) float sx = scale_x.GetValue(frame->number); // percentage X scale float sy = scale_y.GetValue(frame->number); // percentage Y scale - // Compose clip's scale to attachedObject's scale - if(attached_scale_x != 0.0 && attached_scale_y != 0.0){ - sx*= attached_scale_x; - sy*= attached_scale_y; + // Change clip's scale to parentObject's scale + if(parentObject_scale_x != 0.0 && parentObject_scale_y != 0.0){ + sx*= parentObject_scale_x; + sy*= parentObject_scale_y; } float scaled_source_width = source_size.width() * sx; @@ -1447,11 +1482,11 @@ void Clip::apply_keyframes(std::shared_ptr frame, int width, int height) QTransform transform; /* LOCATION, ROTATION, AND SCALE */ - float r = rotation.GetValue(frame->number) + attached_rotation; // rotate in degrees - x += ( width * (location_x.GetValue(frame->number) + attached_location_x) ); // move in percentage of final width - y += ( height * (location_y.GetValue(frame->number) + attached_location_y) ); // move in percentage of final height - float shear_x_value = shear_x.GetValue(frame->number); - float shear_y_value = shear_y.GetValue(frame->number); + float r = rotation.GetValue(frame->number) + parentObject_rotation; // rotate in degrees + x += (width * (location_x.GetValue(frame->number) + parentObject_location_x )); // move in percentage of final width + y += (height * (location_y.GetValue(frame->number) + parentObject_location_y )); // move in percentage of final height + float shear_x_value = shear_x.GetValue(frame->number) + parentObject_shear_x; + float shear_y_value = shear_y.GetValue(frame->number) + parentObject_shear_y; float origin_x_value = origin_x.GetValue(frame->number); float origin_y_value = origin_y.GetValue(frame->number); diff --git a/src/Clip.h b/src/Clip.h index 87673ece..cd0b1b6a 100644 --- a/src/Clip.h +++ b/src/Clip.h @@ -124,9 +124,9 @@ namespace openshot { bool waveform; ///< Should a waveform be used instead of the clip's image std::list effects; /// Is Reader opened - std::string attached_id; ///< Id of the bounding box that this clip is attached to - std::shared_ptr attachedObject; - Clip* attachedClip; ///< Clip object this clip is attached to + std::string parentObjectId; ///< Id of the bounding box that this clip is attached to + std::shared_ptr parentTrackedObject; ///< Tracked object this clip is attached to + openshot::Clip* parentClipObject; ///< Clip object this clip is attached to // Audio resampler (if time mapping) openshot::AudioResampler *resampler; @@ -198,12 +198,12 @@ namespace openshot { /// Determine if reader is open or closed bool IsOpen() override { return is_open; }; - /// Get and set the bounding box that this clip is attached to - std::string GetAttachedId() const { return attached_id; }; - /// Set id of the bounding box that this clip is attached to - void SetAttachedId(std::string value) { attached_id = value; }; + /// Get and set the object id that this clip is attached to + std::string GetAttachedId() const { return parentObjectId; }; + /// Set id of the object id that this clip is attached to + void SetAttachedId(std::string value) { parentObjectId = value; }; - /// Attach clip to bounding box + /// Attach clip to Tracked Object or to another Clip void AttachToObject(std::string object_id); /// Set the pointer to the trackedObject this clip is attached to @@ -211,9 +211,9 @@ namespace openshot { /// Set the pointer to the clip this clip is attached to void SetAttachedClip(Clip* clipObject); /// Return a pointer to the trackedObject this clip is attached to - std::shared_ptr GetAttachedObject() const { return attachedObject; }; + std::shared_ptr GetAttachedObject() const { return parentTrackedObject; }; /// Return a pointer to the clip this clip is attached to - Clip* GetAttachedClip() const { return attachedClip; }; + Clip* GetAttachedClip() const { return parentClipObject; }; /// Return the type name of the class std::string Name() override { return "Clip"; };