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