1 /*
2 * This program is free software; you can redistribute it and/or
3 * modify it under the terms of the GNU General Public License
4 * as published by the Free Software Foundation; either version 2
5 * of the License, or (at your option) any later version.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 *
12 * You should have received a copy of the GNU General Public License
13 * along with this program; if not, write to the Free Software Foundation,
14 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15 *
16 * The Original Code is Copyright (C) 2011 Blender Foundation.
17 * All rights reserved.
18 */
19
20 #include "intern/tracksN.h"
21 #include "intern/utildefines.h"
22 #include "libmv/autotrack/marker.h"
23 #include "libmv/autotrack/tracks.h"
24
25 using mv::Marker;
26 using mv::Tracks;
27
libmv_apiMarkerToMarker(const libmv_Marker & libmv_marker,Marker * marker)28 void libmv_apiMarkerToMarker(const libmv_Marker& libmv_marker,
29 Marker *marker) {
30 marker->clip = libmv_marker.clip;
31 marker->frame = libmv_marker.frame;
32 marker->track = libmv_marker.track;
33 marker->center(0) = libmv_marker.center[0];
34 marker->center(1) = libmv_marker.center[1];
35 for (int i = 0; i < 4; i++) {
36 marker->patch.coordinates(i, 0) = libmv_marker.patch[i][0];
37 marker->patch.coordinates(i, 1) = libmv_marker.patch[i][1];
38 }
39 marker->search_region.min(0) = libmv_marker.search_region_min[0];
40 marker->search_region.min(1) = libmv_marker.search_region_min[1];
41 marker->search_region.max(0) = libmv_marker.search_region_max[0];
42 marker->search_region.max(1) = libmv_marker.search_region_max[1];
43 marker->weight = libmv_marker.weight;
44 marker->source = (Marker::Source) libmv_marker.source;
45 marker->status = (Marker::Status) libmv_marker.status;
46 marker->reference_clip = libmv_marker.reference_clip;
47 marker->reference_frame = libmv_marker.reference_frame;
48 marker->model_type = (Marker::ModelType) libmv_marker.model_type;
49 marker->model_id = libmv_marker.model_id;
50 marker->disabled_channels = libmv_marker.disabled_channels;
51 }
52
libmv_markerToApiMarker(const Marker & marker,libmv_Marker * libmv_marker)53 void libmv_markerToApiMarker(const Marker& marker,
54 libmv_Marker *libmv_marker) {
55 libmv_marker->clip = marker.clip;
56 libmv_marker->frame = marker.frame;
57 libmv_marker->track = marker.track;
58 libmv_marker->center[0] = marker.center(0);
59 libmv_marker->center[1] = marker.center(1);
60 for (int i = 0; i < 4; i++) {
61 libmv_marker->patch[i][0] = marker.patch.coordinates(i, 0);
62 libmv_marker->patch[i][1] = marker.patch.coordinates(i, 1);
63 }
64 libmv_marker->search_region_min[0] = marker.search_region.min(0);
65 libmv_marker->search_region_min[1] = marker.search_region.min(1);
66 libmv_marker->search_region_max[0] = marker.search_region.max(0);
67 libmv_marker->search_region_max[1] = marker.search_region.max(1);
68 libmv_marker->weight = marker.weight;
69 libmv_marker->source = (libmv_MarkerSource) marker.source;
70 libmv_marker->status = (libmv_MarkerStatus) marker.status;
71 libmv_marker->reference_clip = marker.reference_clip;
72 libmv_marker->reference_frame = marker.reference_frame;
73 libmv_marker->model_type = (libmv_MarkerModelType) marker.model_type;
74 libmv_marker->model_id = marker.model_id;
75 libmv_marker->disabled_channels = marker.disabled_channels;
76 }
77
libmv_tracksNewN(void)78 libmv_TracksN* libmv_tracksNewN(void) {
79 Tracks* tracks = LIBMV_OBJECT_NEW(Tracks);
80
81 return (libmv_TracksN*) tracks;
82 }
83
libmv_tracksDestroyN(libmv_TracksN * libmv_tracks)84 void libmv_tracksDestroyN(libmv_TracksN* libmv_tracks) {
85 LIBMV_OBJECT_DELETE(libmv_tracks, Tracks);
86 }
87
libmv_tracksAddMarkerN(libmv_TracksN * libmv_tracks,const libmv_Marker * libmv_marker)88 void libmv_tracksAddMarkerN(libmv_TracksN* libmv_tracks,
89 const libmv_Marker* libmv_marker) {
90 Marker marker;
91 libmv_apiMarkerToMarker(*libmv_marker, &marker);
92 ((Tracks*) libmv_tracks)->AddMarker(marker);
93 }
94
libmv_tracksGetMarkerN(libmv_TracksN * libmv_tracks,int clip,int frame,int track,libmv_Marker * libmv_marker)95 void libmv_tracksGetMarkerN(libmv_TracksN* libmv_tracks,
96 int clip,
97 int frame,
98 int track,
99 libmv_Marker* libmv_marker) {
100 Marker marker;
101 ((Tracks*) libmv_tracks)->GetMarker(clip, frame, track, &marker);
102 libmv_markerToApiMarker(marker, libmv_marker);
103 }
104
libmv_tracksRemoveMarkerN(libmv_TracksN * libmv_tracks,int clip,int frame,int track)105 void libmv_tracksRemoveMarkerN(libmv_TracksN* libmv_tracks,
106 int clip,
107 int frame,
108 int track) {
109 ((Tracks *) libmv_tracks)->RemoveMarker(clip, frame, track);
110 }
111
libmv_tracksRemoveMarkersForTrack(libmv_TracksN * libmv_tracks,int track)112 void libmv_tracksRemoveMarkersForTrack(libmv_TracksN* libmv_tracks,
113 int track) {
114 ((Tracks *) libmv_tracks)->RemoveMarkersForTrack(track);
115 }
116
libmv_tracksMaxClipN(libmv_TracksN * libmv_tracks)117 int libmv_tracksMaxClipN(libmv_TracksN* libmv_tracks) {
118 return ((Tracks*) libmv_tracks)->MaxClip();
119 }
120
libmv_tracksMaxFrameN(libmv_TracksN * libmv_tracks,int clip)121 int libmv_tracksMaxFrameN(libmv_TracksN* libmv_tracks, int clip) {
122 return ((Tracks*) libmv_tracks)->MaxFrame(clip);
123 }
124
libmv_tracksMaxTrackN(libmv_TracksN * libmv_tracks)125 int libmv_tracksMaxTrackN(libmv_TracksN* libmv_tracks) {
126 return ((Tracks*) libmv_tracks)->MaxTrack();
127 }
128
libmv_tracksNumMarkersN(libmv_TracksN * libmv_tracks)129 int libmv_tracksNumMarkersN(libmv_TracksN* libmv_tracks) {
130 return ((Tracks*) libmv_tracks)->NumMarkers();
131 }
132