Skip to content

Commit d0133d1

Browse files
Use duration() as a virtual function (#1514)
Signed-off-by: Darby Johnston <darbyjohnston@yahoo.com>
1 parent 6d5f7da commit d0133d1

File tree

4 files changed

+8
-30
lines changed

4 files changed

+8
-30
lines changed

src/opentimelineio/composable.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,10 @@ Composable::duration(ErrorStatus* error_status) const
6666
{
6767
if (error_status)
6868
{
69-
*error_status = ErrorStatus::NOT_IMPLEMENTED;
69+
*error_status = ErrorStatus(
70+
ErrorStatus::OBJECT_WITHOUT_DURATION,
71+
"Cannot determine duration from this kind of object",
72+
this);
7073
}
7174
return RationalTime();
7275
}

src/opentimelineio/item.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ class Item : public Composable
6161
return _markers;
6262
}
6363

64-
virtual RationalTime duration(ErrorStatus* error_status = nullptr) const;
64+
virtual RationalTime duration(ErrorStatus* error_status = nullptr) const override;
6565

6666
virtual TimeRange
6767
available_range(ErrorStatus* error_status = nullptr) const;

src/opentimelineio/track.cpp

Lines changed: 2 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,30 +41,6 @@ Track::write_to(Writer& writer) const
4141
writer.write("kind", _kind);
4242
}
4343

44-
static RationalTime
45-
_safe_duration(Composable* c, ErrorStatus* error_status)
46-
{
47-
if (auto item = dynamic_cast<Item*>(c))
48-
{
49-
return item->duration(error_status);
50-
}
51-
else if (auto transition = dynamic_cast<Transition*>(c))
52-
{
53-
return transition->duration(error_status);
54-
}
55-
else
56-
{
57-
if (error_status)
58-
{
59-
*error_status = ErrorStatus(
60-
ErrorStatus::OBJECT_WITHOUT_DURATION,
61-
"Cannot determine duration from this kind of object",
62-
c);
63-
}
64-
return RationalTime();
65-
}
66-
}
67-
6844
TimeRange
6945
Track::range_of_child_at_index(int index, ErrorStatus* error_status) const
7046
{
@@ -79,7 +55,7 @@ Track::range_of_child_at_index(int index, ErrorStatus* error_status) const
7955
}
8056

8157
Composable* child = children()[index];
82-
RationalTime child_duration = _safe_duration(child, error_status);
58+
RationalTime child_duration = child->duration(error_status);
8359
if (is_error(error_status))
8460
{
8561
return TimeRange();
@@ -92,7 +68,7 @@ Track::range_of_child_at_index(int index, ErrorStatus* error_status) const
9268
Composable* child2 = children()[i];
9369
if (!child2->overlapping())
9470
{
95-
start_time += _safe_duration(children()[i], error_status);
71+
start_time += children()[i]->duration(error_status);
9672
}
9773
if (is_error(error_status))
9874
{

src/opentimelineio/transition.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,7 @@ class Transition : public Composable
5555
_out_offset = out_offset;
5656
}
5757

58-
// XX is this virtual?
59-
virtual RationalTime duration(ErrorStatus* error_status = nullptr) const;
58+
virtual RationalTime duration(ErrorStatus* error_status = nullptr) const override;
6059

6160
optional<TimeRange>
6261
range_in_parent(ErrorStatus* error_status = nullptr) const;

0 commit comments

Comments
 (0)