-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGES-1.0.gir
15532 lines (15156 loc) · 790 KB
/
GES-1.0.gir
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0"?>
<!-- This file was automatically generated from C sources - DO NOT EDIT!
To affect the contents of this file, edit the original C definitions,
and/or use gtk-doc annotations. -->
<repository xmlns="http://www.gtk.org/introspection/core/1.0" xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0" version="1.2">
<include name="GObject" version="2.0"/>
<include name="Gio" version="2.0"/>
<include name="Gst" version="1.0"/>
<include name="GstPbutils" version="1.0"/>
<include name="GstVideo" version="1.0"/>
<package name="gst-editing-services-1.0"/>
<c:include name="ges/ges.h"/>
<namespace name="GES" version="1.0" shared-library="libges-1.0.so.0" c:identifier-prefixes="GES" c:symbol-prefixes="ges">
<alias name="FrameNumber" c:type="GESFrameNumber">
<doc xml:space="preserve">A datatype to hold a frame number.</doc>
<type name="gint64" c:type="gint64"/>
</alias>
<class name="Asset" c:symbol-prefix="asset" c:type="GESAsset" parent="GObject.Object" glib:type-name="GESAsset" glib:get-type="ges_asset_get_type" glib:type-struct="AssetClass">
<doc xml:space="preserve">A #GESAsset in the GStreamer Editing Services represents a resources
that can be used. In particular, any class that implements the
#GESExtractable interface may have some associated assets with a
corresponding #GESAsset:extractable-type, from which its objects can be
extracted using ges_asset_extract(). Some examples would be
#GESClip, #GESFormatter and #GESTrackElement.
All assets that are created within GES are stored in a cache; one per
each #GESAsset:id and #GESAsset:extractable-type pair. These assets can
be fetched, and initialized if they do not yet exist in the cache,
using ges_asset_request().
``` c
GESAsset *effect_asset;
GESEffect *effect;
// You create an asset for an effect
effect_asset = ges_asset_request (GES_TYPE_EFFECT, "agingtv", NULL);
// And now you can extract an instance of GESEffect from that asset
effect = GES_EFFECT (ges_asset_extract (effect_asset));
```
The advantage of using assets, rather than simply creating the object
directly, is that the currently loaded resources can be listed with
ges_list_assets() and displayed to an end user. For example, to show
which media files have been loaded, and a standard list of effects. In
fact, the GES library already creates assets for #GESTransitionClip and
#GESFormatter, which you can use to list all the available transition
types and supported formats.
The other advantage is that #GESAsset implements #GESMetaContainer, so
metadata can be set on the asset, with some subclasses automatically
creating this metadata on initiation.
For example, to display information about the supported formats, you
could do the following:
|[
GList *formatter_assets, *tmp;
// List all the transitions
formatter_assets = ges_list_assets (GES_TYPE_FORMATTER);
// Print some infos about the formatter GESAsset
for (tmp = formatter_assets; tmp; tmp = tmp->next) {
gst_print ("Name of the formatter: %s, file extension it produces: %s",
ges_meta_container_get_string (
GES_META_CONTAINER (tmp->data), GES_META_FORMATTER_NAME),
ges_meta_container_get_string (
GES_META_CONTAINER (tmp->data), GES_META_FORMATTER_EXTENSION));
}
g_list_free (transition_assets);
]|
## ID
Each asset is uniquely defined in the cache by its
#GESAsset:extractable-type and #GESAsset:id. Depending on the
#GESAsset:extractable-type, the #GESAsset:id can be used to parametrise
the creation of the object upon extraction. By default, a class that
implements #GESExtractable will only have a single associated asset,
with an #GESAsset:id set to the type name of its objects. However, this
is overwritten by some implementations, which allow a class to have
multiple associated assets. For example, for #GESTransitionClip the
#GESAsset:id will be a nickname of the #GESTransitionClip:vtype. You
should check the documentation for each extractable type to see if they
differ from the default.
Moreover, each #GESAsset:extractable-type may also associate itself
with a specific asset subclass. In such cases, when their asset is
requested, an asset of this subclass will be returned instead.
## Managing
You can use a #GESProject to easily manage the assets of a
#GESTimeline.
## Proxies
Some assets can (temporarily) act as the #GESAsset:proxy of another
asset. When the original asset is requested from the cache, the proxy
will be returned in its place. This can be useful if, say, you want
to substitute a #GESUriClipAsset corresponding to a high resolution
media file with the asset of a lower resolution stand in.
An asset may even have several proxies, the first of which will act as
its default and be returned on requests, but the others will be ordered
to take its place once it is removed. You can add a proxy to an asset,
or set its default, using ges_asset_set_proxy(), and you can remove
them with ges_asset_unproxy().</doc>
<implements name="MetaContainer"/>
<implements name="Gio.AsyncInitable"/>
<implements name="Gio.Initable"/>
<function name="needs_reload" c:identifier="ges_asset_needs_reload">
<doc xml:space="preserve">Indicate that an existing #GESAsset in the cache should be reloaded
upon the next request. This can be used when some condition has
changed, which may require that an existing asset should be updated.
For example, if an external resource has changed or now become
available.
Note, the asset is not immediately changed, but will only actually
reload on the next call to ges_asset_request() or
ges_asset_request_async().</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">%TRUE if the specified asset exists in the cache and could be
marked for reloading.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<parameter name="extractable_type" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset:extractable-type of the asset that
needs reloading</doc>
<type name="GType" c:type="GType"/>
</parameter>
<parameter name="id" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve">The #GESAsset:id of the asset asset that needs
reloading</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</function>
<function name="request" c:identifier="ges_asset_request" throws="1">
<doc xml:space="preserve">Returns an asset with the given properties. If such an asset already
exists in the cache (it has been previously created in GES), then a
reference to the existing asset is returned. Otherwise, a newly created
asset is returned, and also added to the cache.
If the requested asset has been loaded with an error, then @error is
set, if given, and %NULL will be returned instead.
Note that the given @id may not be exactly the #GESAsset:id that is
set on the returned asset. For instance, it may be adjusted into a
standard format. Or, if a #GESExtractable type does not have its
extraction parametrised, as is the case by default, then the given @id
may be ignored entirely and the #GESAsset:id set to some standard, in
which case a %NULL @id can be given.
Similarly, the given @extractable_type may not be exactly the
#GESAsset:extractable-type that is set on the returned asset. Instead,
the actual extractable type may correspond to a subclass of the given
@extractable_type, depending on the given @id.
Moreover, depending on the given @extractable_type, the returned asset
may belong to a subclass of #GESAsset.
Finally, if the requested asset has a #GESAsset:proxy, then the proxy
that is found at the end of the chain of proxies is returned (a proxy's
proxy will take its place, and so on, unless it has no proxy).
Some asset subclasses only support asynchronous construction of its
assets, such as #GESUriClip. For such assets this method will fail, and
you should use ges_asset_request_async() instead. In the case of
#GESUriClip, you can use ges_uri_clip_asset_request_sync() if you only
want to wait for the request to finish.</doc>
<return-value transfer-ownership="full" nullable="1">
<doc xml:space="preserve">A reference to the requested
asset, or %NULL if an error occurred.</doc>
<type name="Asset" c:type="GESAsset*"/>
</return-value>
<parameters>
<parameter name="extractable_type" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset:extractable-type of the asset</doc>
<type name="GType" c:type="GType"/>
</parameter>
<parameter name="id" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve">The #GESAsset:id of the asset</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</function>
<function name="request_async" c:identifier="ges_asset_request_async">
<doc xml:space="preserve">Requests an asset with the given properties asynchronously (see
ges_asset_request()). When the asset has been initialized or fetched
from the cache, the given callback function will be called. The
asset can then be retrieved in the callback using the
ges_asset_request_finish() method on the given #GAsyncResult.
Note that the source object passed to the callback will be the
#GESAsset corresponding to the request, but it may not have loaded
correctly and therefore can not be used as is. Instead,
ges_asset_request_finish() should be used to fetch a usable asset, or
indicate that an error occurred in the asset's creation.
Note that the callback will be called in the #GMainLoop running under
the same #GMainContext that ges_init() was called in. So, if you wish
the callback to be invoked outside the default #GMainContext, you can
call g_main_context_push_thread_default() in a new thread before
calling ges_init().
Example of an asynchronous asset request:
``` c
// The request callback
static void
asset_loaded_cb (GESAsset * source, GAsyncResult * res, gpointer user_data)
{
GESAsset *asset;
GError *error = NULL;
asset = ges_asset_request_finish (res, &error);
if (asset) {
gst_print ("The file: %s is usable as a GESUriClip",
ges_asset_get_id (asset));
} else {
gst_print ("The file: %s is *not* usable as a GESUriClip because: %s",
ges_asset_get_id (source), error->message);
}
gst_object_unref (asset);
}
// The request:
ges_asset_request_async (GES_TYPE_URI_CLIP, some_uri, NULL,
(GAsyncReadyCallback) asset_loaded_cb, user_data);
```</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="extractable_type" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset:extractable-type of the asset</doc>
<type name="GType" c:type="GType"/>
</parameter>
<parameter name="id" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve">The #GESAsset:id of the asset</doc>
<type name="utf8" c:type="const gchar*"/>
</parameter>
<parameter name="cancellable" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve">An object to allow cancellation of the
asset request, or %NULL to ignore</doc>
<type name="Gio.Cancellable" c:type="GCancellable*"/>
</parameter>
<parameter name="callback" transfer-ownership="none" nullable="1" allow-none="1" scope="async" closure="4">
<doc xml:space="preserve">A function to call when the initialization is finished</doc>
<type name="Gio.AsyncReadyCallback" c:type="GAsyncReadyCallback"/>
</parameter>
<parameter name="user_data" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve">Data to be passed to @callback</doc>
<type name="gpointer" c:type="gpointer"/>
</parameter>
</parameters>
</function>
<function name="request_finish" c:identifier="ges_asset_request_finish" throws="1">
<doc xml:space="preserve">Fetches an asset requested by ges_asset_request_async(), which
finalises the request.</doc>
<return-value transfer-ownership="full">
<doc xml:space="preserve">The requested asset, or %NULL if an error
occurred.</doc>
<type name="Asset" c:type="GESAsset*"/>
</return-value>
<parameters>
<parameter name="res" transfer-ownership="none">
<doc xml:space="preserve">The task result to fetch the asset from</doc>
<type name="Gio.AsyncResult" c:type="GAsyncResult*"/>
</parameter>
</parameters>
</function>
<virtual-method name="extract" invoker="extract" throws="1">
<doc xml:space="preserve">Extracts a new #GESAsset:extractable-type object from the asset. The
#GESAsset:id of the asset may determine the properties and state of the
newly created object.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">A newly created object, or %NULL if an
error occurred.</doc>
<type name="Extractable" c:type="GESExtractable*"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset to extract an object from</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</virtual-method>
<virtual-method name="inform_proxy">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
<parameter name="proxy_id" transfer-ownership="none">
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</virtual-method>
<virtual-method name="proxied">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
<parameter name="proxy" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</parameter>
</parameters>
</virtual-method>
<virtual-method name="request_id_update">
<return-value transfer-ownership="none">
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
<parameter name="proposed_new_id" transfer-ownership="none">
<type name="utf8" c:type="gchar**"/>
</parameter>
<parameter name="error" transfer-ownership="none">
<type name="GLib.Error" c:type="GError*"/>
</parameter>
</parameters>
</virtual-method>
<virtual-method name="start_loading" throws="1">
<return-value transfer-ownership="none">
<type name="AssetLoadingReturn" c:type="GESAssetLoadingReturn"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</virtual-method>
<method name="extract" c:identifier="ges_asset_extract" throws="1">
<doc xml:space="preserve">Extracts a new #GESAsset:extractable-type object from the asset. The
#GESAsset:id of the asset may determine the properties and state of the
newly created object.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">A newly created object, or %NULL if an
error occurred.</doc>
<type name="Extractable" c:type="GESExtractable*"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset to extract an object from</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_error" c:identifier="ges_asset_get_error" version="1.8">
<doc xml:space="preserve">Retrieve the error that was set on the asset when it was loaded.</doc>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve">The error set on @asset, or
%NULL if no error occurred when @asset was loaded.</doc>
<type name="GLib.Error" c:type="GError*"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">A #GESAsset</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_extractable_type" c:identifier="ges_asset_get_extractable_type" glib:get-property="extractable-type">
<doc xml:space="preserve">Gets the #GESAsset:extractable-type of the asset.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">The extractable type of @self.</doc>
<type name="GType" c:type="GType"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_id" c:identifier="ges_asset_get_id" glib:get-property="id">
<doc xml:space="preserve">Gets the #GESAsset:id of the asset.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">The ID of @self.</doc>
<type name="utf8" c:type="const gchar*"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">A #GESAsset</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_proxy" c:identifier="ges_asset_get_proxy" glib:get-property="proxy">
<doc xml:space="preserve">Gets the default #GESAsset:proxy of the asset.</doc>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve">The default proxy of @asset.</doc>
<type name="Asset" c:type="GESAsset*"/>
</return-value>
<parameters>
<instance-parameter name="asset" transfer-ownership="none">
<doc xml:space="preserve">A #GESAsset</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_proxy_target" c:identifier="ges_asset_get_proxy_target" glib:get-property="proxy-target">
<doc xml:space="preserve">Gets the #GESAsset:proxy-target of the asset.
Note that the proxy target may have loaded with an error, so you should
call ges_asset_get_error() on the returned target.</doc>
<return-value transfer-ownership="none" nullable="1">
<doc xml:space="preserve">The asset that @proxy is a proxy
of.</doc>
<type name="Asset" c:type="GESAsset*"/>
</return-value>
<parameters>
<instance-parameter name="proxy" transfer-ownership="none">
<doc xml:space="preserve">A #GESAsset</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</method>
<method name="list_proxies" c:identifier="ges_asset_list_proxies">
<doc xml:space="preserve">Get all the proxies that the asset has. The first item of the list will
be the default #GESAsset:proxy. The second will be the proxy that is
'next in line' to be default, and so on.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">The list of proxies
that @asset has.</doc>
<type name="GLib.List" c:type="GList*">
<type name="Asset"/>
</type>
</return-value>
<parameters>
<instance-parameter name="asset" transfer-ownership="none">
<doc xml:space="preserve">A #GESAsset</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
</parameters>
</method>
<method name="set_proxy" c:identifier="ges_asset_set_proxy" glib:set-property="proxy">
<doc xml:space="preserve">Sets the #GESAsset:proxy for the asset.
If @proxy is among the existing proxies of the asset (see
ges_asset_list_proxies()) it will be moved to become the default
proxy. Otherwise, if @proxy is not %NULL, it will be added to the list
of proxies, as the new default. The previous default proxy will become
'next in line' for if the new one is removed, and so on. As such, this
will **not** actually remove the previous default proxy (use
ges_asset_unproxy() for that).
Note that an asset can only act as a proxy for one other asset.
As a special case, if @proxy is %NULL, then this method will actually
remove **all** proxies from the asset.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">%TRUE if @proxy was successfully set as the default for
@asset.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="asset" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset to proxy</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
<parameter name="proxy" transfer-ownership="none" nullable="1" allow-none="1">
<doc xml:space="preserve">A new default proxy for @asset</doc>
<type name="Asset" c:type="GESAsset*"/>
</parameter>
</parameters>
</method>
<method name="unproxy" c:identifier="ges_asset_unproxy">
<doc xml:space="preserve">Removes the proxy from the available list of proxies for the asset. If
the given proxy is the default proxy of the list, then the next proxy
in the available list (see ges_asset_list_proxies()) will become the
default. If there are no other proxies, then the asset will no longer
have a default #GESAsset:proxy.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">%TRUE if @proxy was successfully removed from @asset's proxy
list.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="asset" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset to no longer proxy with @proxy</doc>
<type name="Asset" c:type="GESAsset*"/>
</instance-parameter>
<parameter name="proxy" transfer-ownership="none">
<doc xml:space="preserve">An existing proxy of @asset</doc>
<type name="Asset" c:type="GESAsset*"/>
</parameter>
</parameters>
</method>
<property name="extractable-type" writable="1" construct-only="1" transfer-ownership="none" getter="get_extractable_type">
<doc xml:space="preserve">The #GESExtractable object type that can be extracted from the asset.</doc>
<type name="GType" c:type="GType"/>
</property>
<property name="id" writable="1" construct-only="1" transfer-ownership="none" getter="get_id" default-value="NULL">
<doc xml:space="preserve">The ID of the asset. This should be unique amongst all assets with
the same #GESAsset:extractable-type. Depending on the associated
#GESExtractable implementation, this id may convey some information
about the #GObject that should be extracted. Note that, as such, the
ID will have an expected format, and you can not choose this value
arbitrarily. By default, this will be set to the type name of the
#GESAsset:extractable-type, but you should check the documentation
of the extractable type to see whether they differ from the
default behaviour.</doc>
<type name="utf8" c:type="gchar*"/>
</property>
<property name="proxy" writable="1" transfer-ownership="none" setter="set_proxy" getter="get_proxy">
<doc xml:space="preserve">The default proxy for this asset, or %NULL if it has no proxy. A
proxy will act as a substitute for the original asset when the
original is requested (see ges_asset_request()).
Setting this property will not usually remove the existing proxy, but
will replace it as the default (see ges_asset_set_proxy()).</doc>
<type name="Asset"/>
</property>
<property name="proxy-target" transfer-ownership="none" getter="get_proxy_target">
<doc xml:space="preserve">The asset that this asset is a proxy for, or %NULL if it is not a
proxy for another asset.
Note that even if this asset is acting as a proxy for another asset,
but this asset is not the default #GESAsset:proxy, then @proxy-target
will *still* point to this other asset. So you should check the
#GESAsset:proxy property of @target-proxy before assuming it is the
current default proxy for the target.
Note that the #GObject::notify for this property is emitted after
the #GESAsset:proxy #GObject::notify for the corresponding (if any)
asset it is now the proxy of/no longer the proxy of.</doc>
<type name="Asset"/>
</property>
<field name="parent">
<type name="GObject.Object" c:type="GObject"/>
</field>
<field name="priv" readable="0" private="1">
<type name="AssetPrivate" c:type="GESAssetPrivate*"/>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</class>
<record name="AssetClass" c:type="GESAssetClass" glib:is-gtype-struct-for="Asset">
<field name="parent">
<type name="GObject.ObjectClass" c:type="GObjectClass"/>
</field>
<field name="start_loading">
<callback name="start_loading" throws="1">
<return-value transfer-ownership="none">
<type name="AssetLoadingReturn" c:type="GESAssetLoadingReturn"/>
</return-value>
<parameters>
<parameter name="self" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</parameter>
</parameters>
</callback>
</field>
<field name="extract">
<callback name="extract" throws="1">
<return-value transfer-ownership="none">
<doc xml:space="preserve">A newly created object, or %NULL if an
error occurred.</doc>
<type name="Extractable" c:type="GESExtractable*"/>
</return-value>
<parameters>
<parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">The #GESAsset to extract an object from</doc>
<type name="Asset" c:type="GESAsset*"/>
</parameter>
</parameters>
</callback>
</field>
<field name="inform_proxy">
<callback name="inform_proxy">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="self" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</parameter>
<parameter name="proxy_id" transfer-ownership="none">
<type name="utf8" c:type="const gchar*"/>
</parameter>
</parameters>
</callback>
</field>
<field name="proxied">
<callback name="proxied">
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<parameter name="self" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</parameter>
<parameter name="proxy" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</parameter>
</parameters>
</callback>
</field>
<field name="request_id_update">
<callback name="request_id_update">
<return-value transfer-ownership="none">
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<parameter name="self" transfer-ownership="none">
<type name="Asset" c:type="GESAsset*"/>
</parameter>
<parameter name="proposed_new_id" transfer-ownership="none">
<type name="utf8" c:type="gchar**"/>
</parameter>
<parameter name="error" transfer-ownership="none">
<type name="GLib.Error" c:type="GError*"/>
</parameter>
</parameters>
</callback>
</field>
<field name="_ges_reserved">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</record>
<enumeration name="AssetLoadingReturn" c:type="GESAssetLoadingReturn">
<member name="error" value="0" c:identifier="GES_ASSET_LOADING_ERROR">
<doc xml:space="preserve">Indicates that an error occurred</doc>
</member>
<member name="async" value="1" c:identifier="GES_ASSET_LOADING_ASYNC">
<doc xml:space="preserve">Indicates that the loading is being performed
asynchronously</doc>
</member>
<member name="ok" value="2" c:identifier="GES_ASSET_LOADING_OK">
<doc xml:space="preserve">Indicates that the loading is complete, without
error</doc>
</member>
</enumeration>
<record name="AssetPrivate" c:type="GESAssetPrivate" disguised="1" opaque="1"/>
<class name="AudioSource" c:symbol-prefix="audio_source" c:type="GESAudioSource" parent="Source" abstract="1" glib:type-name="GESAudioSource" glib:get-type="ges_audio_source_get_type" glib:type-struct="AudioSourceClass">
<doc xml:space="preserve">## Children Properties
You can use the following children properties through the
#ges_track_element_set_child_property and alike set of methods:
- #gdouble `volume`: volume factor, 1.0=100%.
- #gboolean `mute`: mute channel.</doc>
<implements name="Extractable"/>
<implements name="MetaContainer"/>
<field name="parent" readable="0" private="1">
<type name="Source" c:type="GESSource"/>
</field>
<field name="priv" readable="0" private="1">
<type name="AudioSourcePrivate" c:type="GESAudioSourcePrivate*"/>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</class>
<record name="AudioSourceClass" c:type="GESAudioSourceClass" glib:is-gtype-struct-for="AudioSource">
<field name="parent_class" readable="0" private="1">
<type name="SourceClass" c:type="GESSourceClass"/>
</field>
<field name="create_source" introspectable="0">
<callback name="create_source" introspectable="0">
<return-value>
<type name="Gst.Element" c:type="GstElement*"/>
</return-value>
<parameters>
<parameter name="object" transfer-ownership="none">
<type name="TrackElement" c:type="GESTrackElement*"/>
</parameter>
</parameters>
</callback>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</record>
<record name="AudioSourcePrivate" c:type="GESAudioSourcePrivate" disguised="1" opaque="1"/>
<class name="AudioTestSource" c:symbol-prefix="audio_test_source" c:type="GESAudioTestSource" parent="AudioSource" glib:type-name="GESAudioTestSource" glib:get-type="ges_audio_test_source_get_type" glib:type-struct="AudioTestSourceClass">
<doc xml:space="preserve">Outputs a test audio stream using audiotestsrc. The default property values
output silence. Useful for testing pipelines, or to fill gaps in an audio
track.</doc>
<implements name="Extractable"/>
<implements name="MetaContainer"/>
<method name="get_freq" c:identifier="ges_audio_test_source_get_freq">
<doc xml:space="preserve">Get the current frequency of @self.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">The current frequency of @self.</doc>
<type name="gdouble" c:type="double"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">a #GESAudioTestSource</doc>
<type name="AudioTestSource" c:type="GESAudioTestSource*"/>
</instance-parameter>
</parameters>
</method>
<method name="get_volume" c:identifier="ges_audio_test_source_get_volume">
<doc xml:space="preserve">Get the current volume of @self.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">The current volume of @self</doc>
<type name="gdouble" c:type="double"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">a #GESAudioTestSource</doc>
<type name="AudioTestSource" c:type="GESAudioTestSource*"/>
</instance-parameter>
</parameters>
</method>
<method name="set_freq" c:identifier="ges_audio_test_source_set_freq">
<doc xml:space="preserve">Lets you set the frequency applied on the track element</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">a #GESAudioTestSource</doc>
<type name="AudioTestSource" c:type="GESAudioTestSource*"/>
</instance-parameter>
<parameter name="freq" transfer-ownership="none">
<doc xml:space="preserve">The frequency you want to apply on @self</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
</parameters>
</method>
<method name="set_volume" c:identifier="ges_audio_test_source_set_volume">
<doc xml:space="preserve">Sets the volume of the test audio signal.</doc>
<return-value transfer-ownership="none">
<type name="none" c:type="void"/>
</return-value>
<parameters>
<instance-parameter name="self" transfer-ownership="none">
<doc xml:space="preserve">a #GESAudioTestSource</doc>
<type name="AudioTestSource" c:type="GESAudioTestSource*"/>
</instance-parameter>
<parameter name="volume" transfer-ownership="none">
<doc xml:space="preserve">The volume you want to apply on @self</doc>
<type name="gdouble" c:type="gdouble"/>
</parameter>
</parameters>
</method>
<field name="parent">
<type name="AudioSource" c:type="GESAudioSource"/>
</field>
<field name="priv" readable="0" private="1">
<type name="AudioTestSourcePrivate" c:type="GESAudioTestSourcePrivate*"/>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</class>
<record name="AudioTestSourceClass" c:type="GESAudioTestSourceClass" glib:is-gtype-struct-for="AudioTestSource">
<field name="parent_class" readable="0" private="1">
<type name="AudioSourceClass" c:type="GESAudioSourceClass"/>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</record>
<record name="AudioTestSourcePrivate" c:type="GESAudioTestSourcePrivate" disguised="1" opaque="1"/>
<class name="AudioTrack" c:symbol-prefix="audio_track" c:type="GESAudioTrack" parent="Track" glib:type-name="GESAudioTrack" glib:get-type="ges_audio_track_get_type" glib:type-struct="AudioTrackClass">
<doc xml:space="preserve">A #GESAudioTrack is a default audio #GESTrack, with a
#GES_TRACK_TYPE_AUDIO #GESTrack:track-type and "audio/x-raw(ANY)"
#GESTrack:caps.
By default, an audio track will have its #GESTrack:restriction-caps
set to "audio/x-raw" with the following properties:
- format: "S32LE"
- channels: 2
- rate: 44100
- layout: "interleaved"
These fields are needed for negotiation purposes, but you can change
their values if you wish. It is advised that you do so using
ges_track_update_restriction_caps() with new values for the fields you
wish to change, and any additional fields you may want to add. Unlike
using ges_track_set_restriction_caps(), this will ensure that these
default fields will at least have some value set.</doc>
<implements name="MetaContainer"/>
<implements name="Gst.ChildProxy"/>
<constructor name="new" c:identifier="ges_audio_track_new">
<doc xml:space="preserve">Creates a new audio track, with a #GES_TRACK_TYPE_AUDIO
#GESTrack:track-type, "audio/x-raw(ANY)" #GESTrack:caps, and
"audio/x-raw" #GESTrack:restriction-caps with the properties:
- format: "S32LE"
- channels: 2
- rate: 44100
- layout: "interleaved"
You should use ges_track_update_restriction_caps() if you wish to
modify these fields, or add additional ones.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">The newly created audio track.</doc>
<type name="AudioTrack" c:type="GESAudioTrack*"/>
</return-value>
</constructor>
<field name="parent_instance">
<type name="Track" c:type="GESTrack"/>
</field>
<field name="priv" readable="0" private="1">
<type name="AudioTrackPrivate" c:type="GESAudioTrackPrivate*"/>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</class>
<record name="AudioTrackClass" c:type="GESAudioTrackClass" glib:is-gtype-struct-for="AudioTrack">
<field name="parent_class">
<type name="TrackClass" c:type="GESTrackClass"/>
</field>
<field name="_ges_reserved">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</record>
<record name="AudioTrackPrivate" c:type="GESAudioTrackPrivate" disguised="1" opaque="1"/>
<class name="AudioTransition" c:symbol-prefix="audio_transition" c:type="GESAudioTransition" parent="Transition" glib:type-name="GESAudioTransition" glib:get-type="ges_audio_transition_get_type" glib:type-struct="AudioTransitionClass">
<implements name="Extractable"/>
<implements name="MetaContainer"/>
<constructor name="new" c:identifier="ges_audio_transition_new" deprecated="1" deprecated-version="1.18">
<doc xml:space="preserve">Creates a new #GESAudioTransition.</doc>
<doc-deprecated xml:space="preserve">This should never be called by applications as this will
be created by clips.</doc-deprecated>
<return-value transfer-ownership="none">
<doc xml:space="preserve">The newly created #GESAudioTransition.</doc>
<type name="AudioTransition" c:type="GESAudioTransition*"/>
</return-value>
</constructor>
<field name="parent">
<type name="Transition" c:type="GESTransition"/>
</field>
<field name="priv" readable="0" private="1">
<type name="AudioTransitionPrivate" c:type="GESAudioTransitionPrivate*"/>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</class>
<record name="AudioTransitionClass" c:type="GESAudioTransitionClass" glib:is-gtype-struct-for="AudioTransition">
<field name="parent_class">
<type name="TransitionClass" c:type="GESTransitionClass"/>
</field>
<field name="_ges_reserved">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</record>
<record name="AudioTransitionPrivate" c:type="GESAudioTransitionPrivate" disguised="1" opaque="1"/>
<class name="AudioUriSource" c:symbol-prefix="audio_uri_source" c:type="GESAudioUriSource" parent="AudioSource" glib:type-name="GESAudioUriSource" glib:get-type="ges_audio_uri_source_get_type" glib:type-struct="AudioUriSourceClass">
<doc xml:space="preserve">### Children Properties
{{ libs/GESVideoUriSource-children-props.md }}</doc>
<implements name="Extractable"/>
<implements name="MetaContainer"/>
<property name="uri" writable="1" construct-only="1" transfer-ownership="none" default-value="NULL">
<doc xml:space="preserve">The location of the file/resource to use.</doc>
<type name="utf8" c:type="gchar*"/>
</property>
<field name="parent" readable="0" private="1">
<type name="AudioSource" c:type="GESAudioSource"/>
</field>
<field name="uri" readable="0" private="1">
<type name="utf8" c:type="gchar*"/>
</field>
<field name="priv" readable="0" private="1">
<type name="UriSource" c:type="GESUriSource*"/>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</class>
<record name="AudioUriSourceClass" c:type="GESAudioUriSourceClass" glib:is-gtype-struct-for="AudioUriSource">
<field name="parent_class" readable="0" private="1">
<type name="AudioSourceClass" c:type="GESAudioSourceClass"/>
</field>
<field name="_ges_reserved" readable="0" private="1">
<array zero-terminated="0" fixed-size="4">
<type name="gpointer" c:type="gpointer"/>
</array>
</field>
</record>
<record name="AudioUriSourcePrivate" c:type="GESAudioUriSourcePrivate" disguised="1" opaque="1"/>
<class name="BaseEffect" c:symbol-prefix="base_effect" c:type="GESBaseEffect" parent="Operation" abstract="1" glib:type-name="GESBaseEffect" glib:get-type="ges_base_effect_get_type" glib:type-struct="BaseEffectClass">
<doc xml:space="preserve">A #GESBaseEffect is some operation that applies an effect to the data
it receives.
## Time Effects
Some operations will change the timing of the stream data they receive
in some way. In particular, the #GstElement that they wrap could alter
the times of the segment they receive in a #GST_EVENT_SEGMENT event,
or the times of a seek they receive in a #GST_EVENT_SEEK event. Such
operations would be considered time effects since they translate the
times they receive on their source to different times at their sink,
and vis versa. This introduces two sets of time coordinates for the
event: (internal) sink coordinates and (internal) source coordinates,
where segment times are translated from the sink coordinates to the
source coordinates, and seek times are translated from the source
coordinates to the sink coordinates.
If you use such an effect in GES, you will need to inform GES of the
properties that control the timing with
ges_base_effect_register_time_property(), and the effect's timing
behaviour using ges_base_effect_set_time_translation_funcs().
Note that a time effect should not have its
#GESTrackElement:has-internal-source set to %TRUE.
In addition, note that GES only *fully* supports time effects whose
mapping from the source to sink coordinates (those applied to seeks)
obeys:
+ Maps the time `0` to `0`. So initial time-shifting effects are
excluded.
+ Is monotonically increasing. So reversing effects, and effects that
jump backwards in the stream are excluded.
+ Can handle a reasonable #GstClockTime, relative to the project. So
this would exclude a time effect with an extremely large speed-up
that would cause the converted #GstClockTime seeks to overflow.
+ Is 'continuously reversible'. This essentially means that for every
time in the sink coordinates, we can, to 'good enough' accuracy,
calculate the corresponding time in the source coordinates. Moreover,
this should correspond to how segment times are translated from
sink to source.
+ Only depends on the registered time properties, rather than the
state of the #GstElement or the data it receives. This would exclude,
say, an effect that would speedup if there is more red in the image
it receives.
Note that a constant-rate-change effect that is not extremely fast or
slow would satisfy these conditions. For such effects, you may wish to
use ges_effect_class_register_rate_property().</doc>
<implements name="Extractable"/>
<implements name="MetaContainer"/>
<method name="is_time_effect" c:identifier="ges_base_effect_is_time_effect" version="1.18">
<doc xml:space="preserve">Get whether the effect is considered a time effect or not. An effect
with registered time properties or set translation functions is
considered a time effect.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">%TRUE if @effect is considered a time effect.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="effect" transfer-ownership="none">
<doc xml:space="preserve">A #GESBaseEffect</doc>
<type name="BaseEffect" c:type="GESBaseEffect*"/>
</instance-parameter>
</parameters>
</method>
<method name="register_time_property" c:identifier="ges_base_effect_register_time_property" version="1.18">
<doc xml:space="preserve">Register a child property of the effect as a property that, when set,
can change the timing of its input data. The child property should be
specified as in ges_timeline_element_lookup_child().
You should also set the corresponding time translation using
ges_base_effect_set_time_translation_funcs().
Note that @effect must not be part of a clip, nor can it have
#GESTrackElement:has-internal-source set to %TRUE.</doc>
<return-value transfer-ownership="none">
<doc xml:space="preserve">%TRUE if the child property was found and newly registered.</doc>
<type name="gboolean" c:type="gboolean"/>
</return-value>
<parameters>
<instance-parameter name="effect" transfer-ownership="none">