r1006: configure: Use libx264_pic instead of libx264 if available.
[cinelerra_cv/mob.git] / cinelerra / assets.C
blobcb37344706b339e00d28430515ec0dbf9d3d48e7
1 #include "asset.h"
2 #include "assets.h"
3 #include "awindowgui.inc"
4 #include "batch.h"
5 #include "cache.h"
6 #include "bchash.h"
7 #include "edl.h"
8 #include "file.h"
9 #include "filexml.h"
10 #include "filesystem.h"
11 #include "indexfile.h"
12 #include "quicktime.h"
13 #include "mainsession.h"
14 #include "threadindexer.h"
15 #include <string.h>
17 Assets::Assets(EDL *edl) : List<Asset>()
19         this->edl = edl;
22 Assets::~Assets()
24         delete_all();
27 int Assets::load(ArrayList<PluginServer*> *plugindb, 
28         FileXML *file, 
29         uint32_t load_flags)
31         int result = 0;
33 //printf("Assets::load 1\n");
34         while(!result)
35         {
36                 result = file->read_tag();
37                 if(!result)
38                 {
39                         if(file->tag.title_is("/ASSETS"))
40                         {
41                                 result = 1;
42                         }
43                         else
44                         if(file->tag.title_is("ASSET"))
45                         {
46 //printf("Assets::load 2\n");
47                                 char *path = file->tag.get_property("SRC");
48 //printf("Assets::load 3\n");
49                                 Asset *new_asset = new Asset(path ? path : SILENCE);
50 //printf("Assets::load 4\n");
51                                 new_asset->read(file);
52 //printf("Assets::load 5\n");
53                                 update(new_asset);
54                                 Garbage::delete_object(new_asset);
55 //printf("Assets::load 6\n");
56                         }
57                 }
58         }
59 //printf("Assets::load 7\n");
60         return 0;
63 int Assets::save(ArrayList<PluginServer*> *plugindb, FileXML *file, char *path)
65         file->tag.set_title("ASSETS");
66         file->append_tag();
67         file->append_newline();
69         for(Asset* current = first; current; current = NEXT)
70         {
71                 current->write(file, 
72                         0, 
73                         path);
74         }
76         file->tag.set_title("/ASSETS");
77         file->append_tag();
78         file->append_newline(); 
79         file->append_newline(); 
80         return 0;
83 void Assets::copy_from(Assets *assets)
85         delete_all();
87         for(Asset *current = assets->first; current; current = NEXT)
88         {
89                 Asset *new_asset;
90                 append(new_asset = new Asset);
91                 new_asset->copy_from(current, 1);
92         }
95 Assets& Assets::operator=(Assets &assets)
97 printf("Assets::operator= 1\n");
98         copy_from(&assets);
99         return *this;
103 void Assets::update_index(Asset *asset)
105         for(Asset* current = first; current; current = NEXT)
106         {
107                 if(current->test_path(asset->path))
108                 {
109                         current->update_index(asset);
110                 }
111         }
114 Asset* Assets::update(Asset *asset)
116         if(!asset) return 0;
118         for(Asset* current = first; current; current = NEXT)
119         {
120 // Asset already exists.
121                 if(current->test_path(asset->path)) 
122                 {
123                         return current;
124                 }
125         }
127 // Asset doesn't exist.
128         Asset *asset_copy = new Asset(*asset);
129         append(asset_copy);
130         return asset_copy;
133 int Assets::delete_all()
135         while(first) 
136         {
137                 remove_asset(first);
138         }
139         return 0;
142 Asset* Assets::update(const char *path)
144         Asset* current = first;
146         while(current)
147         {
148                 if(current->test_path(path)) 
149                 {
150                         return current;
151                 }
152                 current = NEXT;
153         }
155         return append(new Asset(path));
158 Asset* Assets::get_asset(const char *filename)
160         Asset* current = first;
161         Asset* result = 0;
163         while(current)
164         {
165 //printf("Assets::get_asset %p %s\n", filename, filename);
166                 if(current->test_path(filename))
167                 {
168                         result = current;
169                         break;
170                 }
171                 current = current->next;
172         }
174         return result;  
177 Asset* Assets::remove_asset(Asset *asset)
179         remove_pointer(asset);
180         Garbage::delete_object(asset);
184 int Assets::number_of(Asset *asset)
186         int i;
187         Asset *current;
189         for(i = 0, current = first; current && current != asset; i++, current = NEXT)
190                 ;
192         return i;
195 Asset* Assets::asset_number(int number)
197         int i;
198         Asset *current;
200         for(i = 0, current = first; i < number && current; i++, current = NEXT)
201                 ;
202         
203         return current;
206 int Assets::update_old_filename(char *old_filename, char *new_filename)
208         for(Asset* current = first; current; current = NEXT)
209         {
210                 if(!strcmp(current->path, old_filename))
211                 {
212                         current->update_path(new_filename);
213                 }
214         }
215         return 0;
219 int Assets::dump()
221         for(Asset *current = first; current; current = NEXT)
222         {
223                 current->dump();
224         }
225         return 0;