Skip to content

Commit 66d3ff8

Browse files
committed
First draft of image bounds fetching
Signed-off-by: vade <vade@vade.info>
1 parent 963be93 commit 66d3ff8

4 files changed

Lines changed: 69 additions & 1 deletion

File tree

Sources/objc/include/CxxBox.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// Copyright Contributors to the OpenTimelineIO project
3+
4+
#import <Foundation/Foundation.h>
5+
6+
typedef struct CxxBox2D {
7+
double minX;
8+
double minY;
9+
double maxX;
10+
double maxY;
11+
} CxxBox2D;
12+

Sources/objc/include/opentimelineio.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#import "CxxAnyDictionaryIterator.h"
1111
#import "CxxAnyVectorMutationStamp.h"
1212
#import "CxxVectorProperty.h"
13+
#import "CxxBox.h"
1314
#import "errorStruct.h"
1415

1516
#if defined(__cplusplus)
@@ -183,7 +184,11 @@ bool media_reference_is_missing_reference(CxxRetainer* self);
183184
bool media_reference_available_range(CxxRetainer* self, CxxTimeRange*);
184185
void media_reference_set_available_range(CxxRetainer* self, CxxTimeRange);
185186
void media_reference_clear_available_range(CxxRetainer* self);
186-
187+
188+
bool media_reference_available_image_bounds(CxxRetainer* self, CxxBox2D* );
189+
void media_reference_set_available_image_bounds(CxxRetainer* self, CxxBox2D image_bounds);
190+
void media_reference_clear_available_image_bounds(CxxRetainer* self);
191+
187192
// MARK: - Timeline
188193
void* timeline_get_tracks(CxxRetainer* self);
189194
void timeline_set_tracks(CxxRetainer* self, CxxRetainer* stack);

Sources/objc/opentimelineio.mm

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
#import "opentimelineio.h"
3838
#import "opentime.h"
3939
#import "errorStruct.h"
40+
#import "CxxBox.h"
4041
#import "CxxVectorProperty.h"
4142

4243
namespace otio = opentimelineio::OPENTIMELINEIO_VERSION;
@@ -631,6 +632,39 @@ void media_reference_clear_available_range(CxxRetainer* self) {
631632
SO_cast<otio::MediaReference>(self)->set_available_range(std::nullopt);
632633
}
633634

635+
bool media_reference_available_image_bounds(CxxRetainer* self, CxxBox2D* ib) {
636+
std::optional<IMATH_NAMESPACE::Box2d> iBox2D = SO_cast<otio::MediaReference>(self)->available_image_bounds();
637+
638+
if (iBox2D && ib) {
639+
ib->minX = iBox2D->min.x;
640+
ib->minY = iBox2D->min.y;
641+
ib->maxX = iBox2D->max.x;
642+
ib->maxX = iBox2D->max.y;
643+
644+
return true;
645+
}
646+
647+
ib = NULL;
648+
649+
return false;
650+
}
651+
652+
void media_reference_set_available_image_bounds(CxxRetainer* self, CxxBox2D image_bounds) {
653+
std::optional<IMATH_NAMESPACE::Box2d> iBox2D = std::optional<IMATH_NAMESPACE::Box2d>();
654+
655+
iBox2D->min.x = image_bounds.minX;
656+
iBox2D->min.y = image_bounds.minY;
657+
iBox2D->max.x = image_bounds.maxX;
658+
iBox2D->max.y = image_bounds.maxX;
659+
660+
SO_cast<otio::MediaReference>(self)->set_available_image_bounds(iBox2D);
661+
}
662+
663+
void media_reference_clear_available_image_bounds(CxxRetainer* self) {
664+
SO_cast<otio::MediaReference>(self)->set_available_image_bounds(std::nullopt);
665+
}
666+
667+
634668
// MARK: - Timeline
635669

636670
void* timeline_get_tracks(CxxRetainer* self) {

Sources/swift/MediaReference.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,4 +49,21 @@ public class MediaReference : SerializableObjectWithMetadata {
4949
public var isMissingReference: Bool {
5050
get { return media_reference_is_missing_reference(self) }
5151
}
52+
53+
public var availableImageBounds: CxxBox2D?
54+
{
55+
get { var box2D = CxxBox2D()
56+
return media_reference_available_image_bounds(self, &box2D) ? box2D : nil
57+
}
58+
set {
59+
if let newValue = newValue {
60+
media_reference_set_available_image_bounds(self, newValue)
61+
}
62+
else
63+
{
64+
media_reference_clear_available_image_bounds(self)
65+
}
66+
}
67+
68+
}
5269
}

0 commit comments

Comments
 (0)