impossiblefxv1 1.13.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/HOWTO-PUBLISH.txt +15 -0
  2. package/README.md +21 -0
  3. package/apis/edit-2016-06-02.json +15 -0
  4. package/apis/metadata.json +31 -0
  5. package/apis/project-2016-06-01.json +56 -0
  6. package/apis/project-2016-06-02.json +767 -0
  7. package/apis/project-2023-03-07.json +767 -0
  8. package/apis/project-2023-12-11.json +767 -0
  9. package/apis/render-2016-06-02.json +764 -0
  10. package/apis/render-2023-12-11.json +764 -0
  11. package/dist/fx-sdk-latest.js +22494 -0
  12. package/dist-tools/build-browser.js +109 -0
  13. package/dist-tools/build-sdk.sh +6 -0
  14. package/dist-tools/es6-promise.js +957 -0
  15. package/dist-tools/foo.sh +4 -0
  16. package/dist-tools/publish.sh +6 -0
  17. package/lib/browser.js +58 -0
  18. package/lib/config.js +125 -0
  19. package/lib/core.js +15 -0
  20. package/lib/credentials/chain.js +54 -0
  21. package/lib/credentials/environment.js +69 -0
  22. package/lib/credentials/inifile.js +57 -0
  23. package/lib/credentials/token.js +38 -0
  24. package/lib/credentials.js +53 -0
  25. package/lib/encoding.js +36 -0
  26. package/lib/endpoint.js +18 -0
  27. package/lib/fx.js +50 -0
  28. package/lib/http/node.js +69 -0
  29. package/lib/http/xhr.js +12 -0
  30. package/lib/http.js +57 -0
  31. package/lib/proto.js +38 -0
  32. package/lib/protocol.js +56 -0
  33. package/lib/request.js +252 -0
  34. package/lib/response.js +24 -0
  35. package/lib/service.js +182 -0
  36. package/lib/services/batch.js +5 -0
  37. package/lib/services/edit.js +9 -0
  38. package/lib/services/project.js +102 -0
  39. package/lib/services/render.js +63 -0
  40. package/lib/services/story.js +5 -0
  41. package/lib/services.js +30 -0
  42. package/lib/util.js +126 -0
  43. package/package.json +37 -0
  44. package/package.json.save +36 -0
  45. package/proto/Movie.proto +4081 -0
  46. package/proto/fx.proto +43 -0
  47. package/templates/config.html +91 -0
  48. package/templates/examples.html +69 -0
  49. package/templates/getstarted.html +30 -0
  50. package/templates/index.html +6 -0
  51. package/templates/makeexample.py +57 -0
  52. package/templates/makerequests.html +210 -0
  53. package/templates/operation.html +36 -0
  54. package/templates/service.html +9 -0
  55. package/templates/services.html +19 -0
  56. package/templates/version.html +12 -0
  57. package/templates/versions.html +10 -0
  58. package/templates/workservice.html +68 -0
  59. package/test/circles.mp4 +0 -0
  60. package/test/config.js +131 -0
  61. package/test/index.html +35 -0
  62. package/test/mocha.opts +4 -0
  63. package/test/project.js +148 -0
  64. package/test/render.js +136 -0
  65. package/test/retry.js +53 -0
  66. package/test/sdktests.js +62 -0
  67. package/test/sdl.js +125 -0
  68. package/test/servertest/simple.js +20 -0
@@ -0,0 +1,4081 @@
1
+ //
2
+ // Copyright 2010-2015 Impossible Software GmbH. All rights reserved.
3
+ //
4
+ // The contents and use of this file are subject to our Terms Of Use.
5
+ // You may not use this file except in compliance with the Terms of Use.
6
+ //
7
+ // You can obtain a copy of the terms at http://www.impossiblesoftware.com/meta/tos.html
8
+ // See the Terms Of Use for the specific language governing permissions
9
+ // and limitations under the terms.
10
+
11
+ syntax = "proto2";
12
+
13
+ package JetSDL.Proto;
14
+
15
+ option java_outer_classname = "FXProto";
16
+
17
+
18
+
19
+ /** A fraction defined by numerator divided by denumerator */
20
+ message Fractional {
21
+ /** numerator */
22
+ optional uint64 num = 1
23
+ [default=30];
24
+
25
+ /** denumerator */
26
+ optional uint64 den = 2
27
+ [default=1];
28
+ }
29
+
30
+
31
+ /**
32
+ StreamParams define settings for the rendered video. There are separate settings for the
33
+ audio and video parts of the stream. Additional parameters define the behvior for
34
+ streaming delivery.
35
+ */
36
+ message StreamParams{
37
+ /** Parameters for the video stream */
38
+ required VideoParams vparams = 1;
39
+
40
+ /** Parameters for the video stream */
41
+ optional AudioParams aparams = 2;
42
+
43
+ /** deprecated. Streaming behaviour */
44
+ optional bool nosleep = 3
45
+ [default = true];
46
+
47
+ /** Number of passes for multi-pass encoding */
48
+ optional int32 pass = 5;
49
+
50
+ /** Filename for statistics during multi-pass encoding */
51
+ optional string statfile = 4;
52
+
53
+ /** duration in seconds the client is expected to buffer before playback starts (Streaming only)
54
+ only needed for realtime streams */
55
+ optional double client_prebuffer = 7
56
+ [default = -1];
57
+
58
+ /** duration beeing processed 'at once' by the server
59
+ only needed for realtime streams */
60
+ optional double encoding_quantum = 8
61
+ [default = -1];
62
+
63
+ /** Minimum number of seconds in client buffer (Streaming only) */
64
+ optional double min_client_buffer = 6
65
+ [default = 2.0];
66
+
67
+ // Does this work?
68
+ optional Color default_image_color = 9;
69
+ }
70
+
71
+ /**
72
+ * Settings for the video stream
73
+ */
74
+ message VideoParams {
75
+
76
+ /** Method of rate control */
77
+ enum VideoRateControl {
78
+ /** Control bitrate: video stream should not exceed given bitrate */
79
+ VRC_BITRATE = 0;
80
+
81
+ /** Control quantization */
82
+ VRC_QUANTIZER = 1;
83
+
84
+ /** Control quality: Keep constant quality regardless of bitrate */
85
+ VRC_RATEFACTOR = 2;
86
+ }
87
+
88
+ /**
89
+ Allow encoder to withhold frames for smaller files, better quality.
90
+ <br>Only relevant for streaming render modes
91
+ */
92
+ enum EncoderDelayReq {
93
+ /** Do not keep reference frames, emit frames as fast as possible */
94
+ DELAY_REALTIME = 1;
95
+
96
+ /** Keeo reference frames, even if it slows down streaming */
97
+ DELAY_SMALL = 2;
98
+ }
99
+
100
+ enum ColorSpace{
101
+ COLORSPACE_UNSPECIFIED = 0;
102
+ COLORSPACE_AUTO = 1;
103
+ COLORSPACE_BT709 = 2;
104
+ COLORSPACE_BT470BG = 3;
105
+ COLORSPACE_SMTPE170M= 4;
106
+ }
107
+
108
+ /** Width of the rendered video */
109
+ required uint32 width = 1;
110
+
111
+ /** Height of the rendered video */
112
+ required uint32 height = 2;
113
+
114
+ /** Video codec type */
115
+ optional Codec videocodec = 5
116
+ [default = VIDEO_X264];
117
+
118
+ /** Frame rate of video (as fraction, e.g. 25/1, 30000/1001) */
119
+ optional Fractional videoframerate = 6;
120
+
121
+ /** Video bitrate in kilobits per second */
122
+ optional uint32 videobitrate = 7
123
+ [default =2000];
124
+
125
+ // Number of bframes (H.264 + X.264 only)
126
+ optional int32 videobframes =8
127
+ [default = 0];
128
+
129
+ /** Number of frames in a picture group */
130
+ optional int32 videogopsize = 9
131
+ [default = 30];
132
+
133
+ /** Quantization parameter (15..50) */
134
+ optional int32 videoqp = 10
135
+ [default = 16];
136
+
137
+ /** Method of rate control */
138
+ optional VideoRateControl videorc = 11
139
+ [default = VRC_BITRATE];
140
+
141
+
142
+ /** Controls for encoder speed / quality tradeoff - range 0.0 - 100.0
143
+ * guidelines to start with:<dl>
144
+ * <dt> 0.0</dt><dd>pointlessly bad quality, extremely fast</dd>
145
+ * <dt>10.0</dt><dd>dont care about quality, make it fast</dd>
146
+ * <dt>20.0</dt><dd>general purpose 'fast' preset</dd>
147
+ * <dt>50.0</dt><dd>'medium' speed/quality tradeoff, recommended encoder default</dd>
148
+ * <dt>80.0</dt><dd>sensible 'high quality preset'</dd>
149
+ * <dt>90.0</dt><dd>don't care about speed</dd>
150
+ * </dl>
151
+ * don't expect changes with every small adjustment - encoder might have a coarse granularity interpreting this
152
+ */
153
+ optional double videocpueffort = 12
154
+ [default = 10.0];
155
+
156
+ /** @internal */
157
+ optional EncoderDelayReq videodelayrequirement = 13
158
+ [default = DELAY_SMALL];
159
+
160
+ /** Transparency (GIF only) */
161
+ optional bool videotransparency = 15
162
+ [default = false];
163
+
164
+ /** Minimum number of video frames after which forced keyframes will be inserted - forced keyframes split scenes into sub segments used in HLS and MPEG DASH streaming and parallel rendering*/
165
+ optional int32 videominimumforcedkeyframeinterval = 16
166
+ [default = 45];
167
+
168
+ optional ColorSpace videocolorspace = 17
169
+ [default = COLORSPACE_UNSPECIFIED];
170
+
171
+ /** @internal */
172
+ repeated KeyValuePair videocodecextraparams = 14;
173
+
174
+
175
+ }
176
+
177
+ /**
178
+ * Audio Settings for rendered video
179
+ */
180
+ message AudioParams{
181
+ /** Audio codec */
182
+ optional Codec audiocodec= 10
183
+ [default = AUDIO_NONE];
184
+
185
+ /** Audio bitrate in kilobits per second */
186
+ optional uint32 audioabr = 11
187
+ [default =80000];
188
+
189
+ /** Number of audio samples per second */
190
+ optional uint32 audiosamplerate =12
191
+ [default =44100];
192
+
193
+ /** Number of channels (1=mono, 2=stereo) */
194
+ optional uint32 audiochannels = 14
195
+ [default = 2];
196
+
197
+ /** Number of samples per audio frame */
198
+ optional uint32 audioframe_size = 13
199
+ [default = 1024];
200
+ }
201
+
202
+ /**
203
+ * Determines, what happens when requesting frames past the end of a given source.
204
+ * Not all values can be used in all situations.
205
+ */
206
+ enum EndBehaviour{
207
+ /** Repeat last frame */
208
+ repeatlast = 0;
209
+
210
+ /** Start again */
211
+ loop = 1;
212
+
213
+ /** An empty frame */
214
+ emptyframe = -2;
215
+
216
+ /** not used */
217
+ fullframe = -3;
218
+
219
+ /** Throw an error and stop rendering */
220
+ fail = -4;
221
+ }
222
+
223
+
224
+ /**
225
+ Movie is the main message of the SDL.
226
+ It consists of Scenes and an Audio object for the whole movie.
227
+ It also specifies Video and Audio parameters.
228
+ */
229
+ message Movie {
230
+
231
+ /** Audio and Video parameters */
232
+ required StreamParams params = 15;
233
+
234
+ /** An array of Scenes that describes the movie content */
235
+ repeated Scene scenes =3;
236
+
237
+ /** An Audio object that handles Audio during the whole movie. Additional audio tracks are mixed on top of this Audio track */
238
+ optional Audio audio=4;
239
+
240
+ /** Parameter for an endless looping stream (will be ignored for RenderMovie/RenderImagesequence) */
241
+ optional bool loop=14
242
+ [default = false];
243
+
244
+ /** Initialise all variables in the movie at startup (sacrificing "time to first byte") */
245
+ optional bool initatstart = 16
246
+ [default = false];
247
+
248
+ /** Metadata for accounting/logging/etc. */
249
+ repeated Metadata metadata = 17;
250
+
251
+ /** Variable information for movie audio tracks */
252
+ optional VariableInformation audiovarinfo = 18;
253
+
254
+ enum UnexpectedFrameSizeSolution{
255
+ UFS_SCALE = 0;
256
+ UFS_LETTERBOX = 1;
257
+ UFS_COPY = 2;
258
+ UFS_NONE = 3;
259
+ }
260
+ optional UnexpectedFrameSizeSolution ufssolution = 19
261
+ [default=UFS_SCALE];
262
+
263
+ optional int32 posterframe = 20
264
+ [default=0];
265
+
266
+ repeated Scene compositions = 21;
267
+
268
+ /** Flag to change video error behavior, if set to true errors in the video part of a movie will lead to renderfailure instead of gracefull skip/handle */
269
+ optional bool videofailfast = 22
270
+ [default=false];
271
+ /** Flag to enable/disable packet caching, default is true */
272
+ optional bool usepacketcache = 23
273
+ [default=true];
274
+
275
+
276
+ /** scene definitions that can be referenced by their referenceid */
277
+ repeated Scene scenedefinitions = 24;
278
+
279
+ optional string comment = 2047;
280
+
281
+ extensions 1000 to 1999;
282
+ }
283
+
284
+ /**
285
+ A Scene message describes one part (i.e. a sequence of frames) of a movie
286
+ A scene consist of a number of VisualTracks layered on top of each other and a scene specific Audio object
287
+ If a Scene has no dynamic content it is static and can be preencoded
288
+ */
289
+ message Scene{
290
+
291
+ enum Type{
292
+ /** A scene providing visual content through VisualTracks in <code>tracks</code> and audio content through Audio and AudioTracks from <code>audio</code>*/
293
+ normal = 0;
294
+ /** A scene defering to the SceneView <code>sceneview</code> for visual and audio content*/
295
+ scenebased = 1;
296
+ /** A scene referencing another scene contained in the movies scene reference section */
297
+ reference = 2;
298
+ }
299
+ /** The type of scene*/
300
+ optional Type type = 1
301
+ [ default = normal];
302
+
303
+ /**
304
+ Number of frames this scene has, the length of the whole movie is determined by adding up all frames of all scenes
305
+ If left out or <0 the scene tries to determine it's length by checking the content of it's tracks for videos
306
+ */
307
+ optional int32 numframes=2;
308
+
309
+ /** Number of frames overlapping in edit situations e.g. crossfade transitions.
310
+ Adjusts numframes, usually should be negative e.g. -25
311
+ */
312
+ optional int32 editoverlap=16;
313
+
314
+ /** Turns off the preencoding of this scene, when set to false; mainly used for testing purposes */
315
+ optional bool static=3
316
+ [default = true];
317
+
318
+ /**
319
+ deprecated: the base content should now be introduced through the first Visualtrack for more flexibility
320
+ */
321
+ optional ImageProvider content=4;
322
+
323
+ /** The visual content of this scene as a sequence of layers*/
324
+ repeated VisualTrack tracks=5;
325
+
326
+ /** The scene specific Audio */
327
+ optional Audio audio=6;
328
+
329
+ /** @deprecated A subtitle object to allow optimization through preencoding for subtitle overlay frames */
330
+ optional Subtitles subtitles=7;
331
+
332
+ /** keys and possible values to allow semi static preencoding */
333
+ optional VariableInformation varinfo = 8;
334
+
335
+ /** Do not throw error if this scene has no content */
336
+ optional bool canbeempty = 9
337
+ [default=false];
338
+
339
+ /** Name or names for this scene */
340
+ repeated string name = 10;
341
+
342
+ /** Poster frame */
343
+ optional int32 posterframe = 11
344
+ [default=0];
345
+
346
+ /** @deprecated Use the audio to determine length of scene. Deprecated use <var>numframesfrommode</var>, instead */
347
+ optional bool useaudioforlength = 12
348
+ [default=false];
349
+
350
+ enum NumframesFromMode{
351
+ numframesfrommode_video = 0;
352
+ numframesfrommode_audio = 1;
353
+ numframesfrommode_max = 2;
354
+ numframesfrommode_min = 3;
355
+ }
356
+ /** When numframes is not set, how to determine the length of scene. Supercedes <var>useaudioforlength</var>, if both are set */
357
+ optional NumframesFromMode numframesfrommode = 17
358
+ [default = numframesfrommode_video];
359
+
360
+ /** An optional ID */
361
+ optional string id = 13;
362
+
363
+ /** The variable that dynamically enables or disables this scene */
364
+ optional StringVariable enablevariable = 14;
365
+
366
+ /** Reverse enablesvariables logic */
367
+ optional bool invertenable = 15
368
+ [default=false];
369
+
370
+ /** @comment [scenebased] The sceneview to use for this scenes content */
371
+ optional SceneView sceneview = 18;
372
+
373
+ /** @comment [reference] The id by which to identify the scene referenced from the scenedefinitions */
374
+ optional string referenceid = 19;
375
+
376
+ message VarMapping{
377
+ enum Type{
378
+ string = 1;
379
+ points = 2;
380
+ }
381
+ optional Type type = 1
382
+ [default=string];
383
+ optional string key = 4;
384
+
385
+ optional StringVariable stringvariable = 2;
386
+ optional PointsVariable pointsvariable = 3;
387
+ }
388
+ /** @comment [reference] Mapping that changes the variables accessible in the refernenced scene, a variable with key <var>key</var> and the same value as either <var>stringvariable</var> or <var>pointsvariable</var> is added to the variable dictionary for the referenced scene. If <var>key</var> was already in that dictionary the value is replaced. **/
389
+ repeated VarMapping variablemapping = 20;
390
+
391
+ /** Comment */
392
+ optional string comment = 2047;
393
+
394
+ extensions 1000 to 1999;
395
+ }
396
+
397
+ /**
398
+ A SceneViewVariant message is a lookup map that assigns scenes to key values. When requesting movies that contain SceneViews the query parameter determines which scene to select.
399
+ */
400
+ message SceneViewVariant{
401
+ /** SceneView's name (used to select this variant via query parameter */
402
+ required string key = 2;
403
+
404
+ /** Array of scenes to play when this variant is active */
405
+ repeated Scene scenes = 3;
406
+
407
+ extensions 1000 to 1999;
408
+ }
409
+
410
+ /**
411
+ A SceneView is a container for either SceneViewVariants or EmbeddedScenes
412
+ */
413
+ message SceneView{
414
+
415
+ /** Type */
416
+ enum Type{
417
+ /** Scenes are define inline in the scenes array */
418
+ embedded = 0;
419
+
420
+ /** @deprecated file based scene definitions */
421
+ file = 1;
422
+
423
+ /**
424
+ This scene consists of multiple variants defined in the <code>variants</code> field. Which variant to play is determined through the value of the <code>variable</code>
425
+ */
426
+ variant = 2;
427
+ }
428
+
429
+ /** Type of SceneView */
430
+ optional Type type = 1
431
+ [default = embedded];
432
+
433
+ /** The embedded scenes */
434
+ repeated Scene scenes = 2;
435
+
436
+ /** What to do if SceneView has fewer frames than required by container */
437
+ optional EndBehaviour endbehaviour = 3
438
+ [default = repeatlast];
439
+
440
+ /** */
441
+ optional FileLocation source = 4;
442
+
443
+ /** All possible variants for this scene */
444
+ repeated SceneViewVariant variants = 19;
445
+
446
+ /** Variable to use to select active variant */
447
+ optional StringVariable variable = 20;
448
+
449
+ /** */
450
+ optional int32 width = 21;
451
+
452
+ /** */
453
+ optional int32 height = 22;
454
+
455
+ // for file type sceneviews this has to hold the keys used for variables in the scenes to not interfere with preencoding
456
+ repeated string keys = 18;
457
+
458
+ //This is used to hold the filelocationprefix to use it to complete loaded SDL files
459
+ //you don't need to touch this
460
+ optional string filelocationprefixholder = 17
461
+ [default = ""];
462
+
463
+ /** experimental, used to convert framerate of inner scenes, use on own risk */
464
+ optional Fractional videoframerate = 23;
465
+
466
+ extensions 1000 to 1999;
467
+ }
468
+
469
+ /**
470
+ * An ImageProvider object provides an image given a particular frame number
471
+ * There are basically two types:
472
+ * a SingleImage provides the same image every time and
473
+ * an Imagesequence that provides different images for different frame numbers (e.g. a video, other SDLs)
474
+ *
475
+ */
476
+ message ImageProvider{
477
+
478
+ /** Type of ImageProvider */
479
+ enum Type{
480
+ // SingleImage types
481
+
482
+ /** One single frame image */
483
+ stillimage=0;
484
+
485
+ /**
486
+ An single-frame image generated from an array of VisualTracks.
487
+ Use to create multi-layered images, transformed or filtered images
488
+ */
489
+ manipulatedimage=2;
490
+
491
+ /** An empty single-frame image with specified size and color */
492
+ emptyimage=4;
493
+
494
+ /** An image loaded from a URL over http */
495
+ http=9;
496
+
497
+ /** An image loaded from a URL using the jetcom protocol */
498
+ jetcom=10;
499
+
500
+ /** A rendered text */
501
+ textsimple=7;
502
+
503
+ /** A rendered gradient */
504
+ gradient=25;
505
+
506
+ // Imagesequence types
507
+
508
+ /** A sequence of images loaded from disk */
509
+ imagesequence=1;
510
+
511
+ /** A sequence of 32bit floating point images loaded from disk */
512
+ image32fsequence=3;
513
+
514
+ /** A sequence generated by rendering Text between to (moving) lines */
515
+ textcurved=5;
516
+
517
+ /** A sequence generated by rendering Text into a moving Quad */
518
+ textquad=6;
519
+
520
+ /** A sequence generated by rendering Text (inserting linebreaks) into a moving Quad */
521
+ textmultiline=8;
522
+
523
+ /** @deprecated A sequence decoded form a video */
524
+ decoder=11;
525
+
526
+ /** A video as zipped image sequence or video file, with scale aware disk cache */
527
+ video = 12;
528
+
529
+ /** http live video stream */
530
+ livevideo = 22;
531
+
532
+ /** Image sequences created by rendering a Scene or SceneVariant object */
533
+ scenebased = 13;
534
+
535
+ /** Internal. Will be moved to a SDL extension module in the future */
536
+ comicbook = 14;
537
+
538
+ /** Internal. */
539
+ custom = 15;
540
+
541
+ /** An image provider that can act as a matte for a compose operation */
542
+ masksource = 17;
543
+
544
+ /** Draw (and animate) a pie chart. */
545
+ piechart = 16;
546
+
547
+ /** Draw (and animate) a bar chart */
548
+ barchart = 18;
549
+
550
+ /** Draw (and animate) a bar chart made from images */
551
+ imagebarchart = 19;
552
+
553
+ /** Draw (and animate) a line chart */
554
+ linechart = 21;
555
+
556
+ /** Draw (and animate) a bezier line */
557
+ bezier = 20;
558
+
559
+ /** Draw and fill (and animate) a bezier-based shape */
560
+ path = 24;
561
+
562
+ /** Image data as data url or SVG+XML from a variable*/
563
+ string = 26;
564
+
565
+ /** Arrange multiple child ImageProviders according to a layout */
566
+ layout = 27;
567
+
568
+ /** @undocumented draw on canvas using javascript (obsolet) */
569
+ jscanvas = 23;
570
+ }
571
+
572
+
573
+ /** The type of this ImageProvieder */
574
+ required Type type=1;
575
+
576
+ /**
577
+ * @comment [video, decoder, imagesequence, image32fsequence] The number of frames that are rendered
578
+ Only needed if you want to return less frames than scene length (Masking only)
579
+ */
580
+ optional int32 numframes = 21 [default = -1];
581
+
582
+ /**
583
+ * @comment [stillImage, url, imagesequence, image32fsequence] Image source
584
+ * @comment [decoder, video] Video source
585
+ * @comment [textsimple, textagg, textquad, textmultiline] Font source
586
+ */
587
+ optional FileLocation source=2;
588
+
589
+ /** @comment [manipulatedimage] An array of VisualTracks for compositing the image */
590
+ repeated VisualTrack tracks=3;
591
+
592
+ /**
593
+ * @comment [emptyimage, textsimple, textagg, textquad, textmultiline] Width of the provided image,
594
+ used if it can not be inferred from other parameters
595
+ */
596
+ optional int32 width=4;
597
+
598
+ /**
599
+ * @comment [emptyimage, textsimple, textagg, textquad, textmultiline] Height of the provided image,
600
+ used if it can not be inferred from other parameters
601
+ */
602
+ optional int32 height=5;
603
+
604
+ /**
605
+ * @comment [textsimple, textagg, textquad, textmultiline] Text Color
606
+ * @comment [emptyimage] Background Color
607
+ */
608
+ optional Color color=6;
609
+
610
+ /**
611
+ * @comment [textquad, textmultiline] Tracking data for text path
612
+ */
613
+ optional TrackData trackdata= 7;
614
+
615
+ /**
616
+ * @comment [textcurved] Description of the tracking data for the two curves
617
+ */
618
+ optional TrackData trackdatatop= 8;
619
+
620
+ /**
621
+ * @comment [textcurved] Description of the tracking data for the two curves
622
+ */
623
+ optional TrackData trackdatabottom= 9;
624
+
625
+ /** @comment [textsimple, textagg, textquad, textmultiline] Font size (deprecated) */
626
+ optional int32 fontsize = 12 [default = 40]; //deprecated use fontsize_d instead
627
+
628
+ /** @comment [textsimple, textagg, textquad, textmultiline] Font size */
629
+ optional double fontsize_d = 35 [default = 40];
630
+
631
+ /** @comment [textsimple, textagg, textquad, textmultiline] Animation function for font size */
632
+ optional Function fontsize_function = 76;
633
+
634
+ /** @comment [textagg, textquad, textquad, textmultiline] Base length of text */
635
+ optional int32 baselength = 13 [default = 80];
636
+
637
+ /** @comment [textagg, textquad, textquad, textmultiline] Base height of text */
638
+ optional int32 baseheight = 14 [default = 12];
639
+
640
+ /** @comment [textagg, textquad, textquad, textmultiline] Number of step for font smoothing */
641
+ optional int32 numinterpoints = 15 [default = 50];
642
+
643
+ /** @comment [textmultiline] Average number of characters per line */
644
+ optional int32 linechars = 17 [default = 50];
645
+
646
+ /** @comment [textsimple, textagg, textquad, textmultiline] Enable horizotal text centering */
647
+ optional bool center = 16 [default = false];
648
+
649
+ /** @comment [textsimple, textagg, textquad, textmultiline] The text to render */
650
+ optional StringVariable text = 18;
651
+
652
+ /** @comment [textagg, textquad, textmultiline] Scale factor for tracking data */
653
+ repeated double scale = 19;
654
+
655
+ /** @deprecated renamed to 'contentoffset' to be consistent with equivalent members in AudioTrack*/
656
+ optional int32 videooffset = 80 [default = 0];
657
+
658
+ /** @deprecated renamed to 'contentoffsetvariable' to be consistent with equivalent members in AudioTrack*/
659
+ optional StringVariable videooffsetvariable = 81;
660
+
661
+ /** offset for the content of this to adjust the start frame */
662
+ optional int32 contentoffset = 22 [default = 0];
663
+
664
+ /** additional offset for the content of this to adjust the start frame */
665
+ optional StringVariable contentoffsetvariable = 71;
666
+
667
+ /** Number of frames overlapping in edit situations e.g. crossfade transitions.
668
+ * Adjusts contentoffset, usually should be negative e.g. -25
669
+ */
670
+ optional int32 editoverlap=82;
671
+
672
+ /** @undocumented */
673
+ optional bool usecachedir =23 [default = true];
674
+
675
+ /** @undocumented */
676
+ optional string cachedir = 24 [default = "cache"];
677
+
678
+ /** @undocumented */
679
+ optional string writeextension=30 [default = ".tif"];
680
+
681
+ /** Allow upscaling of images and videos to make them fit the container */
682
+ optional bool upscale =28 [default = false];
683
+
684
+ /** Allow downscaling of images and videos to make them fit the container */
685
+ optional bool downscale =29 [default = true];
686
+
687
+ /** @undocumented */
688
+ optional string scale_ar_hint = 36[default = "w"];
689
+
690
+ /** Horizontal Alignment options for textsimple */
691
+ enum TextAlignment{
692
+ flushleft = 0;
693
+ centered = 1;
694
+ flushright = 2;
695
+ }
696
+
697
+ /** @comment [textsimple] Horizontal text alignment */
698
+ optional TextAlignment xalignment = 25 [default = flushleft];
699
+
700
+ /** Vertical lignment options for textsimple */
701
+ enum TextPosition{
702
+ top = 0;
703
+ middle = 1;
704
+ bottom = 2;
705
+ }
706
+
707
+ /** @comment [textsimple] Vertical text alignment */
708
+ optional TextPosition yalignment = 27 [default = bottom];
709
+
710
+ /** @comment [http, video] Hint for the extension of http images if no extension can be found in the URL */
711
+ optional string http_extension_hint = 26;
712
+
713
+ /** Switch to skip alpha premultiplication on load (e.g. for masks) */
714
+ optional bool loadpremulalpha = 31
715
+ [default=true];
716
+
717
+ /** @comment [video, http] Specifies if http images are downloaded only once per movie rendering(false) or every time(true) (only enable when http content changes frequently) */
718
+ optional bool httpalwaysload = 32
719
+ [default=false];
720
+
721
+ /** @comment [scenebased] Sceneview for <code>scenebased</code> ImageProvider */
722
+ optional SceneView sceneview = 33;
723
+
724
+ /** @deprecated */
725
+ optional int32 fontspacing_deprecated = 34
726
+ [default = 0];
727
+
728
+ /** @comment [textsimple] Extra horizintal spacing between glyphs */
729
+ optional double fontspacing = 45
730
+ [default = 0];
731
+
732
+ /** @comment [textsimple] Extra line spacing between lines of text */
733
+ optional double linespacing = 55
734
+ [default = 0];
735
+
736
+ /** @undocumented */
737
+ optional double comicbookframetime = 37
738
+ [default = 1.0];
739
+
740
+ /** @undocumented */
741
+ optional ImageProvider comicsource = 38;
742
+
743
+ /** @comment [textsimple] Right text border */
744
+ optional int32 textborder_right = 39
745
+ [default=0];
746
+
747
+ /** @comment [textsimple] Left text border */
748
+ optional int32 textborder_left = 40
749
+ [default=0];
750
+
751
+ /** @comment [textsimple] Top text border */
752
+ optional int32 textborder_top= 41
753
+ [default=0];
754
+
755
+ /** @comment [textsimple] Bottom text border */
756
+ optional int32 textborder_bottom = 42
757
+ [default=0];
758
+
759
+ /** @deprecated @comment [textsimple] Allow text to be resized if it doesn't fit the container */
760
+ optional bool overflowresize = 43
761
+ [default=true];
762
+
763
+ /** @comment [textsimple] Avoid rendering small fontsizes by rendering with higher font size and scaling down the image afterwards */
764
+ optional bool textsmallfontsizeavoidance = 106
765
+ [default=false];
766
+
767
+ /** @undocumented */
768
+ optional string custom_identifier = 44;
769
+
770
+ /** @comment [piechart] */
771
+ optional PieChartDescription piechartdescription = 46;
772
+
773
+ /** @comment [barchart] */
774
+ optional BarChartDescription barchartdescription = 50;
775
+
776
+ /** @comment [imagebarchart] */
777
+ optional ImageBarChartDescription imagebarchartdescription = 51;
778
+
779
+ /** @comment [linechart] */
780
+ optional LineChartDescription linechartdescription = 54;
781
+
782
+ /** @comment [bezier] */
783
+ optional BezierDescription bezierdescription = 53;
784
+
785
+ /** @undocumented */
786
+ optional bool treatasstaticforcaching = 47
787
+ [default=false];
788
+
789
+ /** Secondary ImageProvider for certain types (mask, augments) */
790
+ optional ImageProvider innerprovider = 48;
791
+
792
+ /** color channel for masking */
793
+ optional int32 maskchannel = 49
794
+ [default =0];
795
+
796
+ /** Image texture fill styles */
797
+ enum TextureStyle{
798
+ texturestyle_line=0;
799
+ texturestyle_full=1;
800
+ texturestyle_tiled=2;
801
+ texturestyle_tiledline=3;
802
+ texturestyle_segments=4;
803
+ texturestyle_tiledsegments=5;
804
+ }
805
+
806
+ enum TextGlyphColorMode{
807
+ /** default mode, use color or texture configured */
808
+ textglyphcolormode_default=0;
809
+ /** sue font embedded color information, used for bitmap fonts or embedded SVG, etc. */
810
+ textglyphcolormode_fontembedded=1;
811
+ }
812
+
813
+ /** Text outlines are extra borders drawn aroun/along the glyphs of text */
814
+ message TextOutline{
815
+ enum Type{
816
+ simple = 0;
817
+ rounded = 1;
818
+ }
819
+
820
+ /** Text outline type */
821
+ optional Type type = 1
822
+ [default = simple];
823
+
824
+ /** Thickness of outline */
825
+ optional double size = 2
826
+ [default = 1];
827
+
828
+ /** Color to draw outline with */
829
+ optional Color color = 3;
830
+
831
+ /** Image to use for texture filling */
832
+ optional ImageProvider texture = 4;
833
+
834
+ /** Fill style for image texture */
835
+ optional TextureStyle texturestyle = 5
836
+ [default=texturestyle_line];
837
+ }
838
+
839
+ /** Text augments are extra (usually small) images rendered at, above, above glyphs of text strings. */
840
+ message TextAugment{
841
+
842
+ /** Image to render */
843
+ optional ImageProvider content = 2;
844
+
845
+ /** Start position given in percent of string length */
846
+ optional double anchor_character = 3 //in percent of string (rounded)
847
+ [default=0];
848
+
849
+ /** Horizontal offset */
850
+ optional double x = 4 //in pixels (rounded)
851
+ [default=0];
852
+
853
+ /** Vertical offset */
854
+ optional double y = 5 //in pixels (rounded)
855
+ [default=0];
856
+
857
+ /** Scaling factor for image */
858
+ optional double size = 6 // in percent of line height
859
+ [default=1.0];
860
+ }
861
+
862
+ /** @comment [textsimple] Array of TextOutline objects */
863
+ repeated TextOutline textoutlines = 56;
864
+
865
+ /** @comment [textsimple] Image provider for texture inside of rendered text*/
866
+ optional ImageProvider texttexture = 57;
867
+
868
+ /** @comment [textsimple] Texture style */
869
+ optional TextureStyle texttexturestyle = 68
870
+ [default=texturestyle_line];
871
+
872
+ /** @comment [textsimple] Color mode for text, used to switch between specified color/texture or font embedded */
873
+ optional TextGlyphColorMode textglyphcolormode = 98
874
+ [default=textglyphcolormode_default];
875
+
876
+ /** @comment [textsimple] Animate text like written on a typewriter */
877
+ optional Function texttypewritereffect = 58;
878
+
879
+ /** @comment [textsimple] typewriter animation start */
880
+ optional Function texttypewriterfadestart = 61;
881
+
882
+ /** @comment [textsimple] typewriter animation end */
883
+ optional Function texttypewriterfadeend = 62;
884
+
885
+ /** @comment [textsimple] Animation function for character spacing */
886
+ optional Function fontspacing_function = 63;
887
+
888
+ /** @comment [textsimple] Animation function for line spacing */
889
+ optional Function linespacing_function = 64;
890
+
891
+ /** @comment [textsimple] Character stretching in x-axis */
892
+ optional double textstretchx = 99
893
+ [default=1.0];
894
+ /** @comment [textsimple] Animation function for character stretching in x-axis */
895
+ optional Function textstretchx_function = 100;
896
+ /** @comment [textsimple] Character stretching in y-axis */
897
+ optional double textstretchy = 101
898
+ [default=1.0];
899
+ /** @comment [textsimple] Animation function for character stretching in y-axis */
900
+ optional Function textstretchy_function = 102;
901
+
902
+ /** @comment [textsimple] Fineness of text outlines */
903
+ optional double textoutlinesubpixellevel = 59
904
+ [default = 1];
905
+
906
+ /** @comment [textsimple] Array of TextAugment objects */
907
+ repeated TextAugment textaugmentations = 60;
908
+
909
+ /* When text overflows a given container, the OverflowBehaviour defines what to do (also see TextImageSizeBehaviour*/
910
+ enum TextOverflowBehaviour{
911
+ /** Do nothing, let text overflow the box */
912
+ textoverflowbehaviour_none=0;
913
+
914
+ /* Condense text horzontally */
915
+ textoverflowbehaviour_scale_x=1;
916
+
917
+ /* Condense text horizontally, scale font size if necessary */
918
+ textoverflowbehaviour_fs_y_scale_x=2;
919
+
920
+ /* Scale font size if necessary */
921
+ textoverflowbehaviour_fs=3;
922
+
923
+ /* Use one or more other 'text'-ImageProvider as reference for resizing */
924
+ textoverflowbehaviour_ref=4;
925
+
926
+ /* Insert linebreaks horizontally if necessary */
927
+ textoverflowbehaviour_wordwrap_x=5;
928
+
929
+ /* Insert linebreaks horizontally, scale font size on vertical overflow */
930
+ textoverflowbehaviour_wordwrap_x_fs_y=6;
931
+ }
932
+
933
+ /** @comment [textsimple] What to do if text does not fit into given container */
934
+ optional TextOverflowBehaviour textoverflowbehaviour = 70
935
+ [default=textoverflowbehaviour_fs];
936
+
937
+ /** @comment [textsimple] References to look to for fontsize and scale, when using 'textoverflowbehaviour_ref'*/
938
+ repeated ImageProvider textoverflowreferences = 92;
939
+
940
+ /* how the size for the text image is determined*/
941
+ enum TextImageSizeBehaviour{
942
+ /* use the specified size from width/height parameter or an implicit size from the movie context*/
943
+ textimagesizebehaviour_specified = 0;
944
+ /* determine the width of the image from the text, and the height implicitely from the movie context or the height parameter*/
945
+ textimagesizebehaviour_auto_width = 1;
946
+ /* determine the height of the image from the text, and the width implicitely from the movie context or the height parameter*/
947
+ textimagesizebehaviour_auto_height = 2;
948
+ /* determine both width and height of the image from the text*/
949
+ textimagesizebehaviour_auto = 3;
950
+ }
951
+
952
+ /** @comment [textsimple] How to determine the size of the text image, default is a fixed specified size */
953
+ optional TextImageSizeBehaviour textimagesizebehaviour = 108
954
+ [default=textimagesizebehaviour_specified];
955
+
956
+
957
+ /** User comment */
958
+ optional string comment = 2047;
959
+
960
+ //used for backwards compatibility in old iv tool projects, leave alone
961
+ /** @undocumented */
962
+ optional bool usevideodecodernormalisation = 52
963
+ [default = true];
964
+
965
+ /** @undocumented */
966
+ optional bool uselocalhttpproxy = 65
967
+ [default = false];
968
+
969
+ /** Behaviour when more images are requested from this image provider than available */
970
+ optional EndBehaviour endbehaviour = 66
971
+ [default = repeatlast];
972
+
973
+ /** @undocumented */
974
+ message JSCanvasDescription{
975
+ enum Mode{
976
+ jscanvas_script = 0;
977
+ jscanvas_location = 1;
978
+ }
979
+ optional Mode mode = 2
980
+ [default=jscanvas_script];
981
+ optional StringVariable script = 3;
982
+ optional FileLocation location = 4;
983
+ repeated KeyValuePair defaultparams = 5;
984
+ //keys for user provided parameters sent to the canvas
985
+ repeated string keys = 6;
986
+ //Function to adjust the completion given to the javascript code, don't use unless you know what you are doing
987
+ optional Function completionfunction =7;
988
+
989
+ message FontDescription{
990
+ required string alias = 2;
991
+ required FileLocation source = 3;
992
+ }
993
+ repeated FontDescription fonts = 8;
994
+ }
995
+
996
+ /** @undocumented */
997
+ optional JSCanvasDescription jscanvasdescription = 67;
998
+
999
+ /** Reduce image to 8 bit per channel */
1000
+ optional bool ensure8bit = 69
1001
+ [default = false];
1002
+
1003
+ /* Styles for text background, underline and strike-through */
1004
+ message TextDecoration{
1005
+ optional Color color = 2;
1006
+ optional ImageProvider texture = 3;
1007
+ optional TextureStyle texturestyle = 4;
1008
+ optional double paddingleft = 5;
1009
+ optional double paddingright = 6;
1010
+ optional double paddingtop = 7;
1011
+ optional double paddingbottom = 8;
1012
+ }
1013
+
1014
+ /** Definition of a text context overriding one or more of the settings for the whole text or contexts up in the context tree.*/
1015
+ message TextContext{
1016
+ /** identifier for the text context, should contain alphanumeric characters only*/
1017
+ optional string name = 2;
1018
+ /** Font file, overrides source*/
1019
+ optional FileLocation font = 3;
1020
+ /** Advanced configuration options for making http requests to retrieve the font */
1021
+ optional HTTPDownloadRequestInformation fonthttpconfig = 14;
1022
+ /** Font size */
1023
+ optional double fontsize = 4;
1024
+ /** Animation function for font size */
1025
+ optional Function fontsize_function = 9;
1026
+
1027
+ optional Color color = 5;
1028
+ optional ImageProvider texture = 6;
1029
+ optional TextureStyle texturestyle = 7
1030
+ [default=texturestyle_line];
1031
+ /** Color mode for text, used to switch between specified color/texture or font embedded */
1032
+ optional TextGlyphColorMode glyphcolormode = 15
1033
+ [default=textglyphcolormode_default];
1034
+ optional double fontspacing =8;
1035
+
1036
+ /** Character streching in x-axis*/
1037
+ optional double stretchx = 16
1038
+ [default=1.0];
1039
+ /** Animation function for character streching in x-axis*/
1040
+ optional Function stretchx_function = 17;
1041
+ /** Character streching in y-axis*/
1042
+ optional double stretchy = 18
1043
+ [default=1.0];
1044
+ /** Animation function for character streching in y-axis*/
1045
+ optional Function stretchy_function = 19;
1046
+
1047
+ optional TextDecoration strikethrough = 10;
1048
+ optional TextDecoration underline = 11;
1049
+ optional TextDecoration background = 12;
1050
+ optional string script = 13;
1051
+ repeated TextAnimator textanimators = 20;
1052
+ }
1053
+
1054
+ /* @comment [textsimple] Array of TextContext */
1055
+ repeated TextContext textcontexts = 72;
1056
+
1057
+ /* @comment [textsimple] Flag to indicate text contains markup referencing textcontexts */
1058
+ optional bool usetextcontextmarkup = 73
1059
+ [default = false];
1060
+
1061
+ /* @comment [textsimple] Styles for strike-through */
1062
+ optional TextDecoration strikethrough = 77;
1063
+
1064
+ /* @comment [textsimple] Styles for underline */
1065
+ optional TextDecoration underline = 78;
1066
+
1067
+ /* @comment [textsimple] Styles for background */
1068
+ optional TextDecoration background = 79;
1069
+
1070
+ /** @comment [video] Detect and apply device orientation/rortation meta data */
1071
+ optional bool rotatevideobymetadata = 74
1072
+ [default = true];
1073
+ /* @undocumented enables prefetching and caching on disk of large video resources to avoid large range request seek times*/
1074
+ optional bool allowhttpprefetch = 83
1075
+ [default = true];
1076
+
1077
+ /** @comment [video, http, textsimple] Advanced configuration options for making http requests */
1078
+ optional HTTPDownloadRequestInformation httpconfig = 97;
1079
+
1080
+ /* An animated cubic bezier path */
1081
+ message PathDescription{
1082
+
1083
+ enum PathType{
1084
+ type_straight = 1;
1085
+ type_bezier = 2;
1086
+ }
1087
+ enum DrawMethod{
1088
+ draw_fill = 1;
1089
+ draw_stroke = 2;
1090
+ draw_stroke_fill = 3;
1091
+ }
1092
+ optional PathType pathtype =1
1093
+ [default=type_straight];
1094
+ optional TrackData points = 2;
1095
+ optional Color color = 3;
1096
+ optional Color fillcolor = 8;
1097
+ optional double linewidth = 4
1098
+ [default=1.0];
1099
+
1100
+ optional LineCapStyle capstyle =5
1101
+ [default=cap_butt];
1102
+ optional bool closepath = 6
1103
+ [default=true];
1104
+ optional DrawMethod drawmethod = 7
1105
+ [default=draw_fill];
1106
+ }
1107
+
1108
+ /** @comment [path] Definition for an animated path of cubic bezier curves */
1109
+ optional PathDescription pathdescription = 75;
1110
+
1111
+ /** @comment [textsimple] Modifier for the height of new lines in percent*/
1112
+ optional double textnewlineheightmodifier = 84
1113
+ [default = 0.0];
1114
+
1115
+ /** @comment [textsimple] Script of the text to be rendered. Default (unset) autodetects on a per character basis.
1116
+ Valid values are ISO 15924 abbreviations and long script names from the Unicode Character Database.
1117
+ E.g. the usual western alphabet characters would be 'Latn' or 'Latin', Arabic would be 'Arab' or 'Arabic'*/
1118
+ optional string textscript = 86;
1119
+
1120
+ enum TextWritingMode{
1121
+ textwritingmode_lrtb = 0;
1122
+ textwritingmode_lrbt = 1;
1123
+ textwritingmode_tblr = 2;
1124
+ textwritingmode_tbrl = 3;
1125
+ }
1126
+ /** @comment [textsimple] Text writing mode option for horizontal/vertical text. Modes like rl* and bt* are expected to be handled through BiDi instead*/
1127
+ optional TextWritingMode textwritingmode = 87
1128
+ [default = textwritingmode_lrtb];
1129
+
1130
+ /** Definition of special ruby context. Used to define the three components of a ruby definition 'container', 'base', 'text' and 'reserve' markup for lines that should reserve space for rubies*/
1131
+ message TextRuby{
1132
+ enum Type{
1133
+ /** Container type, needs 0 or 1 base and 0..n text components and nothing else inside*/
1134
+ type_container = 0;
1135
+ /** Base type, needs to be the first component in its container*/
1136
+ type_base = 1;
1137
+ /** Text type*/
1138
+ type_text = 2;
1139
+ /** Reserve type*/
1140
+ type_reserve = 3;
1141
+ }
1142
+ /** Type of ruby*/
1143
+ required Type ruby = 1;
1144
+ /** Name of the special ruby context */
1145
+ required string name = 2;
1146
+
1147
+ enum Align{
1148
+ /** Align at the start of the ruby container (left justified/top justified) */
1149
+ align_start = 0;
1150
+ /** Align at the center of the ruby container */
1151
+ align_center = 1;
1152
+ /** Align at the end of the ruby container (right justified/bottom justified) */
1153
+ align_end = 2;
1154
+ }
1155
+ enum Position{
1156
+ /** Position before the base */
1157
+ position_before = 0;
1158
+ /** Position after the base */
1159
+ position_after = 1;
1160
+ /** Position before the first line and after every other line */
1161
+ position_outside = 2;
1162
+ }
1163
+ enum Reserve{
1164
+ /** Reserve space before and after the line(s)*/
1165
+ reserve_both = 0;
1166
+ /** Reserve space before the line(s)*/
1167
+ reserve_before = 1;
1168
+ /** Reserve space after the line(s)*/
1169
+ reserve_after = 2;
1170
+ /** For multiple lines reserve space before the first line, and after every other line, for one line reserve space before and after the line*/
1171
+ reserve_outside = 3;
1172
+ }
1173
+
1174
+ /** @comment [type_container] Alignment mode of the ruby base and ruby text (whichever is longer) */
1175
+ optional Align rubyalign = 3
1176
+ [default = align_center];
1177
+
1178
+ /** @comment [type_text] Position of the ruby text */
1179
+ optional Position rubyposition = 4
1180
+ [default = position_outside];
1181
+
1182
+ /** @comment [type_reserve] Position of the ruby reserved space */
1183
+ optional Reserve rubyreserve = 5
1184
+ [default = reserve_outside];
1185
+
1186
+ /** @comment [type_text, type_reserve] Size modifier of the ruby text (or potential ruby text for reserve) in relation to base*/
1187
+ optional double relativesize = 6
1188
+ [default = 0.5];
1189
+
1190
+ /** @comment Additional context definition for the ruby component*/
1191
+ optional TextContext context = 7;
1192
+ }
1193
+ /** @comment [textsimple] List of specialized text contexts used for ruby support, ruby specific options are based on the TTML2 standard. Needs 'usetextcontextmarkup' to be true to have an effect. */
1194
+ repeated TextRuby textrubies = 88;
1195
+
1196
+ /** Definition of a special text combine context. Used to group characters that should be rendered horizontally together in vertical text runs. Has no special effect in horizontal text.*/
1197
+ message TextCombine{
1198
+ /** Name of the special ruby context */
1199
+ required string name = 2;
1200
+ /** @comment Outer fontspacing*/
1201
+ optional double fontspacing = 3;
1202
+ /** @comment Additional context definition for the text combine component*/
1203
+ optional TextContext context = 4;
1204
+ }
1205
+ /** @comment [textsimple] List of specialized text contexts used for ruby support, ruby specific options are based on the TTML2 standard. Needs 'usetextcontextmarkup' to be true to have an effect. */
1206
+ repeated TextCombine textcombines = 89;
1207
+
1208
+ enum TextCharacterPositionMode{
1209
+ /** Use the bounding box of the individual character*/
1210
+ charposition_charbased = 1;
1211
+ /** Use the extent of the individual character in writing direction, but use font based maxima in non-writing direction. I.e. this makes the height consistent for horizontal text even when the text changes*/
1212
+ charposition_fontbased = 2;
1213
+ }
1214
+
1215
+ /** @comment [textsimple] Changes how character positions (i.a. used tor 'textposition'-TrackData) are computed */
1216
+ optional TextCharacterPositionMode textcharpositionmode = 91
1217
+ [default = charposition_charbased];
1218
+
1219
+ /** @comment set a limit to the number of frames determined dynamically from content */
1220
+ optional int32 maxcontentframes = 90;
1221
+
1222
+ message GradientDescription{
1223
+ enum Type{
1224
+ /** A linear gradient */
1225
+ gradient_linear = 1;
1226
+ /** A radial gradient */
1227
+ gradient_radial = 2;
1228
+ /** A conic gradient */
1229
+ gradient_conic = 3;
1230
+ }
1231
+ /** The type of gradient*/
1232
+ optional Type type = 1
1233
+ [default = gradient_linear];
1234
+ /** Specifies if the gradient should repeat */
1235
+ optional bool repeating = 2
1236
+ [default = false];
1237
+
1238
+ /** @comment [gradient_linear, gradient_conic] Angle in degrees, for the linear gradient it specifies rotation of the gradient, for the conic gradient it specifies the start of the gradient */
1239
+ optional double angle = 3
1240
+ [default = 0.0];
1241
+
1242
+ enum Shape{
1243
+
1244
+ shape_ellipse = 1;
1245
+ shape_circle = 2;
1246
+ }
1247
+ enum RadialSize{
1248
+ /** Circle/ellipse goes through the farthest corner from the middle*/
1249
+ radialsize_farthest_corner = 1;
1250
+ /** Circle/ellipse touches the farthest side(s) from the middle*/
1251
+ radialsize_farthest_side = 2;
1252
+ /** Circle/ellipse goes through the closest corner from the middle*/
1253
+ radialsize_closest_corner = 3;
1254
+ /** Circle/ellipse touches the closest side(s) from the middle*/
1255
+ radialsize_closest_side = 4;
1256
+ /** Circle/ellipse sizes is specified by radiusx (and radiusy)*/
1257
+ radialsize_absolute = 5;
1258
+ }
1259
+ /** @comment [gradient_radial] shape of the radial gradient*/
1260
+ optional Shape shape = 4
1261
+ [default = shape_ellipse];
1262
+ /** @comment [gradient_radial] specifies how to determine the size of the radial gradient */
1263
+ optional RadialSize radialsize = 5
1264
+ [default = radialsize_farthest_corner];
1265
+ /** @comment [gradient_radial] specifies an absolute radius when radialsize is radialsize_absolute */
1266
+ optional double radiusx = 6;
1267
+ /** @comment [gradient_radial] specifie a second absolute radius for ellipse when radialsize is radialsize_absolute */
1268
+ optional double radiusy = 7;
1269
+
1270
+ /** @comment [gradient_radial, gradient_conic] the middle point of the gradient */
1271
+ optional Point middle = 8;
1272
+
1273
+ message ColorStop{
1274
+ enum Type{
1275
+ /** A color stop, needs color set */
1276
+ stop = 1;
1277
+ /** A transition hint, needs positionset, ignores its color, needs to be followed and preceded by a normal color stop */
1278
+ hint = 2;
1279
+ }
1280
+ /** Type of the color stop, if it is a real stop or only a transition hint */
1281
+ optional Type type = 1
1282
+ [default = stop];
1283
+ enum PositionType{
1284
+ /** Position is relative, usually in [0.0 - 1.0] */
1285
+ position_relative = 1;
1286
+ /** Position is in pixel, pixel based color stops are not allowed for gradient_conic */
1287
+ position_pixel = 2;
1288
+ }
1289
+ /** Position type of the color stop, pixel position color stops are not allowed for gradient_conic */
1290
+ optional PositionType positiontype = 2
1291
+ [default = position_relative];
1292
+ /** The position of the color stop */
1293
+ optional double position = 3;
1294
+ /** The color of the color stop */
1295
+ optional Color color = 4;
1296
+ }
1297
+ /** The color stops of the gradient, need at least one color stop */
1298
+ repeated ColorStop colorstops = 9;
1299
+
1300
+ }
1301
+ /** @comment [gradient] Description for the gradient to render*/
1302
+ optional GradientDescription gradientdescription = 93;
1303
+ /** @comment [gradient] Defines the interpolation color space between gradient color stops*/
1304
+ optional Color.ColorInterpolationMode gradientinterpolationmode = 94
1305
+ [default = color_interpolation_rgb];
1306
+ enum GradientDescriptionType{
1307
+ /** Use the gradient description specified via 'gradientdescription' parameter*/
1308
+ gradientdesctype_embedded = 1;
1309
+ /** Parse the string specified via 'gradientdescriptionvariable' parameter*/
1310
+ gradientdesctype_string = 2;
1311
+ }
1312
+ /** @comment [gradient] Where to get the gradient description*/
1313
+ optional GradientDescriptionType gradientdescriptiontype = 95
1314
+ [default = gradientdesctype_embedded];
1315
+ /** @comment [gradient] Variable that can be used to specify the gradient as a string (in css)*/
1316
+ optional StringVariable gradientdescriptionvariable = 96;
1317
+
1318
+ /** @comment [string] Variable that holds image data either as RFC2397 data URL or SVG XML document */
1319
+ optional StringVariable imagedata = 103;
1320
+
1321
+ message TextAnimator{
1322
+ message Selector{
1323
+ enum BasedOnType{
1324
+ BASEDON_CHARS = 1;
1325
+ BASEDON_CHARSNOSPACES = 2;
1326
+ BASEDON_WORDS = 3;
1327
+ BASEDON_LINES = 4;
1328
+ }
1329
+ /** Based on which unit the animation values are computed. Can be used to animate all characters individually or all in the same word or line at the same time.*/
1330
+ optional BasedOnType basedon = 3
1331
+ [default=BASEDON_CHARS];
1332
+
1333
+ enum ShapeType{
1334
+ /** Transform from start to end with the edges being partially affected based on smoothness*/
1335
+ SHAPE_SQUARE = 1;
1336
+ /** Transform from start to end with the end being fully transformed, the start being not transformed and units inbetween being interpolated linearly*/
1337
+ SHAPE_RAMPUP = 2;
1338
+ /** Transform from start to end with the start being fully transformed, the end being not transformed and units inbetween being interpolated linearly*/
1339
+ SHAPE_RAMPDOWN = 3;
1340
+ /** Transform from start to end with the start being not transformed, the end being not transformed, the halfway point being fully transformed and units inbetween being interpolated linearly*/
1341
+ SHAPE_RAMPBOTH = 4;
1342
+ /** Transform from start to end with the start being not transformed, the end being not transformed, the halfway point being fully transformed and units inbetween being interpolated on a scaled half circle*/
1343
+ SHAPE_ROUND = 5;
1344
+ /** Transform from start to end with the start being not transformed, the end being not transformed, the halfway point being fully transformed and units inbetween being interpolated eased*/
1345
+ SHAPE_SMOOTH = 6;
1346
+ }
1347
+ /** Shape of the Selector, determines which characters are fully/partially animated*/
1348
+ optional ShapeType shape = 4;
1349
+
1350
+ /** Smoothness of the edge of SHAPE_SQUARE, should be between 0.0 and 1.0 */
1351
+ optional double squaresmoothness = 13
1352
+ [default=1.0];
1353
+ /** The amount the animated property is affected by the animation*/
1354
+ optional double amount = 5
1355
+ [default=1.0];
1356
+ /** Function to modify the amount the animated property is animated by over time*/
1357
+ optional Function amountfunction = 6;
1358
+
1359
+ /** Start of the selected range (in percent)*/
1360
+ optional double start=7
1361
+ [default=0.0];
1362
+ /** End of the selected range (in percent)*/
1363
+ optional double end=8
1364
+ [default=1.0];
1365
+ /** Offset to start and end of the selected range (in percent)*/
1366
+ optional double offset=9
1367
+ [default=0.0];
1368
+
1369
+ /** Function to animate start of the selected range */
1370
+ optional Function startfunction=10;
1371
+ /** Function to animate end of the selected range */
1372
+ optional Function endfunction=11;
1373
+ /** Function to animate offset of the selected range */
1374
+ optional Function offsetfunction=12;
1375
+
1376
+ enum RangeValueType{
1377
+ RANGEVALUE_PERCENT = 1;
1378
+ RANGEVALUE_UNITINDEX = 2;
1379
+ }
1380
+ /** How the start, end and offset values will be interpreted */
1381
+ optional RangeValueType rangevaluetype = 14
1382
+ [default=RANGEVALUE_PERCENT];
1383
+
1384
+ optional double easehigh = 15
1385
+ [default=0.0];
1386
+ optional double easelow = 16
1387
+ [default=0.0];
1388
+
1389
+ }
1390
+ repeated Selector selectors = 2;
1391
+
1392
+ enum AnchorPointType {
1393
+ ANCHORPOINT_CHARS = 1;
1394
+ ANCHORPOINT_WORDS = 2;
1395
+ ANCHORPOINT_LINES = 3;
1396
+ ANCHORPOINT_ALL = 4;
1397
+ }
1398
+ /** on what type of grouping the anchor point is based on */
1399
+ optional AnchorPointType anchorpointtype = 18
1400
+ [default=ANCHORPOINT_CHARS];
1401
+ /** offset to the anchor point relative to the anchor point grouping (1.0 is 100% of the size of the group)*/
1402
+ optional Point anchorpointalignment = 19;
1403
+
1404
+ enum PropertyType{
1405
+ PROPERTY_SIMPLE = 1;
1406
+ PROPERTY_MULTIVALUE = 2;
1407
+ PROPERTY_3DVALUE = 3;
1408
+ }
1409
+ /** Mode of animating properties (rotate, scale, translate, etc.) PROPERTY_MULTIVALUE can have differing values over time (anchortrackdata, etc.)*/
1410
+ optional PropertyType propertytype = 7
1411
+ [default=PROPERTY_SIMPLE];
1412
+
1413
+ /**Properties used with propertytype PROPERTY_SIMPLE*/
1414
+
1415
+ optional Point anchor = 3;
1416
+ optional Point scale = 4;
1417
+ optional float rotate = 5;
1418
+ optional Point translate = 6;
1419
+ optional Point skew = 14;
1420
+ optional double opacity = 8
1421
+ [default=1.0];
1422
+
1423
+ /**Properties used with propertytype PROPERTY_MULTIVALUE*/
1424
+
1425
+ optional TrackData anchortrackdata = 9;
1426
+ optional TrackData scaletrackdata = 10;
1427
+ optional TrackData rotatetrackdata = 11;
1428
+ optional TrackData translatetrackdata = 12;
1429
+ optional TrackData skewtrackdata = 15;
1430
+ optional Function opacityfunction = 13;
1431
+
1432
+ optional Pos3d anchor3d = 20;
1433
+ optional Pos3d scale3d = 21;
1434
+ optional Pos3d rotate3d = 22;
1435
+ optional Pos3d translate3d = 23;
1436
+ optional Pos3d skew3d = 24;
1437
+ optional double focus3d = 25;
1438
+
1439
+
1440
+ /** Color to which the color of the text is interpolated to*/
1441
+ optional Color color = 16;
1442
+ optional Color.ColorInterpolationMode colorinterpolation = 17
1443
+ [default=color_interpolation_rgb];
1444
+
1445
+
1446
+
1447
+
1448
+ }
1449
+
1450
+ repeated TextAnimator textanimators = 104;
1451
+
1452
+ /** @comment [textsimple] change the region where the text is constrained to for purposes of overflowresize considerations from the default (size of image - borders)*/
1453
+ optional ROI textroi = 105;
1454
+
1455
+ /* A description for a grid layout */
1456
+ message LayoutDescription{
1457
+
1458
+ /* Specification for a track (column or row) of the grid */
1459
+ message Track{
1460
+ enum Type{
1461
+ /* determine size from content of grid items */
1462
+ auto = 1;
1463
+ /* size is value in pixels */
1464
+ pixel = 2;
1465
+ /* size as a fraction of total size of the grid (100% is 1.0)*/
1466
+ percent = 3;
1467
+ /* size is value in flex units, flex units (fr) represent size normalized to the sum of all flex units of columns/rows, if sum is greater than 1.0, or 1.0 if smaller than 1.0. */
1468
+ flex = 4;
1469
+ }
1470
+ /** type of the tracks size */
1471
+ optional Type type = 1
1472
+ [default = pixel];
1473
+ /** @comment [pixel, percent, flex] the size in a unit specified by type */
1474
+ optional double value = 2;
1475
+ }
1476
+ /** A list of Tracks defining the explicit rows of the grid */
1477
+ repeated Track rows = 2;
1478
+ /** A list of Tracks defining the explicit columns of the grid */
1479
+ repeated Track columns = 3;
1480
+ /** A default Track specification for implicit rows of the grid */
1481
+ optional Track rowdefault = 5;
1482
+ /** A default Track specification for implicit columns of the grid */
1483
+ optional Track columndefault = 6;
1484
+
1485
+ /** Specification for a grid item */
1486
+ message Item{
1487
+
1488
+ /** The content of the grid */
1489
+ optional ImageProvider content = 2;
1490
+
1491
+ /** Left border inside the grid item, contributes to size of the grid item if a Track containing the item is auto sized*/
1492
+ optional int32 borderleft = 3
1493
+ [default = 0];
1494
+ /** Right border inside the grid item, contributes to size of the grid item if a Track containing the item is auto sized */
1495
+ optional int32 borderright = 4
1496
+ [default = 0];
1497
+ /** Top border inside the grid item, contributes to size of the grid item if a Track containing the item is auto sized */
1498
+ optional int32 bordertop = 5
1499
+ [default = 0];
1500
+ /** Bottom border inside the grid item, contributes to size of the grid item if a Track containing the item is auto sized*/
1501
+ optional int32 borderbottom = 6
1502
+ [default = 0];
1503
+
1504
+ /** The first row containing the grid item, can be omitted so that the grid item is placed implicitely either based on a specified rowend (spanning one row) or the explicit grid and surrounding grid items.
1505
+ The explicit grid starts at row 0.
1506
+ */
1507
+ optional int32 rowstart = 7;
1508
+ /** The row at which the grid item ends (the item is not contained in this row), can be omitted so that the grid item is placed implicitely either based on a specified rowstart (spanning one row) or the explicit grid and surrounding grid items */
1509
+ optional int32 rowend = 8;
1510
+ /** The first column containing the grid item, can be omitted so that the grid item is placed implicitely either based on a specified columnend (spanning one column) or the explicit grid and surrounding grid items.
1511
+ The explicit grid starts at column 0.
1512
+ */
1513
+ optional int32 columnstart = 9;
1514
+ /** The column at which the grid item ends (the item is not contained in this column), can be omitted so that the grid item is placed implicitely either based on a specified columnstart (spanning one column) or the explicit grid and surrounding grid items */
1515
+ optional int32 columnend = 10;
1516
+
1517
+ enum Position{
1518
+ /** position at the start (top or left) */
1519
+ position_start = 0;
1520
+ /** position in the center */
1521
+ position_center = 1;
1522
+ /** Position at the end */
1523
+ position_end = 2;
1524
+ }
1525
+ /** Position of the content of the item in the grid cell X axis (left, center, right)*/
1526
+ optional Position justify = 11
1527
+ [default=position_center];
1528
+ /** Position of the content of the item in the grid cell Y axis (top, center, bottom)*/
1529
+ optional Position align = 12
1530
+ [default=position_center];
1531
+
1532
+ };
1533
+
1534
+ /** The grid items. Items positioned not in the explicit grid (rows, columns) create new implicit Tracks using the rowdefault, columndefault */
1535
+ repeated Item items = 4;
1536
+
1537
+ }
1538
+
1539
+
1540
+ /** @comment [layout] parameters for layout */
1541
+ optional LayoutDescription layoutdescription = 107;
1542
+
1543
+ repeated string name = 85;
1544
+
1545
+ extensions 1000 to 1999;
1546
+
1547
+ }
1548
+
1549
+
1550
+ /** A FileLocation specifies the location of a file (on disk or on the internet).
1551
+ The path specifies the qualified filename or URL of the file.
1552
+
1553
+ Variable substitution will be performed on the following special tokens:
1554
+ <table>
1555
+ <tr><th>Token</th></tr>
1556
+ <tr><td>$variable</td><td>The token $variable will be replaced with the result of a StringVariable</td></tr>
1557
+ <tr><td>$session</td><td>The token $session will be replaced with the current session or token ID</td></tr>
1558
+ <tr><td>$frame</td><td>The token $frame will be replaced with the current frame number<td></td></tr>
1559
+ </table>
1560
+ */
1561
+ message FileLocation{
1562
+ enum Type{
1563
+ /** Default FileLocation type */
1564
+ simple=0;
1565
+
1566
+ /** @undocumented */
1567
+ session=1;
1568
+ /** @undocumented */
1569
+ frame=2;
1570
+ /** @undocumented */
1571
+ sessionandframe=3;
1572
+ /** @undocumented */
1573
+ var=4;
1574
+ /** @undocumented */
1575
+ varframe=5;
1576
+ /** @undocumented */
1577
+ varsession=6;
1578
+ /** @undocumented */
1579
+ varframesession=7;
1580
+ }
1581
+
1582
+ /** @deprecated: Used to indicate subsitution type.
1583
+ Now: all necessary substitutions are determined automatically from the path */
1584
+ optional Type type=1;
1585
+
1586
+ /**The file location with optional tokens to replace */
1587
+ required string path=2;
1588
+
1589
+ /** Offset that is added to the framenumber before substitution */
1590
+ optional int32 offset=3 [default=0];
1591
+
1592
+ /** Frame numbers are padded with zeroes, till they are at least padding long */
1593
+ optional int32 padding=4 [default=5];
1594
+
1595
+ /** the token <code>$variable</code> will be replaced with the value of this */
1596
+ optional StringVariable variable=5;
1597
+
1598
+ enum FileSystemType{
1599
+ filesystem_project = 1;
1600
+ filesystem_userfs = 2;
1601
+ }
1602
+ optional FileSystemType filesystemtype = 6
1603
+ [default = filesystem_project];
1604
+ }
1605
+
1606
+
1607
+ /**
1608
+ * Container for AudioTracks. All tracks are mixed (composed) according to their
1609
+ * Mix and volume settings
1610
+ */
1611
+ message Audio {
1612
+ /** Array of AudioTracks to compose */
1613
+ repeated AudioTrack audiotracks=2;
1614
+
1615
+ extensions 1000 to 1999;
1616
+ }
1617
+
1618
+
1619
+ /**
1620
+ * The AudioTrack object encapsulate an audio source. Like VisualTracks, audio tracks
1621
+ * can be composed (mixed) on top of each other according to their volume and clipping functions.
1622
+ * <br><br>
1623
+ * Note: When operating on sections of audio objects (numframes, offset), a frame is defined
1624
+ * by the number of audio samples per frame. To work width audio frames taht are roughly equal
1625
+ * to the visual frames set the audioframesize in the AudioParams to samplerate/(frames per second)
1626
+ * e.g. 44100 / 25 = 1764.
1627
+ */
1628
+ message AudioTrack{
1629
+ /** Mix Mode */
1630
+ enum LevelMode{
1631
+ /** hard-clip audio track when applying gain, mixing tracks will never overdrive, intermodulation artifacts may occur */
1632
+ legacy=0;
1633
+ /** soft-clip audio track when applying gain, mixing tracks will never overdrive, intermodulation artifacts may occur */
1634
+ legacy_softgain=1;
1635
+ /** generally hard clip sample amplitude at overflows */
1636
+ hardclip=2;
1637
+ /** soft clip sample amplitude at overflows - less audible distortion */
1638
+ softclip=3;
1639
+ /** soft clip with 4x oversampling (avoids aliasing, more cpu-intensive) */
1640
+ softclip4x=4;
1641
+ }
1642
+
1643
+ /** Source type */
1644
+ enum Type{
1645
+ /** audio source is preencoded aac*/
1646
+ preencoded=0;
1647
+
1648
+ /** audio source is wav, mixed with underlying AudioTracks, deprecated use video_mix*/
1649
+ mix=1;
1650
+
1651
+ /** audio source is wav, replacing underlying AudioTracks, deprecated use video_replace*/
1652
+ replace=2;
1653
+
1654
+ /** audio source is a video, mixed with underlying AudioTracks , deprecated use video_mix*/
1655
+ decoder=3;
1656
+
1657
+ /** audio source is a video, replacing underlying AudioTracks, deprecated use videoreplace*/
1658
+ decoder_replace = 4;
1659
+
1660
+ /** audio source is a video, but the audio is cached in a .wav-file, mixed with underlying AudioTracks*/
1661
+ video_mix = 5;
1662
+
1663
+ /** audio source is a video, but the audio is cached in a .wav-file, replacing underlying AudioTracks*/
1664
+ video_replace = 6;
1665
+
1666
+ /** based on a sceneview*/
1667
+ scenebased = 7;
1668
+
1669
+ /** create silent track*/
1670
+ empty = 8;
1671
+
1672
+ /** change volume of tracks rendered up to this point */
1673
+ changevolume = 20;
1674
+
1675
+ /** Live (Remote) audio source */
1676
+ live = 9;
1677
+
1678
+ /** Live (Remote) audio source, no mixing */
1679
+ live_replace = 19;
1680
+
1681
+ /** dynamically synthesized audio track, no mixing*/
1682
+ synthetic = 10;
1683
+
1684
+ /** dynamically synthesized audio track*/
1685
+ synthetic_mix = 11;
1686
+
1687
+ /** combining track that plays inner audiotracks backtoback even on variable lengths*/
1688
+ backtoback = 12;
1689
+
1690
+ /** @undocumented used internally for transition to seperated AudioTrack/AudioProvider system*/
1691
+ media_mix = 21;
1692
+ media_replace = 22;
1693
+
1694
+ /** Audio from 'audioprovider' is mixed with underlying audio tracks */
1695
+ provided_mix = 23;
1696
+ /** Audio from 'audioprovider' replaces underlying audio tracks */
1697
+ provided_replace = 24;
1698
+
1699
+ }
1700
+
1701
+ /** Type of this AudioTrack */
1702
+ optional Type type=1 [default = preencoded];
1703
+
1704
+ /** Globally applied gain, specified in dB */
1705
+ optional double gain = 15 [default = 0];
1706
+
1707
+ /** Volume for audio mixing used in mix */
1708
+ optional double volume = 3 [default = 1.0];
1709
+
1710
+ /** Volume function for fade in and fade out */
1711
+ optional Function volumefunction = 6;
1712
+
1713
+ /** The default location of the audio file, used to give a fallback for multi language audio */
1714
+ optional FileLocation defaultsource=4;
1715
+
1716
+ /** The location for the audio source, either a sound file, or a video( .mov, .mp4, .avi) */
1717
+ optional FileLocation source=5;
1718
+
1719
+
1720
+ /** Offset from the beginning of the scene/movie, audio starts playing after offset frames */
1721
+ optional int32 offset=2[default = 0];
1722
+
1723
+ /** Optional number of frames (use when fewer frames needed than source provides) */
1724
+ optional int32 numframes = 9;
1725
+
1726
+ /** Audio content offset, when audio starts playing it begins with the equivalent of the contentoffset of the AudioSource */
1727
+ optional int32 contentoffset = 11;
1728
+
1729
+ /** Variable for contentoffset */
1730
+ optional StringVariable contentoffsetvariable = 21;
1731
+
1732
+ /** Variable for dynamic offset of the AudioTrack */
1733
+ optional StringVariable offsetvariable = 27;
1734
+
1735
+ /** Number of frames overlapping in edit situations e.g. crossfade transitions.
1736
+ * Adjusts contentoffset/numframes, usually should be negative e.g. -25
1737
+ */
1738
+ optional int32 editoverlap=24;
1739
+
1740
+ /** Do not throw error if source provides no audio */
1741
+ optional bool optional_audio = 10[default = false];
1742
+
1743
+ /** @comment [scenebased] SceneView for scene-based audio */
1744
+ optional SceneView sv = 12;
1745
+
1746
+ /** Names for this a´AudioTrack */
1747
+ repeated string name = 13;
1748
+
1749
+ /** Mix mode */
1750
+ optional LevelMode levelmode = 16 [default = legacy];
1751
+
1752
+ /** @undocumented */
1753
+ optional Synthesizer synthesizer = 17;
1754
+
1755
+ /** @deprecated */
1756
+ repeated AudioTrack inneraudiotracks = 18; // deprecated use audiotracks in inneraudio instead
1757
+
1758
+ /** @comment [backtoback] List of tracks */
1759
+ optional Audio inneraudio = 20;
1760
+
1761
+ /** ignore any provided length information. Instead use computed length */
1762
+ optional bool ignorelength = 19
1763
+ [default=false];
1764
+
1765
+ /** Variable to enabled or disable this track dynmically */
1766
+ optional StringVariable enablevariable = 22;
1767
+
1768
+ /** Invert logic for enabledvariable */
1769
+ optional bool invertenable = 23
1770
+ [default=false];
1771
+
1772
+ /** @internal name (used by editors for indentification purposes) */
1773
+ optional string comment = 2047;
1774
+
1775
+ /** @internal cache computed data */
1776
+ optional bool usecachedir = 7[default = true];
1777
+
1778
+ /* @undocumented enables prefetching and caching on disk of large video resources to avoid large range request seek times*/
1779
+ optional bool allowhttpprefetch = 25
1780
+ [default = true];
1781
+
1782
+ /** Advanced configuration options for making http requests */
1783
+ optional HTTPDownloadRequestInformation httpconfig = 32;
1784
+
1785
+ /** @internal name of cache directory */
1786
+ optional string cachedir = 8[default = "cache"];
1787
+
1788
+ /** @comment [video_mix, video_replace, mix, replace] Endbehaviour of audio source */
1789
+ optional EndBehaviour endbehaviour = 26
1790
+ [default = emptyframe];
1791
+
1792
+ /** @comment [video_mix, video_replace] Enables audio decoding using multiple streams of the source video/audio file (to support apple itunes spec) or allows to specify one used audio stream instead of defaulting to the first one */
1793
+ repeated int32 multistreamindices = 28;
1794
+
1795
+ /** @comment [scenebased, backtoback] mix the audio returned from the sceneview/inneraudio according to volume/volumefunction and apply gain instead of only passing it through. Note: This changes the order audio is mixed. */
1796
+ optional bool mixvolume = 29
1797
+ [default = false];
1798
+
1799
+ /** @comment set a limit to the number of frames determined dynamically from content */
1800
+ optional int32 maxcontentframes = 30;
1801
+
1802
+ optional AudioProvider audioprovider = 31;
1803
+
1804
+ extensions 1000 to 1999;
1805
+ }
1806
+
1807
+ message AudioProvider{
1808
+ enum Type{
1809
+ media = 1;
1810
+ }
1811
+
1812
+ optional Type type = 1
1813
+ [default = media];
1814
+
1815
+ /** @comment [media] The location for the audio source, either a sound file, or a video( .mov, .mp4, .avi) */
1816
+ optional FileLocation source=2;
1817
+
1818
+ /** @comment [media] A default location for the media file used if source can not be loaded, e.g. can be fallback for multi language audio */
1819
+ optional FileLocation defaultsource=3;
1820
+
1821
+
1822
+ /** Audio content offset, when audio starts playing it begins with the equivalent of the contentoffset of the AudioSource */
1823
+ optional int32 contentoffset = 4;
1824
+
1825
+ /** Variable for contentoffset */
1826
+ optional StringVariable contentoffsetvariable = 5;
1827
+
1828
+ /** Number of frames overlapping in edit situations e.g. crossfade transitions.
1829
+ * Adjusts contentoffset/numframes, usually should be negative e.g. -25
1830
+ */
1831
+ optional int32 editoverlap=6;
1832
+
1833
+ /** Do not throw error if source provides no audio */
1834
+ optional bool optional_audio = 7[default = false];
1835
+
1836
+ /* @undocumented enables prefetching and caching on disk of large http audio sources to avoid large range request seek times*/
1837
+ optional bool allowhttpprefetch = 8
1838
+ [default = true];
1839
+
1840
+ /** Advanced configuration options for making http requests */
1841
+ optional HTTPDownloadRequestInformation httpconfig = 11;
1842
+
1843
+ /** @comment set a limit to the number of frames determined dynamically from content */
1844
+ optional int32 maxcontentframes = 9;
1845
+
1846
+ /** @comment Endbehaviour of audio provider */
1847
+ optional EndBehaviour endbehaviour = 10
1848
+ [default = emptyframe];
1849
+
1850
+ }
1851
+
1852
+ /** @undocumented */
1853
+ message Synthesizer
1854
+ {
1855
+ /** @undocumented */
1856
+ enum Type{
1857
+ //play fixed number of random audio samples with jitter
1858
+ randomsamples=0;
1859
+ }
1860
+
1861
+ optional Type type = 1 [default = randomsamples];
1862
+
1863
+ // seed for random numbers
1864
+ optional uint32 randomseed=2 [default = 0];
1865
+
1866
+ // base sound samples - currently only wav supported
1867
+ repeated FileLocation samples=3;
1868
+
1869
+ // for randomsamples this is the number of samples to be played (StringVariable containing int)
1870
+ optional StringVariable iterations=4;
1871
+
1872
+ // for randomsamples this is the maximum of periodicity jitter in seconds
1873
+ optional double jitter=5 [default = 0 ];
1874
+
1875
+ // should be set to the same as numframes of enclosing AudioTrack
1876
+ optional int32 numframes=6 [default = 500];
1877
+
1878
+ extensions 1000 to 1999;
1879
+ }
1880
+
1881
+
1882
+
1883
+ /** BlendMode determines how two VisualTracks (Layers) are blended into each other. */
1884
+ enum BlendMode{
1885
+ /** This is the standard blend mode which uses the top layer alone */
1886
+ normal=0;
1887
+
1888
+ /** With Screen blend mode the values of the pixels in the two layers are inverted, multiplied, and then inverted again. */
1889
+ screen=1;
1890
+
1891
+ /** This is a softer version of Hard Light. Applying pure black or white does not result in pure black or white.*/
1892
+ softlight=2;
1893
+
1894
+ /** Hard Light combines Multiply and Screen blend modes. Equivalent to Overlay, but with the bottom and top images swapped.*/
1895
+ hardlight=3;
1896
+
1897
+ /** Overlay combines Multiply and Screen blend modes. The parts of the top layer where the base layer is light become lighter, the parts where the base layer is dark become darker. Areas where the top layer are mid grey are unaffected. An overlay with the same picture looks like an S-curve*/
1898
+ overlay=4;
1899
+
1900
+ /** Multiply blend mode multiplies the numbers for each pixel of the top layer with the corresponding pixel for the bottom layer. */
1901
+ multiply=5;
1902
+
1903
+ /** Mean-Value Cloning */
1904
+ mvcclone=6;
1905
+
1906
+ /** Linear Dodge performs a saturating addition of the two layers*/
1907
+ lineardodge = 7;
1908
+
1909
+ /** Linear burn performs a saturating addition of the two layers and then inverts the result*/
1910
+ linearburn = 8;
1911
+
1912
+ /** Subtract does a saturating subtraction of of the two layers*/
1913
+ subtract = 9;
1914
+
1915
+ /** Difference takes the absolute difference of the two layers*/
1916
+ difference = 10;
1917
+
1918
+ /** Negation takes the absolute difference of the two layers with one layer inverted and inverts the result*/
1919
+ negation = 11;
1920
+
1921
+ /** Lighten only blends the regions of the top layer where it is lighter than the bottom layer*/
1922
+ lighten = 12;
1923
+
1924
+ /** Darken only blends the regions of the top layer where it is darker than the bottom layer*/
1925
+ darken = 13;
1926
+ }
1927
+
1928
+
1929
+ //A VisualTrack generally composes its transformed base content on a background buffer provided by VisualTracks before it
1930
+ //If there is no input background buffer (first VisualTrack) only the transformed base content is given back
1931
+ //If there is no base content in the VisualTrack, the background buffer is transformed instead
1932
+
1933
+ /**
1934
+ <p>As part of the image processing pipeline, VisualTracks create, transform and composite
1935
+ visual contents onto a background buffer. The background buffer for each VisualTrack
1936
+ is the composite of all previous VisualTracks (or the frame buffer in case of the
1937
+ first VisualTrack) in the layer stack.</p>
1938
+
1939
+ <p>When a content is defined, the VisualTrack will transform this content by executing all
1940
+ transformations defined in the <code>transformations</code> array. When no content is defined
1941
+ transformations will be executed upon the background buffer ("Adjustment tracks").</p>
1942
+
1943
+ <p>In and out point of a VisualTrack (<code>offset</code> and <code>numframes</code>) define
1944
+ the timing of this track within its scene. The length can also be dyamically provided through
1945
+ the <code>numframesvariable</code> property.</p>
1946
+
1947
+ <p>VisualTracks can be dynamically enabled or disabled by providing a <code>enablevariable</code>.
1948
+ If the variable evaluates to false (or not set) the entire track is disabled (as if it does not exist).
1949
+ To disable individual transformations, see the <code>enablevariable</code> in Transformation type.</p>
1950
+
1951
+ */
1952
+ message VisualTrack{
1953
+ //base content of this VisualTrack
1954
+ optional ImageProvider content=2;
1955
+
1956
+ //number of frames of this VisualTrack, if not specified it will provide content until the end of the scene
1957
+ optional int32 numframes =3 [default =-1];
1958
+
1959
+ /** Number of frames overlapping in edit situations e.g. crossfade transitions.
1960
+ * Adjusts numframes, usually should be negative e.g. -25
1961
+ */
1962
+ optional int32 editoverlap = 26;
1963
+
1964
+ //offset to change the starting point of this VisualTrack relative to the start of the scene (negative values give undefined behaviour)
1965
+ optional int32 offset =4 [default =0];
1966
+
1967
+ //options for compositing offsets of layer content
1968
+ //offset for the compositing of background and layer content
1969
+ optional int32 x =5 [default =0];
1970
+ optional int32 y =6 [default =0];
1971
+ //automatic centering for the compositing of background and layer content (center is deprecated, use centerx centery instead)
1972
+ optional bool center = 16[default = false]; //deprecated
1973
+ optional bool centerx = 17[default = false];
1974
+ optional bool centery = 18[default = false];
1975
+
1976
+ /** @deprecated Image channel to use for masking */
1977
+ optional int32 maskchannel =7 [default =0];
1978
+
1979
+ /** @deprecated Invert mask */
1980
+ optional bool invertmask =13 [default =false];
1981
+
1982
+ /** @deprecated Mask content using this mask */
1983
+ optional ImageProvider mask = 9;
1984
+
1985
+ /** Array of Transformations, that are applied to either the content or the background buffer*/
1986
+ repeated Transformation transformations = 10;
1987
+
1988
+ /** Blendmode for the compositing operation */
1989
+ optional BlendMode blendmode= 11 [default = normal];
1990
+
1991
+ /** Alpha (opacity) for the compositing operation */
1992
+ optional double opacity =12 [default = 1.0];
1993
+
1994
+ /** Animate opacity over time using this function */
1995
+ optional Function opacityfunction = 15;
1996
+
1997
+ /** Compute destination alpha after compositing */
1998
+ optional bool adjustalpha =8 [default = false];
1999
+
2000
+ /** @internal */
2001
+ optional bool lazyevaluate = 19
2002
+ [default = true];
2003
+
2004
+ /** Dynamically enable this VisualTrack through this variable */
2005
+ optional StringVariable enablevariable = 20;
2006
+
2007
+ /** Invert the logic of the <code>enablevariable</code> */
2008
+ optional bool invertenable = 23
2009
+ [default=false];
2010
+
2011
+ /** Name(s) for this track */
2012
+ repeated string name = 21;
2013
+
2014
+ /** Track data */
2015
+ optional TrackData positions = 22;
2016
+
2017
+ /** Ignore any provided <code>numframes*</code> properties. Length will be computed through other tracks */
2018
+ optional bool ignorelength = 24
2019
+ [default=false];
2020
+
2021
+ /** Variable for dynamic length of the VisualTrack */
2022
+ optional StringVariable numframesvariable = 25;
2023
+
2024
+ /** Variable for dynamic offset of the VisualTrack */
2025
+ optional StringVariable offsetvariable = 27;
2026
+
2027
+ /** User comment */
2028
+ optional string comment = 2047;
2029
+
2030
+ extensions 1000 to 1999;
2031
+
2032
+ }
2033
+
2034
+ /**
2035
+ A Transformation takes an input image and return a transformed version.
2036
+ */
2037
+ message Transformation{
2038
+ //There are three distinctions as to the size of the returned image
2039
+ //NeutralSize: the size does not change
2040
+ //SpecifiedSize: the size is determined by parameters of the Transformation
2041
+ //ContextSize: the size is determined by the context, in which the Transformation is called (usually the size of the Movie)
2042
+
2043
+ enum Type{
2044
+ option allow_alias = true;
2045
+ //NeutralSize
2046
+
2047
+ /** Gaussian blur */
2048
+ blur=4;
2049
+
2050
+ /** Motion blur */
2051
+ motionblur=5;
2052
+
2053
+ /** Motion blur, with parameters derived from average motion of tracking data */
2054
+ trackedmotionblur=6;
2055
+
2056
+ /** inpainting of points */
2057
+ inpaint=12;
2058
+
2059
+ /** masking by alpha mask */
2060
+ mask=13;
2061
+
2062
+ /** Moving Least Squares image morphing (deprecated, use morph with morph_mls morphtype instead */
2063
+ mls=7;
2064
+
2065
+ /** morphing image through MLS or TPS */
2066
+ morph=34;
2067
+
2068
+ /** viewpoint transformation zoom in */
2069
+ linearzoomin=10;
2070
+
2071
+ /** viewpoint transformation zoom out */
2072
+ linearzoomout=11;
2073
+
2074
+ /** change saturation of the image */
2075
+ intensity = 16;
2076
+
2077
+ /** rotate the image */
2078
+ rotate = 36;
2079
+
2080
+ /** invert the image */
2081
+ invert = 40;
2082
+
2083
+ /** make the image premultiplied/unpremultiplied */
2084
+ premultiplyalpha = 41;
2085
+
2086
+ /** Minimax effect from After Effects, uses image morphology operations (dilate/erode), sets pixels to the minimum/maximum value of their neighbourhood */
2087
+ minimax = 45;
2088
+
2089
+ /** Circular blur */
2090
+ circularblur = 46;
2091
+
2092
+ /** Radial blur */
2093
+ radialblur = 47;
2094
+
2095
+ //SpecifiedSize:
2096
+
2097
+ /** scaling of input image */
2098
+ scaling=8;
2099
+
2100
+ /** scaling of input image preserving aspect ratio */
2101
+ scalingletter=9;
2102
+
2103
+ /** scaling to a specified width or height with aspect ratio */
2104
+ scalingaspect=14;
2105
+
2106
+ /** scaling to a specified width or height with aspect ratio */
2107
+ scalingcrop=30;
2108
+
2109
+ /** cropping of the image with x/y offset and specified size */
2110
+ crop = 31;
2111
+
2112
+ /** scale down to an(implicitly) specified size (mipmap) for further use in ContextSize transformations/to avoid interpolation artifacts */
2113
+ mipmap = 38;
2114
+
2115
+ /** detect a face and crop the input around it */
2116
+ facedetect = 42;
2117
+
2118
+ //ContextSize
2119
+
2120
+ /** warping to quad track data */
2121
+ quadtracking=0;
2122
+ /** warping to quad track data */
2123
+ warp=0;
2124
+
2125
+ /** warping from quad track data */
2126
+ warpback=43;
2127
+
2128
+ /** warping from quad track data to quad track data*/
2129
+ warpquads=44;
2130
+
2131
+ /** warping to grid track data */
2132
+ gridtracking=1;
2133
+ /** warping to grid track data */
2134
+ gridwarp=1;
2135
+
2136
+ /** warping to image map */
2137
+ texturemapping32f=3;
2138
+
2139
+ /** animate the input */
2140
+ animate=15;
2141
+
2142
+ /** affine transformation (2D) similar to animate */
2143
+ affine=37;
2144
+
2145
+ /** affine transformation (2D) similar to animate */
2146
+ affinemotionblur=39;
2147
+
2148
+ /** translate to a tracking point */
2149
+ pointpaste=17;
2150
+
2151
+ /** custom */
2152
+ custom=28;
2153
+
2154
+ /** Crop, rotate & warp in one step. Data supplied dynamically */
2155
+ croprotatewarp=29;
2156
+
2157
+ /** Flip image around given FlipAxis */
2158
+ flip=32;
2159
+
2160
+ /** Perform 3D color transformation */
2161
+ colortwist=33;
2162
+
2163
+ /** Boost saturation of colors */
2164
+ colorboost = 18;
2165
+
2166
+ /** Instagramm like Nashville filter*/
2167
+ nashville = 19;
2168
+
2169
+ /** Instagramm like Lord Kelvin filter*/
2170
+ lordkelvin = 20;
2171
+
2172
+ /** Colorize specific color range, grayscale the rest */
2173
+ splittoning = 21;
2174
+
2175
+ /** Depth of field simulation */
2176
+ tiltshift = 22;
2177
+
2178
+ /** Instagramm like Sin City filter*/
2179
+ sincity = 23;
2180
+
2181
+ /** Glow Effect */
2182
+ glow = 24;
2183
+
2184
+ /** Vignette (darken edges with circular center) */
2185
+ vignette= 25;
2186
+
2187
+ /** Cartoonize image (optionally perform Roy Lichtenstein color dithering)*/
2188
+ comic= 26;
2189
+
2190
+ /** Drop shadow */
2191
+ textshadow = 27;
2192
+
2193
+ /** 3-D color lookup table */
2194
+ cubelut = 35;
2195
+
2196
+ /** Distort image based on distortionmap **/
2197
+ distortionmap = 48;
2198
+ }
2199
+
2200
+ /** Type of this Transformation */
2201
+ required Type type =1;
2202
+
2203
+ //TrackData message for the trackdata used by tracking based Transformations:
2204
+ // trackedmotionblur, quadtracking, gridtracking, linearzoomin, linearzoomout, inpaint
2205
+ /** @comment [trackedmotionblur, quadtracking, quadtrackingback, gridtracking, croprotatewarp, linearzoomin, linearzoomout, inpaint] Motion data */
2206
+ optional TrackData trackdata=2;
2207
+
2208
+ /** @comment [quadtoquadwarp] Motion data */
2209
+ optional TrackData sourcetrackdata=104;
2210
+
2211
+ /**
2212
+ @comment [texturemapping32f] image sequence to use as UV map
2213
+ @comment [mask] mask to use on image
2214
+ @comment [distortionmap] distortion map to use on image
2215
+ */
2216
+ optional ImageProvider image=3;
2217
+
2218
+ /**
2219
+ @comment [blur] kernelsize of the Gaussian blur in Pixels
2220
+ @comment [motionblur] length of the motion
2221
+ @comment [trackedmotionblur] factor for the determined motion
2222
+ */
2223
+ optional double blurlength = 4
2224
+ [default =1.0];
2225
+
2226
+ /**
2227
+ @comment [blur] sigma of the Gaussian blur
2228
+ @comment [motionblur] direction of the motion in degrees
2229
+ */
2230
+ optional double blurfactor = 5;
2231
+
2232
+ /** @comment [blur, motionblur] increment by frame for blurlength and blurfactor */
2233
+ optional double blurlength_inc = 6;
2234
+
2235
+ /** @comment [blur, motionblur] increment by frame for blurlength and blurfactor */
2236
+ optional double blurfactor_inc = 7;
2237
+
2238
+ /* @comment [blur, motionblur] Animation function for gaussian blur */
2239
+ optional Function blurfunction = 71;
2240
+
2241
+ /** @comment [quadtracking] Scale the input image to an appropriate size before warping to avoid interpolation artifacts. Especially useful when large zooming is taking place. Used in quadtracking, corresponds to sharpness */
2242
+ optional bool zoomscale = 8;
2243
+
2244
+ /** @comment [quadtracking] Workaround to image warping bug. Slower but avoids aliasing artifacts on warped images */
2245
+ optional int32 smoothedge =16
2246
+ [default =0];
2247
+
2248
+ /**
2249
+ @comment [mls] scale factor for points
2250
+ @comment [scaling, scalingletter] Size of the scaled output
2251
+ @comment [trackedmotionblur, quadtracking, gridtracking, linearzoomin, linearzoomout, inpaint] Scale factor for the tracking data
2252
+ */
2253
+ repeated double scale =9;
2254
+
2255
+ /** @comment [scaling, scalingletter] If this is true scaling and scalingLetterbox Transformations are done with the scale factor relative to the imageSize */
2256
+ optional bool scalerelative=23
2257
+ [default=false];
2258
+
2259
+ /** @comment [scaleaspect] Aspect ratio */
2260
+ optional double aspectratio=24;
2261
+
2262
+ /** @comment [scaleaspect] the length in pixels of the side specified in <var>specifiedside</var> */
2263
+ optional int32 fixedsidesize=25;
2264
+
2265
+ /** @comment [scaleaspect] w | h */
2266
+ optional string specifiedside=26;
2267
+
2268
+ /**
2269
+ @comment [scalingletter] background color of image
2270
+ @comment [sincity] Reference color. This color which will be preserved - only Hue component is relevant
2271
+ @comment [vignette] Color the border will be faded into.
2272
+ */
2273
+ optional Color color =10;
2274
+
2275
+
2276
+ /** @comment [mls] Number of points in <var>sourcepoints</var> and <var>destinationpoints</var> */
2277
+ optional int32 numpoints =11;
2278
+
2279
+ /** @comment [mls] Source coordinates */
2280
+ optional PointsVariable sourcepoints=12;
2281
+
2282
+ /** @comment [mls] Destination coordinates */
2283
+ optional PointsVariable destinationpoints=13;
2284
+
2285
+
2286
+ //offset and length parameters for Viewport transformations
2287
+ /** @comment [quadtracking] number of frames to apply transformation */
2288
+ optional int32 numframes = 14;
2289
+
2290
+ /** @comment [quadtracking] offset in frames for transformation */
2291
+ optional int32 offset = 15;
2292
+
2293
+ /** @comment [quadtracking, croprotatewarp] Tracking data adjustion for quadtracking */
2294
+ /** @comment [facedetect] Adjustion for detected face area cutout */
2295
+ optional PosAdjust posadjust=17;
2296
+
2297
+
2298
+ /** @comment [inpaint] Radius to clean */
2299
+ repeated int32 erasesize=18;
2300
+
2301
+ /** @comment [inpaint] Radius to search */
2302
+ optional double searchradius=19
2303
+ [default =4];
2304
+
2305
+
2306
+ /** @comment [mask] which channel of image contains the alpha mask*/
2307
+ optional int32 maskchannel =20 [default =0];
2308
+ /** @comment [mask] invert the mask before use */
2309
+ optional bool invertmask =22 [default =false];
2310
+
2311
+ //Animation for animation type
2312
+ /** @undocumented */
2313
+ repeated Animation animations = 28;
2314
+
2315
+ /** @undocumented */
2316
+ optional AnimationPosition position = 29;
2317
+
2318
+ /** @undocumented */
2319
+ optional double focus = 30
2320
+ [default=0.0];
2321
+
2322
+
2323
+ /** @comment [intensity] Desaturate image. Values 0..1 */
2324
+ optional double saturation = 31;
2325
+
2326
+ //used internally
2327
+ //optional bool cacheimages=27 [default = false];
2328
+
2329
+ /**
2330
+ @comment [vignette, colorboost, tiltshift] Factor to boost color
2331
+ @comment [tiltshift] Factor to boost color. 1.7 should be a good default
2332
+ @comment [splittone, glow] Factor to apply effect 0..1
2333
+ */
2334
+ optional double colorintensity = 32
2335
+ [default = 1.0];
2336
+
2337
+ /**
2338
+ @comment [vignette, splittone] Number of standard deviations for blur. 4-32 is useful range.
2339
+ @comment [tiltshift] Max blur sigma for gaussian blur. 8-32 should be appropriate.
2340
+ @comment [glow] Number of standard deviations for blur. 4-32 should be useful.
2341
+ @comment [circularblur, radialblur] Number of standard deviations for blur.
2342
+ */
2343
+ optional double sigma = 33
2344
+ [default = 1.0];
2345
+
2346
+ /** @comment [splittone] Color for dark areas */
2347
+ optional Color dark = 34;
2348
+
2349
+ /** @comment [splittone] Color for light areas */
2350
+ optional Color light = 35;
2351
+
2352
+ /** @comment [sincity] Tolerance for color matching. Range 8-32 should be useful */
2353
+ optional double tolerance = 36
2354
+ [default = 0.2];
2355
+
2356
+ /** @comment [splittone] when set to true, image will me converted to monochrome first to remove original color toning. false should be a good default */
2357
+ optional bool monochromize = 37
2358
+ [default = false];
2359
+
2360
+ /** @comment [tiltshift] size of focus area. 0.1 should be a good default*/
2361
+ optional double focussize = 38
2362
+ [default = 0.2];
2363
+
2364
+ /** @comment [tiltshift] position of focus center - 0.0 means top of image, 1.0 means bottom. 0.7 should be a good default*/
2365
+ optional double focusheight= 39
2366
+ [default = 0.5];
2367
+
2368
+ /**
2369
+ @comment [tiltshift] If true: use an elliptical ('spot') focus area. If false: horizontally invariant focus
2370
+ @comment [vignette] True means emphasized area is circular, false means area is elliptical with the same AR as image
2371
+ */
2372
+ optional bool spotfocus = 40
2373
+ [default = false];
2374
+
2375
+ /** @comment [splittone] brightness value where toning is switched from dark to light 128 is the most sensible default value */
2376
+ optional double threshold = 41
2377
+ [default = 0.08];
2378
+
2379
+ /** @comment [splittone] number of brightness levels used for dark toning - light toning transition. 8-64 should be reasonable */
2380
+ optional double transitionwidth = 42
2381
+ [default = 0.3];
2382
+
2383
+ /** @comment [colorboost] Brightness enhance */
2384
+ optional double brightness = 43
2385
+ [default = 1.0];
2386
+
2387
+ /** @comment [vignette] Size of preserved center area, 1.0 means full image size. Nice default: 0.7 */
2388
+ optional double aperture= 44
2389
+ [default = 0.7];
2390
+
2391
+ /** @comment [vignette] Blur faded border areas */
2392
+ optional bool blurborder= 46
2393
+ [default = false];
2394
+
2395
+ /** @comment [comic] Number of iterations for bilateral filtering. Bilateral filtering is the key processing step removing fine details to obtain plain, unicolor areas typical for comic images. 4 iterations produce good results but need a lot of cpu time.*/
2396
+ optional int32 bilatfilter_iterations = 49
2397
+ [default = 4];
2398
+
2399
+ /** @comment [comic] Scale factor for contour layer - use bigger values to drop small details and smaller for fine contours*/
2400
+ optional double edge_detail_scale= 47
2401
+ [default = 1.0];
2402
+
2403
+ /** @comment [comic] Sigma for color layer blur. This blurring step is performed after color reduction and smoothes transitions between unicolored areas - should normally be disabled with lichtenstein dithering*/
2404
+ optional double colorblur= 48
2405
+ [default = 0.8];
2406
+
2407
+ /** @comment [comic] Tonal sigma for bilat. filtering*/
2408
+ optional double bilatfilter_tonalsigma = 50
2409
+ [default = 8.0];
2410
+
2411
+ /** @comment [comic] Spatial sigma for bilat. filtering*/
2412
+ optional double bilatfilter_spatialsigma = 51
2413
+ [default = 3.0];
2414
+
2415
+ /** @comment [comic] Preprocessing Blur Sigma. Useful for reduction of fine-grained image structures or noise which may distract the edge detection process most images will look fine with this option being disabled. -1 disables option.*/
2416
+ optional double preproc_sigma = 52
2417
+ [default = -1.0];
2418
+
2419
+ /** @comment [comic] Number colors for color reduction. Depending on color_reduct_method, this parameter is used differently: <ul>
2420
+ <li><b>ComicColorReductMethod.fixed</b><br>
2421
+ colorreduct_levels sets the number of brightness levels for each color channel. Raise this to the power of 3 to get the number of possible colors. (The actual number of resulting colors will be smaller, except for extremely colorful images)<br>
2422
+
2423
+ Points to be considered:<br>
2424
+ Do not use too high values, real number of colors is the third power of this value Do not use too small values, reduction to fixed colors may look ugly otherwise A good default for color_reduct_levels would be 8, resulting in 8x8x8=512 possible colors.
2425
+ </li>
2426
+
2427
+ <li><b>ComicColorReductMethod.adaptive</b><br>
2428
+ colorreduct_levels sets the actual number of colors used for reduction. Just think about how many colors should be used for this image and set this value. A good default for color_reduct_levels would be 18
2429
+ </li>
2430
+
2431
+ <li>
2432
+ <b>ComicColorReductMethod.rlichtenstein</b><br>
2433
+ colorreduct_levels sets the number of base colors used for reduction. White is always used as additional color. Each base color may occur in plain and in dithered style, as colored dots on white background.<br>
2434
+
2435
+ Points to be considered:<br>
2436
+ After converting the image to HSV space, the 'value' (V) component is discarded. Therefore a fewer number of colors is needed nice reduction results. A good default for color_reduct_levels would be 5
2437
+ </li>
2438
+ */
2439
+ optional int32 colorreduct_levels = 53
2440
+ [default = 8];
2441
+
2442
+ /** @comment [comic] color quantization: minimum saturation which will not be quantized to grey*/
2443
+ optional int32 colorreduct_minsaturation= 54
2444
+ [default = 16];
2445
+
2446
+ /** Method used for color reduction, after bilateral filtering. */
2447
+ enum ComicColorReductMethod{
2448
+ /** Color reduction suitable for video. Reduction is very simple: Colors will be matched to a fixed palette, independent from image content. This avoids fluctuation and flickering effects over time.*/
2449
+ fixed = 1;
2450
+
2451
+ /** Correct adaptive color reduction. Based on image content, the colors for best perceptional image representation will be determined. Should not be used with video content*/
2452
+ adaptive = 2;
2453
+
2454
+ /** Special dithering style: use each color in full and half half saturation. Areas with half saturation will be dithered with dots in “Roy Lichtenstein” style.*/
2455
+ rlichtenstein = 3;
2456
+ }
2457
+
2458
+ /** @comment [comic] Color reeduction method to use*/
2459
+ optional ComicColorReductMethod colorreduct_method= 55
2460
+ [default = fixed];
2461
+
2462
+ /** @comment [comic] Ratio of area being dithered with half saturation*/
2463
+ optional double lstein_dither_ratio = 56
2464
+ [default = 0.5];
2465
+
2466
+ /** @comment [comic] Radius of dots used in dithering*/
2467
+ optional double lstein_dot_radius = 101
2468
+ [default = 1.6];
2469
+ /** @comment [comic] Distance between dots used in dithering*/
2470
+ optional int32 lstein_dot_distance = 102
2471
+ [default = 6];
2472
+ /** @comment [comic] Skew of dots used in dithering*/
2473
+ optional int32 lstein_dot_skew = 103
2474
+ [default = 1];
2475
+
2476
+ /** @comment [comic] Tile size during interpolation. Avoid too small values.*/
2477
+ optional int32 interpoltilesize = 57
2478
+ [default = 8];
2479
+
2480
+ // Text shadow options - inner and outer shadows possible
2481
+ // size and softness of shadow (blur)
2482
+
2483
+ /** @comment [textshadow] */
2484
+ optional double inner_size = 58
2485
+ [default=3.0];
2486
+
2487
+ /** @comment [textshadow] */
2488
+ optional double outer_size = 59
2489
+ [default=0.0];
2490
+
2491
+ //color of shadow
2492
+ /** @comment [textshadow] */
2493
+ optional Color inner_color = 60;
2494
+
2495
+ /** @comment [textshadow] */
2496
+ optional Color outer_color = 61;
2497
+
2498
+ //offset of shadow in x/y direction
2499
+ /** @comment [textshadow] */
2500
+ optional int32 inner_offsetx = 62
2501
+ [default=1];
2502
+
2503
+ /** @comment [textshadow] */
2504
+ optional int32 inner_offsety = 63
2505
+ [default=1];
2506
+
2507
+ /** @comment [textshadow] */
2508
+ optional int32 outer_offsetx = 64
2509
+ [default=1];
2510
+
2511
+ /** @comment [textshadow] */
2512
+ optional int32 outer_offsety = 65
2513
+ [default=1];
2514
+
2515
+ //intensity of shadow - alpha composition parameter
2516
+ /** @comment [textshadow] */
2517
+ optional double inner_intensity = 66
2518
+ [default=0.75];
2519
+
2520
+ /** @comment [textshadow] */
2521
+ optional double outer_intensity = 67
2522
+ [default=0.27];
2523
+
2524
+ /** @undocumented */
2525
+ optional string custom_identifier = 68;
2526
+
2527
+
2528
+ /** @comment [croprotatewarp] Rotation angle in degrees. Rotates the crop rectangle specified in <var>cropvariable</var>. Rotation center defaults to center of crop rectangle, but can be adjusted via <var>rotatecenterxoffset</var> and <var>rotatecenteryoffset</var>.*/
2529
+ optional StringVariable rotatevariable = 69;
2530
+
2531
+ /** @comment [croprotatewarp] List of 4 comma separated values, specifying the top left and bottom right corners of a crop rectangle, e.g. 20, 20, 220, 320. Can be absolute or relative coordinates, depending on <var>relativecroppositions</var>.*/
2532
+ optional StringVariable cropvariable = 70;
2533
+
2534
+ /** @comment [croprotatewarp] Orientation value, one of "0", "1", "2", "3". Specifies the number of 90 degree turns the cropped source image is turned to correct missing orientation metadata.*/
2535
+ optional StringVariable orientationvariable = 97;
2536
+
2537
+ /** @comment [croprotatewarp] X offset for rotation center. Relative to size of crop rectangle. Default (0) is center*/
2538
+ optional double rotatecenterxoffset = 80
2539
+ [default = 0];
2540
+
2541
+ /** @comment [croprotatewarp] Y offset for rotation center. Relative to size of crop rectangle. Default (0) is center.*/
2542
+ optional double rotatecenteryoffset = 81
2543
+ [default = 0];
2544
+
2545
+ /** @comment [croprotatewarp] Use crop positions in coordinates relative to source image size.*/
2546
+ optional bool relativecroppositions = 100
2547
+ [default = false];
2548
+
2549
+ // crop parameter - new image will be width x height pixel taken from old image with top left corner x,y
2550
+ /** @comment [crop] Width of the cropped image */
2551
+ optional int32 width = 72;
2552
+
2553
+ /** @comment [crop] Height of the cropped image*/
2554
+ optional int32 height = 73;
2555
+
2556
+ /** @comment [crop] X coordinate of the top left corner*/
2557
+ optional double x = 74;
2558
+
2559
+ /** @comment [crop] Y coordinate of the top left corner */
2560
+ optional double y = 75;
2561
+
2562
+ /** @comment [crop] Crop from horizontal center */
2563
+ optional bool centerx = 76;
2564
+
2565
+ /** @comment [crop] Crop from vertical center*/
2566
+ optional bool centery = 77;
2567
+
2568
+ /** Axis for <var>flip</var> transformation */
2569
+ enum FlipAxis{
2570
+ flipx=0;
2571
+ flipy=1;
2572
+ }
2573
+
2574
+ /** @comment [flip] Flip around this axis */
2575
+ optional FlipAxis flipaxis = 78;
2576
+
2577
+ /** @comment [colortwist] */
2578
+ optional StringVariable colormatrix = 79;
2579
+
2580
+ /** Image morphing mode */
2581
+ enum Morph{
2582
+ morph_mls=0;
2583
+ morph_tps=1;
2584
+ morph_mls_legacy=2;
2585
+ }
2586
+
2587
+ /** @comment [mls, morph] Image morphing mode */
2588
+ optional Morph morphtype = 82
2589
+ [default=morph_mls];
2590
+
2591
+ /** @comment [mls, morph] Source positions */
2592
+ optional TrackData morphsourcepoints = 83;
2593
+
2594
+ /** @comment [mls, morph] Destination positions */
2595
+ optional TrackData morphdestinationpoints = 84;
2596
+
2597
+ /** @comment [mls, morph] Processing size */
2598
+ optional int32 morphtilesize = 85
2599
+ [default=10];
2600
+
2601
+ /** @comment [cubelut] File in IRIDAS .cube format or Photoshop .acv curve format */
2602
+ optional FileLocation paramfile = 86;
2603
+
2604
+ /* Rotation mode for rotate transformation */
2605
+ enum RotationMode{
2606
+ clockwise90 = 1;
2607
+ counterclockwise90 =2;
2608
+ autolandscapecw = 3;
2609
+ autolandscapeccw = 4;
2610
+ autoportraitcw = 5;
2611
+ autoportraitccw = 6;
2612
+ }
2613
+
2614
+ /** @comment [rotate] Use video metadata to detect device rotation and re-orint image correctly */
2615
+ optional RotationMode rotationmode = 87;
2616
+
2617
+ /** @comment [affine, affinemotionblur] Scaling (Size) motion data for affine transformations */
2618
+ optional TrackData scaledata=88;
2619
+
2620
+ /** @comment [affine, affinemotionblur] Rotation motion data for affine transformations*/
2621
+ optional TrackData rotatedata=89;
2622
+
2623
+ /** @comment [affine, affinemotionblur] Position motion data for affine transformations */
2624
+ optional TrackData translatedata=90;
2625
+
2626
+ /** @comment [affine, affinemotionblur] Anchor offset motion data for affine transformations*/
2627
+ optional TrackData anchordata=91;
2628
+
2629
+ /** Mip mapping (Resolution/Size dependant scaling) */
2630
+ enum MipMapType{
2631
+ mipmap_trackdatabased =1;
2632
+ mipmap_maskbased_alpha =2;
2633
+ mipmap_maskbased_grayscale =3;
2634
+ }
2635
+
2636
+ /** @comment [mipmap] */
2637
+ optional MipMapType mipmap_type = 92
2638
+ [default=mipmap_trackdatabased];
2639
+
2640
+ /** @comment [mipmap] */
2641
+ optional int32 mipmap_initialsize = 93
2642
+ [default = 5];
2643
+
2644
+ /** @comment [mipmap] */
2645
+ optional double mipmap_basefactor = 94
2646
+ [default = 2];
2647
+
2648
+ /** Enable this transformation depending on the value of this variable */
2649
+ optional StringVariable enablevariable = 95;
2650
+
2651
+ /** Invert logic for <var>enablevariable</var> */
2652
+ optional bool invertenable = 96
2653
+ [default=false];
2654
+
2655
+ /** Invert color and/or alpha channel of an image */
2656
+ enum InvertBehaviour{
2657
+ invertbehaviour_color_channels = 0;
2658
+ invertbehaviour_alpha = 1;
2659
+ invertbehaviour_color_channels_and_alpha = 2;
2660
+ }
2661
+
2662
+ /** @comment [invert] Image channels to invert */
2663
+ optional InvertBehaviour invertbehaviour = 98
2664
+ [default = invertbehaviour_color_channels];
2665
+
2666
+ /** @comment [premultiplyalpha] Premultiply image with alpha */
2667
+ optional bool premultipliedalphastate = 99
2668
+ [default = true];
2669
+
2670
+ enum MiniMaxMode{
2671
+ minimax_minimum = 1;
2672
+ minimax_maximum = 2;
2673
+ minimax_minimumthenmaximum=3;
2674
+ minimax_maximumthenminimum=4;
2675
+ }
2676
+ /** @comment [minimax] */
2677
+ optional MiniMaxMode minimaxmode = 105
2678
+ [default = minimax_minimum];
2679
+ /** @comment [minimax] The radius determining the kernel size of the minimax morphology operation*/
2680
+ optional int32 minimaxradius = 106
2681
+ [default = 1];
2682
+
2683
+ enum AffinePositionMode{
2684
+ affineposition_topleft = 1;
2685
+ affineposition_topright = 2;
2686
+ affineposition_bottomleft = 3;
2687
+ affineposition_bottomright = 4;
2688
+ affineposition_center = 5;
2689
+ affineposition_centertop = 6;
2690
+ affineposition_centerbottom = 7;
2691
+ affineposition_centerleft = 8;
2692
+ affineposition_centerright = 9;
2693
+ }
2694
+ /** @comment [affine] Determines the positioning of the image in the coordinate system (which part lies at (0, 0))*/
2695
+ optional AffinePositionMode affinepositionmode = 108
2696
+ [default=affineposition_topleft];
2697
+
2698
+
2699
+ enum ColorSpace{
2700
+ COLORSPACE_HSV = 1;
2701
+ COLORSPACE_HLS = 2;
2702
+ }
2703
+ /** @comment [intensity] Determines the colorspace for the saturation adjustments, defaults to HSV for legacy reasons, HLS should probably be preferred */
2704
+ optional ColorSpace intensitycolorspace = 109
2705
+ [default=COLORSPACE_HSV];
2706
+ /** @comment [intensity] Function to do a multiplicative animation of the "saturation" parameter */
2707
+ optional Function saturationfunction = 110;
2708
+
2709
+ /**@comment [distortionmap] distortion factor in x-axis **/
2710
+ optional double distortionxfactor = 111
2711
+ [default = 1.0];
2712
+ /**@comment [distortionmap] distortion factor in y-axis **/
2713
+ optional double distortionyfactor = 112
2714
+ [default = 1.0];
2715
+ /**@comment [distortionmap] channel of map to use for x-axis **/
2716
+ optional int32 distortionxchannel = 113
2717
+ [default = 0];
2718
+ /**@comment [distortionmap] channel of map to use for y-axis **/
2719
+ optional int32 distortionychannel = 114
2720
+ [default = 1];
2721
+
2722
+ enum ScalingAlignment{
2723
+ scalingalign_left = 1;
2724
+ scalingalign_center = 2;
2725
+ scalingalign_right = 3;
2726
+ }
2727
+ enum ScalingPosition{
2728
+ scalingpos_top = 1;
2729
+ scalingpos_middle = 2;
2730
+ scalingpos_bottom = 3;
2731
+ }
2732
+
2733
+ /**@comment [scalingaspect, scalingcrop] X-axis alignemnt for scaled image, when cropped or letterboxed, default is centered **/
2734
+ optional ScalingAlignment scalingalign = 115
2735
+ [default = scalingalign_center];
2736
+ /**@comment [scalingaspect, scalingcrop] Y-axis position for scaled image, when cropped or letterboxed, default is centered in middle **/
2737
+ optional ScalingPosition scalingposition = 116
2738
+ [default = scalingpos_middle];
2739
+
2740
+ repeated string name = 107;
2741
+
2742
+ /** user comment */
2743
+ optional string comment = 2047;
2744
+
2745
+ extensions 1000 to 1999;
2746
+ }
2747
+
2748
+ /** Structure for additional position and scale adjustment transformations */
2749
+ message PosAdjust{
2750
+ optional double scalex=1 [default =1.0];
2751
+ optional double scaley=2 [default =1.0];
2752
+ optional double offsetx=3 [default =0.0];
2753
+ optional double offsety=4 [default =0.0];
2754
+ }
2755
+
2756
+
2757
+ message ROI{
2758
+ optional int32 x=2;
2759
+ optional int32 y=3;
2760
+ optional int32 width=4;
2761
+ optional int32 height=5;
2762
+ }
2763
+
2764
+ /** The color type provides properties for creating and animating colors. Colors
2765
+ in certain ImageProviders can be variable or can be animated to generate smooth
2766
+ transitions from one color to another */
2767
+ message Color {
2768
+
2769
+ enum Type{
2770
+ /** Fixed value */
2771
+ constant=1;
2772
+
2773
+ /** Color value is provided by a variable in the form #rrggbb[aa] where rr,gg, bb and aa are
2774
+ hexadecimal values in the range [0..255]. Alpha (aa) defaults to 255 */
2775
+ stringvariable=2;
2776
+
2777
+ /** Color value will be animated via throught the <code>keyframes</code> and <code>keyframefunction</code>. */
2778
+ keyframe=3;
2779
+ }
2780
+
2781
+ /** Color type */
2782
+ optional Type type = 5 [default=constant];
2783
+
2784
+ /** @comment [constant] The red component of the color */
2785
+ optional int32 red =1 [default =0];
2786
+
2787
+ /** @comment [constant] The green component of the color */
2788
+ optional int32 green =2 [default =0];
2789
+
2790
+ /** @comment [constant] The blue component of the color */
2791
+ optional int32 blue =3 [default =0];
2792
+
2793
+ /** @comment [constant] The alpha component of the color */
2794
+ optional int32 alpha =4 [default =0];
2795
+
2796
+ /** @comment [stringvariable] Variable for dynamic color in the form #rrggbb[aa] where rr,gg, bb and aa are
2797
+ hexadecimal values in the range [0..255]. Alpha (aa) defaults to 255 */
2798
+ optional StringVariable string = 6;
2799
+
2800
+ /** Type for keyframes in an animated Color definition */
2801
+ message ColorKeyframe{
2802
+ /** Time for this keyframe in the range [0..1]. Relative to track in which the color is used */
2803
+ optional double time = 2;
2804
+
2805
+ /** Color for this keyframe.*/
2806
+ optional Color color = 3;
2807
+ }
2808
+
2809
+ /** @comment [keyframe] Array of keyframes for color animations */
2810
+ repeated ColorKeyframe keyframes = 7;
2811
+
2812
+ /** @comment [keyframe] Temporal animation function. Used for easing */
2813
+ optional Function keyframefunction = 8;
2814
+
2815
+ /* Interpolation modes for animated, keyframe-based Color objects */
2816
+ enum ColorInterpolationMode {
2817
+ color_interpolation_rgb=1;
2818
+ color_interpolation_lab=2;
2819
+ color_interpolation_hsv=3;
2820
+ }
2821
+
2822
+ /** @comment [keyframe] Color model to use for color animations */
2823
+ optional ColorInterpolationMode colorinterpolation = 9
2824
+ [default=color_interpolation_rgb];
2825
+ }
2826
+
2827
+
2828
+
2829
+ message TrackData{
2830
+ enum Type{
2831
+ /** Load data from file (json format) */
2832
+ file=1;
2833
+ /** Tracking data supplied in the TrackData message */
2834
+ embedded=2;
2835
+ /** Load data for one single frame from a PointsVariable */
2836
+ variable = 3;
2837
+ /** Load data via HTTP (JSON encoded) */
2838
+ http = 4;
2839
+ /** Load data via a StringVariable (JSON encoded) */
2840
+ stringvariable = 5;
2841
+ /** Data from an array of KeyFrameTrackData objects */
2842
+ keyframe = 6;
2843
+ /** Data from an inner TrackData object transformed by affine transformations */
2844
+ affine = 7;
2845
+ /** Data from positions of a rendered text of a 'text'-ImageProvider */
2846
+ textposition = 8;
2847
+ /** Data computed from inner data*/
2848
+ computed = 9;
2849
+ }
2850
+
2851
+ optional Type type=1
2852
+ [default =file];
2853
+
2854
+
2855
+ /** Frame offset */
2856
+ optional int32 offset=3
2857
+ [default=0];
2858
+
2859
+ /** Number of frames to use */
2860
+ optional int32 numframes=13
2861
+ [default = 1];
2862
+
2863
+ /** Scale all values by scale[0] (x values), scale[1] (y values) */
2864
+ repeated double scale=5;
2865
+
2866
+ /** Abort rendering on any error in the motion tracking data */
2867
+ optional bool failfast = 6
2868
+ [default = false];
2869
+
2870
+ /** What to do if there are fewer motion data frames than the track's visual frames */
2871
+ optional EndBehaviour endbehavior = 7
2872
+ [default = repeatlast];
2873
+
2874
+
2875
+
2876
+ /** @comment [embedded] Motion data for TrackData type <code>embedded</code>.*/
2877
+ optional EmbeddedTrackData embeddeddata=4;
2878
+
2879
+ /** @comment [file, http] A FileLocation indicating the file to use */
2880
+ optional FileLocation source=2;
2881
+
2882
+ /** @comment [variable] A PointVariable pointing to the motion data */
2883
+ optional PointsVariable points = 8;
2884
+
2885
+ /** @comment [stringvariable] A StringVariable pointing to the motion data */
2886
+ optional StringVariable string = 9;
2887
+
2888
+ /** @comment [http] Do not cache the loaded motion data (Slow) */
2889
+ optional bool httpalwaysload = 10;
2890
+
2891
+ /** @comment [http] Use a caching HTTP proxy to load data */
2892
+ optional bool uselocalhttpproxy = 11
2893
+ [default = false];
2894
+
2895
+ /** @comment [http] Advanced configuration options for making the http requests */
2896
+ optional HTTPDownloadRequestInformation httpconfig = 25;
2897
+
2898
+ /** @comment [keyframe] Motion data as an array of keyframes. Values in between keyframes will be interpolated */
2899
+ repeated KeyFrameTrackData keyframes = 12;
2900
+
2901
+ enum Interpolation{
2902
+ /** Linear interpolation */
2903
+ INTERPOL_LINEAR = 1;
2904
+
2905
+ /** Bezier interpolation */
2906
+ INTERPOL_BEZIER = 2;
2907
+ }
2908
+
2909
+ optional Interpolation keyframeinterpolation = 21
2910
+ [default=INTERPOL_LINEAR];
2911
+
2912
+ /** @comment [affine] Scaling (Size) motion data for affine transformations */
2913
+ optional TrackData scaledata=14;
2914
+
2915
+ /** @comment [affine] Rotation motion data for affine transformations*/
2916
+ optional TrackData rotatedata=15;
2917
+
2918
+ /** @comment [affine] Position motion data for affine transformations */
2919
+ optional TrackData translatedata=16;
2920
+
2921
+ /** @comment [affine] Anchor offset motion data for affine transformations*/
2922
+ optional TrackData anchordata=17;
2923
+
2924
+ /** @comment [affine] Trackdata transformed by affine transformation*/
2925
+ optional TrackData innertrackdata=18;
2926
+
2927
+ /** @comment [textposition] Trackdata derived from positions of a 'textsimple' ImageProvider*/
2928
+ optional ImageProvider text=19;
2929
+
2930
+ message TextPositionDescription{
2931
+
2932
+ enum Mode{
2933
+ /** Provide a point*/
2934
+ MODE_POINT = 4;
2935
+ /** Use width of the character(s) and a height according to 'aspectratio' to form a quad */
2936
+ MODE_WIDTH = 1;
2937
+ /** Use height of the character(s) and a width according to 'aspectratio' to form a quad */
2938
+ MODE_HEIGHT = 2;
2939
+ /** Use width and height of the character(s) to form a quad*/
2940
+ MODE_BOTH = 3;
2941
+ /** Use 'fixedwidth' and 'fixedheight' to form a quad*/
2942
+ MODE_FIXED = 5;
2943
+ /** Provide a point, but only use the x axis component and set y axis component to 0*/
2944
+ MODE_POINT_X = 7;
2945
+ /** Provide a point, but only use the y axis component and set x axis component to 0*/
2946
+ MODE_POINT_Y = 8;
2947
+ }
2948
+ enum PositionX{
2949
+ /** Position the quad/point before the character(s), e.g. right side of quad coincides witth left side of character area */
2950
+ POSX_BEFORE = 1;
2951
+ /** Position the quad/point on the left of the character(s), e.g. left side of quad coincides with left side of character area */
2952
+ POSX_LEFT = 2;
2953
+ /** Position the quad/point in the center of the character(s), e.g. center point of quad coincides with center point of character area */
2954
+ POSX_CENTER= 3;
2955
+ /** Position the quad/point on the rigth side of the character(s), e.g. right side of quad coincides with right side of character area */
2956
+ POSX_RIGHT = 4;
2957
+ /** Position the quad/point after the character(s), e.g. left side of quad coincides with right side of character area */
2958
+ POSX_AFTER = 5;
2959
+ }
2960
+ enum PositionY{
2961
+ /** Position the quad/point above the character(s), e.g. bottom side of quad coincides with top side of character area */
2962
+ POSY_ABOVE= 1;
2963
+ /** Position the quad/point on the top of the character(s), e.g. top side of quad coincides with top side of character area */
2964
+ POSY_TOP = 2;
2965
+ /** Position the quad/point in the middle of the character(s), e.g. middle point of quad coincides with middle point of character area */
2966
+ POSY_MIDDLE = 3;
2967
+ /** Position the quad/point on the bottom of the character(s), e.g. bottom side of quad coincides with bottom side of character area */
2968
+ POSY_BOTTOM = 4;
2969
+ /** Position the quad/point below the character(s), e.g. top side of quad coincides with bottom side of character area */
2970
+ POSY_BELOW = 5;
2971
+ /** Position the quad/point above the baseline of the character(s), e.g. bottom side of quad coincides with baseline */
2972
+ POSY_BASELINE_ABOVE = 6;
2973
+ /** Position the quad/point below the baseline of the character(s), e.g. top side of quad coincides with baseline */
2974
+ POSY_BASELINE_BELOW = 7;
2975
+ }
2976
+
2977
+ enum CharEnd{
2978
+ /** Count the end of the characters from total character count*/
2979
+ CHAREND_TOTAL = 1;
2980
+ /** Count the end of the characters from the end of the character displayed by the typewriter effect*/
2981
+ CHAREND_TYPEWRITER = 2;
2982
+ }
2983
+
2984
+ enum RangeNewLineMode{
2985
+ /** Include positions of all newlines in character ranges*/
2986
+ NL_ALL = 1;
2987
+ /** Include positions of single newlines (those that lead to an empty line) in character ranges*/
2988
+ NL_SINGLE = 2;
2989
+ /** Skip newlines in character ranges*/
2990
+ NL_NONE = 3;
2991
+ }
2992
+
2993
+ /** Mode to determine if single point or quad should be provided and has several options for quad dimensions*/
2994
+ optional Mode mode = 2
2995
+ [default = MODE_WIDTH];
2996
+ /** Positioning in X axis*/
2997
+ optional PositionX positionx = 3
2998
+ [default = POSX_CENTER];
2999
+ /** Positioning in Y axis*/
3000
+ optional PositionY positiony = 4
3001
+ [default = POSY_MIDDLE];
3002
+ /** Character index to base positions on or start of character range, if 'charindexend' is set; negative indices count from end*/
3003
+ optional int32 charindex = 5
3004
+ [default = 0];
3005
+ /** End of character range (inclusive) to base positions on; negative indices count from end*/
3006
+ optional int32 charindexend = 6;
3007
+ /** Which character to use as end for negative indexing*/
3008
+ optional CharEnd charendmode = 7
3009
+ [default = CHAREND_TOTAL];
3010
+ /** Aspect ratio used for mode MODE_WIDTH and MODE_HEIGHT */
3011
+ optional double aspectratio = 8
3012
+ [default = 1];
3013
+ /** Width used for mode MODE_FIXED */
3014
+ optional double fixedwidth = 9;
3015
+ /** Height used for mode MODE_FIXED */
3016
+ optional double fixedheight = 10;
3017
+ /** Option, which newlines to include in character ranges*/
3018
+ optional RangeNewLineMode rangeusenewlines = 11
3019
+ [default = NL_SINGLE];
3020
+ /** Additional relative adjustment of quad points after positioning */
3021
+ optional PosAdjust posadjust = 12;
3022
+ }
3023
+ /** @comment [textposition] Options used for the text dependend position data */
3024
+ optional TextPositionDescription textpositiondesc = 20;
3025
+
3026
+ enum Operator{
3027
+ OPERATOR_ADD = 1;
3028
+ OPERATOR_SUB = 2;
3029
+ OPERATOR_MUL = 3;
3030
+ OPERATOR_DIV = 4;
3031
+ }
3032
+ /** @comment [computed] which operator to use to compute data from to inner trackdata objects */
3033
+ optional Operator computedoperator = 22
3034
+ [default = OPERATOR_ADD];
3035
+ /** @comment [computed] Trackdata used as first operand in computation*/
3036
+ optional TrackData computedoperand1=23;
3037
+ /** @comment [computed] Trackdata used as second operand in computation*/
3038
+ optional TrackData computedoperand2=24;
3039
+ }
3040
+ /**
3041
+ Structure for a keyframe used in transformation onvolving tracking, motion tracking, or gemotric transformations. These keyframe support easing via Bezier functions.
3042
+ */
3043
+ message KeyFrameTrackData{
3044
+
3045
+
3046
+ enum Type{
3047
+ /** Use 'points' directly */
3048
+ embedded = 1;
3049
+
3050
+ /** Use the points provided by 'trackdata' */
3051
+ reference = 2;
3052
+ }
3053
+
3054
+ optional Type type=1
3055
+ [default=embedded];
3056
+
3057
+ /** frame number */
3058
+ optional int32 offset=2
3059
+ [default=0];
3060
+
3061
+ /** @comment [embedded] keyframe values */
3062
+ optional PointsVector points=3;
3063
+
3064
+ /** @comment [embedded] grid width */
3065
+ optional int32 gridwidth = 11;
3066
+ /** @comment [embedded] grid height */
3067
+ optional int32 gridheight = 12;
3068
+
3069
+ /** Y value of the first temporal control point */
3070
+ optional double incoming_velocity = 5
3071
+ [default = 0.0];
3072
+
3073
+ /** X value of the first temporal control point */
3074
+ optional double incoming_influence = 6
3075
+ [default = 0.0];
3076
+
3077
+ /** Y value of the second temporal control point */
3078
+ optional double outgoing_velocity = 7
3079
+ [default = 0.0];
3080
+ /** X value of the second temporal control point */
3081
+ optional double outgoing_influence = 8
3082
+ [default = 0.0];
3083
+
3084
+ /** @comment [reference] TrackData object queried for points */
3085
+ optional TrackData trackdata = 9;
3086
+ /** @comment [reference] offset into the tracking data specified in 'trackdata' */
3087
+ optional int32 contentoffset = 10;
3088
+
3089
+ /** @comment [embedded] Bezier control point keyframe values */
3090
+ optional PointsVector incomingcontrol = 14;
3091
+ /** @comment [embedded] Bezier control point keyframe values */
3092
+ optional PointsVector outgoingcontrol = 15;
3093
+
3094
+ /** @comment [reference] Bezier control points keyframe values provided by TrackData object */
3095
+ optional TrackData incomingcontroltrackdata = 16;
3096
+ /** @comment [reference] Bezier control points keyframe values provided by TrackData object */
3097
+ optional TrackData outgoingcontroltrackdata = 17;
3098
+ }
3099
+
3100
+ /** Structure to hold motion data. To be used when data is embedded directly in the SDL and not loaded from a file. */
3101
+ message EmbeddedTrackData{
3102
+ /** Motion data */
3103
+ repeated PointsVector frames=2;
3104
+
3105
+ /** Number of points per frame (horizonally, usually 2) */
3106
+ optional int32 width=3
3107
+ [default =0];
3108
+
3109
+ /** Number of points per frame (vertically, usually 2) */
3110
+ optional int32 height=4
3111
+ [default =0];
3112
+
3113
+ /** @internal */
3114
+ optional Point motionstart = 5;
3115
+
3116
+ /** @internal */
3117
+ optional Point motionend = 6;
3118
+ }
3119
+
3120
+ /*
3121
+ * @deprecated
3122
+ */
3123
+ message TrackDataFrame{
3124
+ optional PointsVector points=2;
3125
+ }
3126
+
3127
+
3128
+ /**
3129
+ @undocumented
3130
+
3131
+ Subtitles are half dynamic content and can be preencoded, when all languages(possible variations) are specified at Movie creation time
3132
+ */
3133
+ message Subtitles{
3134
+ /** ImageProvider that provides subtitles overlays, expected to have a map variable with key SubtitleFunctor::language_identifier */
3135
+ required ImageProvider content =2;
3136
+
3137
+ /** all languages for which subtitles will be preencoded */
3138
+ repeated string languages =3;
3139
+
3140
+ }
3141
+
3142
+ /**
3143
+ Variable messages can fetch data like user names or coordinates dynamically at rendering time
3144
+ At the moment there are string and PointVector variables.
3145
+ StringVariables are used in TextRendering and in FileLocations.
3146
+ PointVectorVariables provide user supplied morph points for the MLS transformation.
3147
+ As soon as a dynamic variable (not const, add, condition or boolean) is used somewhere in a Scene the whole Scene becomes dynamic
3148
+ */
3149
+ message StringVariable{
3150
+ enum Type{
3151
+ /** constant variable, use value*/
3152
+ constant=0;
3153
+
3154
+ /** fetch value from file, discontinued*/
3155
+ file=1;
3156
+
3157
+ /** fetch value over http*/
3158
+ http=2;
3159
+
3160
+ /** fetch value from map of GET-parameters*/
3161
+ map=3;
3162
+
3163
+ /** randomly select a value from randomvalues*/
3164
+ random=4;
3165
+
3166
+ /** meta variable, that adds the values of two variables together*/
3167
+ add=5;
3168
+
3169
+ /** iv tool support for selector/target based filename retrieval*/
3170
+ target = 6;
3171
+
3172
+ /** variable getting values from an iv tool datasource*/
3173
+ datasource = 7;
3174
+
3175
+ /** tests if file exists*/
3176
+ fileexists = 8;
3177
+
3178
+ /** uses path-syntax to retrieve data from structured input (only JSON and JSONPath implemented) */
3179
+ structureddata = 9;
3180
+
3181
+ /** evaluates condition using variable1 comparing with operator to specified values, intended for enablevars */
3182
+ condition = 65;
3183
+
3184
+ /** was boolean*/
3185
+ logical = 66;
3186
+
3187
+ /** changes value from counterstart to counterend based on function, expects parsable input */
3188
+ counter = 67;
3189
+
3190
+ /** escapes value of inner variable for use in URLS*/
3191
+ urlescape = 69;
3192
+
3193
+ /** transform string value of inner variable */
3194
+ transform = 70;
3195
+
3196
+ /** template variable, taking template substitution values directly from a context build from the map parameters */
3197
+ format = 68;
3198
+
3199
+ /** time providing variable, that gives either current date/time or user specified date/time as floating point number (e.g. for use in counter) */
3200
+ datetime = 71;
3201
+ }
3202
+
3203
+ /** Type of this variable */
3204
+ required Type type=1;
3205
+
3206
+ /** @comment [file, http, map] Location/key where the value can be retrieved */
3207
+ optional FileLocation source=2;
3208
+
3209
+ /** @comment [map, datasource] (Query-) Parameter name */
3210
+ optional string key=7;
3211
+
3212
+ /** @comment [random] values from which one is randomly picked*/
3213
+ repeated string randomvalues=3;
3214
+
3215
+ /** @comment [constant, template] Value*/
3216
+ optional string value =4;
3217
+
3218
+ /** @comment [add] Variable for first parameter*/
3219
+ optional StringVariable variable1=5;
3220
+
3221
+ /** @comment [add] Variable for second parameter*/
3222
+ optional StringVariable variable2=6;
3223
+
3224
+ /** @comment [map] Default value */
3225
+ optional string defaultvalue = 8;
3226
+
3227
+ /** @comment [datasource] Column name*/
3228
+ optional string column =9;
3229
+
3230
+ /** @comment [datasource] Default row*/
3231
+ optional string defaultrow =10;
3232
+
3233
+ /* Data encoding for Structured Data StringVariables */
3234
+ enum StructuredDataType{
3235
+ structured_json = 1;
3236
+ }
3237
+
3238
+ /** @comment [structureddata] Type*/
3239
+ optional StructuredDataType structureddatatype =11
3240
+ [default=structured_json];
3241
+
3242
+ /** @comment [structureddata] Input data*/
3243
+ optional StringVariable structureddatainput=12;
3244
+
3245
+ /** @comment [structureddata] Data source*/
3246
+ optional StringVariable path=13;
3247
+
3248
+ /** @comment [structureddata] Variable for dynamic formatting of integers*/
3249
+ optional StringVariable integerformat=14;
3250
+
3251
+ /** @comment [structureddata] Variable for dynamic formatting of floating point values*/
3252
+ optional StringVariable floatingpointformat=15;
3253
+
3254
+ /* Conditions for StringVariables of type "condition" */
3255
+ enum ConditionOperator{
3256
+ IN=1;
3257
+ NOT_IN=2;
3258
+ BEGINS_WITH=3;
3259
+ ENDS_WITH=4;
3260
+ }
3261
+
3262
+ /** @comment [condition] Operator to use when evaluation condition expressions*/
3263
+ optional ConditionOperator conditionoperator = 16
3264
+ [default=IN];
3265
+
3266
+ /** @comment [condition] -´Array of values to test for <pre>IN</pre>, <pre>BEGINS_WITH</pre> and <pre>ENDS_WITH</pre> operations*/
3267
+ repeated string conditionvalues = 17;
3268
+
3269
+ /** @comment [condition] Value to return for trueness */
3270
+ optional string conditiontruevalue = 27
3271
+ [default = "t"];
3272
+
3273
+ /** @comment [condition] Value to return for falseness*/
3274
+ optional string conditionfalsevalue = 28
3275
+ [default = ""];
3276
+
3277
+ /* Operations for StringVariables of type "logical" */
3278
+ enum BooleanOperator{
3279
+ AND=1;
3280
+ OR=2;
3281
+ NAND=3;
3282
+ NOR=4;
3283
+ NOT=5;
3284
+ }
3285
+
3286
+ /** @comment [logical] Operator to use when avaluating logical expressions */
3287
+ optional BooleanOperator booleanoperator = 18
3288
+ [default=AND];
3289
+
3290
+ /** @comment [counter] Start value for counter */
3291
+ optional StringVariable counterstart = 19;
3292
+
3293
+ /** @comment [counter] End value for counter */
3294
+ optional StringVariable counterend = 20;
3295
+
3296
+ enum CounterValueType{
3297
+ CVT_START_END = 1;
3298
+ CVT_OFFSET_TO_START = 2;
3299
+ CVT_OFFSET_TO_END = 3;
3300
+ }
3301
+
3302
+ /** @comment [counter] -*/
3303
+ optional CounterValueType countervaluetype = 26
3304
+ [default = CVT_START_END];
3305
+
3306
+ /** @comment [counter] Animation function to advance the counter with each frame. */
3307
+ optional Function counterfunction = 21;
3308
+
3309
+ /** Counter value interpretation mode */
3310
+ enum CounterFormat{
3311
+ FORMAT_INT = 1;
3312
+ FORMAT_FLOAT = 2;
3313
+ FORMAT_TIME = 3;
3314
+ }
3315
+
3316
+ /** @comment [counter] How to interpret counter value before formatting the output string */
3317
+ optional CounterFormat counterformattype = 22
3318
+ [default = FORMAT_INT];
3319
+
3320
+ /** @comment [counter] A variable to supply the format to <var>formatstring</var>*/
3321
+ optional StringVariable counterformat = 23;
3322
+
3323
+ /** Rounding mode for counter type StringVariables */
3324
+ enum RoundingMode{
3325
+ RND_ROUND = 1;
3326
+ RND_CEIL = 2;
3327
+ RND_FLOOR = 3;
3328
+ }
3329
+
3330
+ /** @comment [counter] Round fractional counter values up or down */
3331
+ optional RoundingMode roundingmode = 24
3332
+ [default = RND_FLOOR];
3333
+
3334
+ /** Time units for Counter type StringVariables */
3335
+ enum TimeUnit{
3336
+ TU_MILLISECOND = 1;
3337
+ TU_SECOND = 2;
3338
+ TU_MINUTE = 3;
3339
+ TU_HOUR = 4;
3340
+ TU_DAY = 5;
3341
+ }
3342
+
3343
+ /** @comment [counter] Counter value is interpreted as this time unit */
3344
+ optional TimeUnit countertimeunit = 25
3345
+ [default = TU_SECOND];
3346
+
3347
+ /** @comment [counter] C printf like format string or a time format string ( %D for days, %H for hours, %M for minutes, %S for seconds, %L for milliseconds; execept for days, use lower case characters instead to get a value bounded to the next greater unit (e.g "%H:%02m:%02s" for a clock))
3348
+ @comment [format] A variable substitution string (e.g. "Hello ${name}, how are you?") */
3349
+ optional string formatstring = 29;
3350
+
3351
+ /** @comment [counter, format] Do not throw errors if value cannot be converted with given format string */
3352
+ optional bool ignoreformaterrors = 30
3353
+ [default = false];
3354
+
3355
+ /** @comment [format] Urlescape all variable values before substitution*/
3356
+ optional bool urlescapeall = 38
3357
+ [default = false];
3358
+
3359
+ message KVEntry{
3360
+ required string key = 1;
3361
+ optional StringVariable value = 2;
3362
+ }
3363
+ /** @comment [foramt] Addditional variable substitutions, that get added to the substitution context. If there already was an entry with the same key in the substitution context the old value is shadowed by the newly added value*/
3364
+ repeated KVEntry formatadditionalsubstitutions = 39;
3365
+
3366
+ /** String transformations for StringVariable */
3367
+ enum TransformMode{
3368
+ TRANS_LOWER = 1;
3369
+ TRANS_UPPER = 2;
3370
+ TRANS_TITLE = 3;
3371
+ TRANS_ARABIC = 4;
3372
+ TRANS_WORDWRAP = 5;
3373
+ TRANS_SUBSTR = 6;
3374
+ }
3375
+
3376
+ /** @comment [transform] Type of text transform to perform */
3377
+ optional TransformMode transformmode = 31
3378
+ [default=TRANS_UPPER];
3379
+
3380
+ /** @comment [transform] number of characters per line used as hint for wordwrapping */
3381
+ optional int32 wordwraphint = 32;
3382
+
3383
+ /** @comment [transform] start index for the substring */
3384
+ optional int32 substringstart = 35;
3385
+ /** @comment [transform] length of the substring, default (-1) means till endof input*/
3386
+ optional int32 substringlength = 36
3387
+ [default=-1];
3388
+
3389
+
3390
+ /** @comment [datetime] Unit for the time returned from datetime variable, defaults to second*/
3391
+ optional TimeUnit datetimeunit = 33
3392
+ [default = TU_SECOND];
3393
+
3394
+ /** @comment [datetime] User provided date/time in ISO 8601 format, leave unset for current date/time*/
3395
+ optional StringVariable datetimestring = 34;
3396
+
3397
+ /** @comment [http] Advanced configuration options for making the http requests */
3398
+ optional HTTPDownloadRequestInformation httpconfig = 37;
3399
+
3400
+
3401
+ extensions 1000 to 1999;
3402
+
3403
+ }
3404
+
3405
+ /**
3406
+ * A vector of 2D points
3407
+ */
3408
+ message PointsVector{
3409
+ /** Array of Points */
3410
+ repeated Point points=1;
3411
+ }
3412
+
3413
+ /**
3414
+ * A 2D Point
3415
+ */
3416
+ message Point{
3417
+ /** x value */
3418
+ optional double x=1;
3419
+
3420
+ /** y value */
3421
+ optional double y=2;
3422
+ }
3423
+
3424
+ message PointsVariable{
3425
+ enum Type{
3426
+ /** constant variable, use value*/
3427
+ constant=0;
3428
+ /** fetch value from file*/
3429
+ file=1;
3430
+ /** fetch value over http*/
3431
+ http=2;
3432
+ /** fetch value from map of GET-parameters*/
3433
+ map=3;
3434
+ /** randomly select a value from randomvalues*/
3435
+ random=4;
3436
+ /** meta variable, that adds the values of two variables together*/
3437
+ add=5;
3438
+ /** iv tool support for selector/target based filename retrieval*/
3439
+ target = 6;
3440
+ /** variable getting values from an iv tool datasource*/
3441
+ datasource = 7;
3442
+ /** tests if file exists*/
3443
+ fileexists = 8;
3444
+ /** uses path-syntax to retrieve data from structured input (only JSON and JSONPath implemented)*/
3445
+ structureddata = 9;
3446
+
3447
+ /** unused */
3448
+ condition = 65;
3449
+
3450
+ /** unused */
3451
+ /** boolean = 66;*/
3452
+ logical = 66;
3453
+ }
3454
+
3455
+ /** Type of this variable */
3456
+ required Type type=1;
3457
+
3458
+ /** Default value */
3459
+ optional PointsVector defaultvalue = 8;
3460
+
3461
+ /** @comment [file, http, map] Location/key where the value can be retrieved */
3462
+ optional FileLocation source=2;
3463
+
3464
+ /** @comment [map] (Query-) Parameter name */
3465
+ optional string key=7;
3466
+
3467
+
3468
+ /** @comment [random] Array of <var>PointsVector</var> objects. One value is choosen by random. */
3469
+ repeated PointsVector randomvalues=3;
3470
+ optional PointsVector value =4;
3471
+
3472
+ /** @comment [add] <var>PointsVector</var> in <var>variable1</var> will be concatinated with values from <var>variable2</var> */
3473
+ optional PointsVariable variable1=5;
3474
+
3475
+ /** @comment [add] <var>PointsVector</var> in <var>variable1</var> will be concatinated with values from <var>variable2</var> */
3476
+ optional PointsVariable variable2=6;
3477
+
3478
+
3479
+ /** @comment [datasource] Column name */
3480
+ optional string column =9;
3481
+
3482
+ /** @comment [datasource] Row to supply data values when no key is provided*/
3483
+ optional string defaultrow =10;
3484
+
3485
+ /** Type of data for structured data in a PointsVariable */
3486
+ enum StructuredDataType{
3487
+ structured_json = 1;
3488
+ }
3489
+
3490
+ optional StructuredDataType structureddatatype =11
3491
+ [default=structured_json];
3492
+ optional StringVariable structureddatainput=12;
3493
+ optional StringVariable path=13;
3494
+ optional StringVariable integerformat=14;
3495
+ optional StringVariable floatingpointformat=15;
3496
+
3497
+ enum ConditionOperator{
3498
+ IN=1;
3499
+ NOT_IN=2;
3500
+ }
3501
+ optional ConditionOperator conditionoperator = 16
3502
+ [default=IN];
3503
+ repeated string deprecated_conditionvalues = 17;
3504
+ optional string conditiontruevalue = 27
3505
+ [default = "t"];
3506
+ optional string conditionfalsevalue = 28
3507
+ [default = ""];
3508
+
3509
+ enum BooleanOperator{
3510
+ AND=1;
3511
+ OR=2;
3512
+ NAND=3;
3513
+ NOR=4;
3514
+ }
3515
+ optional BooleanOperator booleanoperator = 18
3516
+ [default=AND];
3517
+
3518
+ /** @comment [http] Advanced configuration options for making the http requests */
3519
+ optional HTTPDownloadRequestInformation httpconfig = 37;
3520
+
3521
+ extensions 1000 to 1999;
3522
+
3523
+ }
3524
+
3525
+ /***
3526
+ * Container for the information needed for making downloads of resources, that have more requirements than a simple HTTP GET request.
3527
+ * i.e.: additional HTTP headers, user authentication, different HTTP methods than GET (POST, PUT), request body etc.
3528
+ * all the default values are for making simple unauthenticated HTTP GET
3529
+ */
3530
+ message HTTPDownloadRequestInformation{
3531
+
3532
+ enum HttpMethod{
3533
+ HTTP_GET = 1;
3534
+ HTTP_POST = 2;
3535
+ HTTP_PUT = 3;
3536
+ }
3537
+
3538
+ /** HTTP Method to use */
3539
+ optional HttpMethod method = 2
3540
+ [default=HTTP_GET];
3541
+
3542
+
3543
+ /** Content-type of the request body, will get overriden by also setting a "content-type" as part of the <var>headers<var> */
3544
+ optional string contenttype = 3;
3545
+
3546
+
3547
+ message KVEntry{
3548
+ required string key = 1;
3549
+ optional StringVariable value = 2;
3550
+ }
3551
+
3552
+ /** A list of headers added to the request */
3553
+ repeated KVEntry headers = 4;
3554
+
3555
+ enum BodyType{
3556
+ BODYTYPE_NONE = 1;
3557
+ BODYTYPE_FORM = 2;
3558
+ BODYTYPE_RAW = 3;
3559
+ }
3560
+
3561
+ /** If and what kind of body to send */
3562
+ optional BodyType bodytype = 5
3563
+ [default=BODYTYPE_NONE];
3564
+
3565
+ optional StringVariable rawbody = 6;
3566
+
3567
+ repeated KVEntry formentries = 7;
3568
+
3569
+ optional StringVariable username = 8;
3570
+ optional StringVariable password = 9;
3571
+
3572
+ message ExponentialBackoff{
3573
+ optional int32 retries = 2
3574
+ [default = 5];
3575
+ optional double factor = 3
3576
+ [default = 1.5];
3577
+ optional double waitsec = 4
3578
+ [default = 0.5];
3579
+ }
3580
+ optional ExponentialBackoff exponentialbackoff = 10;
3581
+
3582
+ }
3583
+
3584
+
3585
+
3586
+ /**
3587
+ * @undocumented
3588
+ */
3589
+ message Animation{
3590
+ optional Function function = 2;
3591
+ repeated AnimTransformation transformations = 3;
3592
+ optional int32 start = 4;
3593
+ optional int32 end = 5;
3594
+ optional bool invert = 6
3595
+ [default =false];
3596
+
3597
+ optional Pos3d position = 7;
3598
+ }
3599
+
3600
+
3601
+ /**
3602
+ * @undocumented
3603
+ */
3604
+ message AnimTransformation{
3605
+ /**
3606
+ * @undocumented
3607
+ */
3608
+ enum Type{
3609
+ translate = 1;
3610
+ shear = 2;
3611
+ scale = 3;
3612
+ rotatex = 4;
3613
+ rotatey = 5;
3614
+ rotatez = 6;
3615
+ }
3616
+
3617
+ required Type type = 1;
3618
+ optional double x = 2;
3619
+ optional double y = 3;
3620
+ optional double z = 4;
3621
+ optional double angle = 5;
3622
+
3623
+ }
3624
+
3625
+ /**
3626
+ * @undocumented
3627
+ */
3628
+ message AnimationPosition{
3629
+ required Pos3d tl = 1;
3630
+ required Pos3d tr = 2;
3631
+ required Pos3d br = 3;
3632
+ required Pos3d bl = 4;
3633
+ }
3634
+
3635
+ /**
3636
+ * @undocumented
3637
+ */
3638
+ message Pos3d{
3639
+ optional double x = 1
3640
+ [default =0.0];
3641
+ optional double y = 2
3642
+ [default =0.0];
3643
+ optional double z = 3
3644
+ [default =0.0];
3645
+ }
3646
+
3647
+ /**
3648
+ Function are used to animate values over time. The functions use normalized
3649
+ values in the range [0...1] for input (x value). The computed value (y value)
3650
+ is usually, but not necessarily, between [0..1].
3651
+
3652
+ Functions can be composed with other functions via addition or multiplication, or other operators.
3653
+ */
3654
+ message Function{
3655
+ enum Type{
3656
+ //all functions use innerfunction for function composition
3657
+
3658
+ //no parameter
3659
+ /** f(t)=if(1-t) */
3660
+ inverted = 1;
3661
+
3662
+ /** f(t)=|t| */
3663
+ abs =15;
3664
+
3665
+ /** f(t)=t */
3666
+ linear = 3;
3667
+
3668
+ //uses param1
3669
+
3670
+ /** f(t)=p1 */
3671
+ constant = 4;
3672
+
3673
+ /** f(t)=t^p1 */
3674
+ power= 5;
3675
+
3676
+ /** f(t)=sin(2pi * p1 * t) */
3677
+ sin = 6;
3678
+
3679
+ /** f(t)=p1*t*if(t) */
3680
+ factor = 7;
3681
+
3682
+ /** f(t)=1-(p1*(1-t)^2-(1-t))/(p1-1); */
3683
+ overshoot =8;
3684
+
3685
+ /** f(t)=(p1*t^2-t)/(p1-1);*/
3686
+ undershoot = 9;
3687
+
3688
+ /** f(t) = sigmoid(param1, param2) */
3689
+ sigmoid = 10;
3690
+
3691
+ /** f(t)= 1 if p1<=t<=p2, 0 else */
3692
+ switched = 11;
3693
+
3694
+ /**
3695
+ f(t) = if(0) if t<p1
3696
+ if(1) if t>p1
3697
+ if((t-p1)/(p2 -p1)) else
3698
+ */
3699
+ timed = 2;
3700
+
3701
+ //metafunction
3702
+ //higher order function using innerfunction and metafunctionparam
3703
+
3704
+ /** f(t)=mf(t)+if(t) */
3705
+ add = 12;
3706
+
3707
+ /** f(t)=mf(t)-if(t) */
3708
+ subtract = 13;
3709
+
3710
+ /** f(t)=mf(t)*if(t) */
3711
+ multiply = 14;
3712
+
3713
+ //keyframe function
3714
+ /** f(t) = lerp(LUT(t)) */
3715
+ keyframe = 16;
3716
+ }
3717
+
3718
+
3719
+ /** Type of function, see Function.Type */
3720
+ optional Type type = 1
3721
+ [default=linear];
3722
+
3723
+ /** Parameter 1 for functions (p1) */
3724
+ optional double param1 = 2;
3725
+
3726
+ /** Parameter 2 for functions (p2) */
3727
+ optional double param2 = 3;
3728
+
3729
+ /** parameter "if" for for function composition */
3730
+ optional Function innerfunction = 4;
3731
+
3732
+ /** parameter "mf" for for function composition */
3733
+ optional Function metafunctionparam = 5;
3734
+
3735
+ /** @comment [keyframe] Array of Points to be used as simple (not Advanced) keyframes. Point.x is interpreted as time , Point.x is interpreted as value */
3736
+ repeated Point keyframes = 6;
3737
+
3738
+ /** @comment [keyframe] Continue to interpolate values outside of ranges given by keyframes. If false last keyframe value will be used */
3739
+ optional bool extrapolate = 7
3740
+ [default=true];
3741
+
3742
+ /** Advanced keyframes can have relative times referencing either the beginning or the end of a container, expressed either as percentage in the range [0..1] or in absolute frame numbers. They also support easing via Bezier interpolation. */
3743
+ message KeyFrame{
3744
+
3745
+ /** Time reference type: var>relative</var> means to interpret the time as a percentage, <var>frame</var> means to take the value absolutely. */
3746
+ enum Type{
3747
+ relative = 1;
3748
+ frame = 2;
3749
+ }
3750
+
3751
+
3752
+ /** Type of time reference for a <var>Keyframe</var> in a <var>Function</var>. */
3753
+ optional Type type = 1
3754
+ [default=relative];
3755
+
3756
+ /** The time for this keyframe */
3757
+ optional double time=2;
3758
+
3759
+ /** The value for this keyframe */
3760
+ optional double value=3;
3761
+
3762
+ /** Constants for the <var>origin</var> parameter of a <var>Keyframe</var> in a <var>Function</var>*/
3763
+ enum OriginType{
3764
+ origin_start=1;
3765
+ origin_end=2;
3766
+ }
3767
+
3768
+ /** Time is relative to start or end of container */
3769
+ optional OriginType origin = 4
3770
+ [default=origin_start];
3771
+
3772
+ /** Y value of the first temporal control point */
3773
+ optional double incoming_velocity = 5
3774
+ [default = 0.0];
3775
+
3776
+ /** X value of the first temporal control point */
3777
+ optional double incoming_influence = 6
3778
+ [default = 0.0];
3779
+
3780
+ /** Y value of the second temporal control point */
3781
+ optional double outgoing_velocity = 7
3782
+ [default = 0.0];
3783
+
3784
+ /** X value of the second temporal control point */
3785
+ optional double outgoing_influence = 8
3786
+ [default = 0.0];
3787
+
3788
+ /** Incoming control value for spatial bezier interpolation */
3789
+ optional double incomingcontrol = 9;
3790
+ /** Outgoing control value for spatial bezier interpolation */
3791
+ optional double outgoingcontrol = 10;
3792
+ }
3793
+
3794
+ /** @comment [keyframe] Array of advanced <var>Keyframes</var> */
3795
+ repeated KeyFrame advancedkeyframes = 8;
3796
+
3797
+ enum Interpolation{
3798
+ /** Linear interpolation */
3799
+ INTERPOL_LINEAR = 1;
3800
+
3801
+ /** Cubic Bezier interpolation */
3802
+ INTERPOL_BEZIER = 2;
3803
+ }
3804
+
3805
+ optional Interpolation advancedkeyframeinterpolation = 21
3806
+ [default=INTERPOL_LINEAR];
3807
+
3808
+ extensions 1000 to 1999;
3809
+
3810
+ }
3811
+
3812
+ ///////////////////////
3813
+ //Variable Information
3814
+ ///////////////////////
3815
+
3816
+ message VariableInformation{
3817
+ repeated VariableInformationEntry entries = 2;
3818
+ optional int32 maxcombinations = 3
3819
+ [default=1];
3820
+ repeated DataSourceInformation datasources = 4;
3821
+ }
3822
+
3823
+ message VariableInformationEntry{
3824
+ required string key = 2;
3825
+ repeated string values = 3;
3826
+ optional bool undefinable = 4
3827
+ [default = false];
3828
+ }
3829
+
3830
+ message DataSourceInformation{
3831
+ enum Type{
3832
+ file=1;
3833
+ string=2;
3834
+ embedded=3;
3835
+ }
3836
+ optional Type type = 1
3837
+ [default=file];
3838
+ required string key = 2;
3839
+ optional FileLocation source = 3;
3840
+ optional string defaultrow = 4;
3841
+ optional StringVariable variable = 5;
3842
+ optional EmbeddedDataSourceInformation embeddeddatasource = 6;
3843
+ }
3844
+
3845
+ message EmbeddedDataSourceInformation{
3846
+ repeated string columnnames = 2;
3847
+ repeated EmbeddedDataSourceInformationRow rows = 3;
3848
+ }
3849
+
3850
+ message EmbeddedDataSourceInformationRow{
3851
+ required string rowid = 2;
3852
+ repeated string columns = 3;
3853
+ }
3854
+
3855
+
3856
+ ////////////////////////
3857
+ //Metadata
3858
+ ////////////////////////
3859
+ /** A key value pair */
3860
+ message Metadata{
3861
+ required string key = 2;
3862
+ optional string value = 3;
3863
+ }
3864
+
3865
+ /** A key value pair */
3866
+ message KeyValuePair{
3867
+ required string key = 2;
3868
+ optional string value = 3;
3869
+ }
3870
+
3871
+
3872
+ ///////////////////////////
3873
+ // Pie Chart
3874
+ //////////////////////////
3875
+
3876
+ message PieChartArcDescription{
3877
+ optional StringVariable percent =2;
3878
+ optional Color color=3;
3879
+ }
3880
+
3881
+ message PieChartDescription{
3882
+ repeated PieChartArcDescription finished_arcs = 2;
3883
+ optional PieChartArcDescription current_arc = 3;
3884
+ optional double current_arc_completion = 4
3885
+ [default = 1.0];
3886
+ optional Function current_arc_completion_function = 5;
3887
+ enum Direction{
3888
+ clockwise = 0;
3889
+ counterclockwise = 1;
3890
+ }
3891
+ optional Direction direction = 6
3892
+ [default = clockwise];
3893
+ optional double radius = 7
3894
+ [default = 50];
3895
+ optional double offset = 8;
3896
+ }
3897
+
3898
+
3899
+ ///////////////////////////
3900
+ // Bar Chart
3901
+ //////////////////////////
3902
+
3903
+ message BarChartBarDescription{
3904
+ optional StringVariable value =2;
3905
+ optional Color color=3;
3906
+ }
3907
+
3908
+ message BarChartDescription{
3909
+ repeated BarChartBarDescription finished_bars = 2;
3910
+ optional BarChartBarDescription current_bar = 3;
3911
+ optional double current_bar_completion = 4
3912
+ [default = 1.0];
3913
+ optional Function current_bar_completion_function = 5;
3914
+
3915
+ optional int32 num_bars = 6
3916
+ [default = 3];
3917
+
3918
+ optional double max_val = 9
3919
+ [default = 100];
3920
+ }
3921
+
3922
+
3923
+ ///////////////////////////
3924
+ // Image Bar Chart
3925
+ //////////////////////////
3926
+
3927
+ message ImageBarChartBarDescription{
3928
+ optional StringVariable value =2;
3929
+ optional ImageProvider image=3;
3930
+ optional double image_equivalent=4
3931
+ [default = 1.0];
3932
+ }
3933
+
3934
+ message ImageBarChartDescription{
3935
+ repeated ImageBarChartBarDescription finished_bars = 2;
3936
+ optional ImageBarChartBarDescription current_bar = 3;
3937
+ optional double current_bar_completion = 4
3938
+ [default = 1.0];
3939
+ optional Function current_bar_completion_function = 5;
3940
+
3941
+ optional int32 num_bars = 6
3942
+ [default = 3];
3943
+ }
3944
+
3945
+
3946
+
3947
+ ///////////////////////////
3948
+ // Line Chart
3949
+ //////////////////////////
3950
+
3951
+ enum LineCapStyle{
3952
+ cap_square=0; // CAIRO_LINE_CAP_SQUARE - flat endings, thickness also influences length of lines
3953
+ cap_round=1; // CAIRO_LINE_CAP_ROUND - round endings, thickness also influences length of lines
3954
+ cap_butt=2; // CAIRO_LINE_CAP_BUTT - flat endings, thick lines are exactly as long as thin lines
3955
+ }
3956
+
3957
+
3958
+ message LineChartDescription{
3959
+ optional TrackData points = 2;
3960
+
3961
+ optional int32 num_finished_lines = 3
3962
+ [default = 0];
3963
+ optional int32 current_line = 4
3964
+ [default = 0];
3965
+ optional double current_line_completion = 5
3966
+ [default = 1.0];
3967
+ optional Function current_line_completion_function = 6;
3968
+
3969
+ optional Color color = 7;
3970
+ optional double line_width = 8
3971
+ [default = 1.0];
3972
+
3973
+ optional LineCapStyle cap_style = 9
3974
+ [default = cap_round];
3975
+
3976
+ optional double min_x = 10
3977
+ [default = 0];
3978
+
3979
+ optional double min_y = 11
3980
+ [default = 0];
3981
+
3982
+ optional double max_x = 12
3983
+ [default = 1];
3984
+
3985
+ optional double max_y = 13
3986
+ [default = 1];
3987
+ }
3988
+
3989
+
3990
+
3991
+
3992
+ ///////////////////////////
3993
+ // Bezier
3994
+ //////////////////////////
3995
+
3996
+
3997
+ message BezierDescription{
3998
+ optional TrackData points = 2;
3999
+ optional Color color = 5;
4000
+ optional double line_width = 6
4001
+ [default = 1.0];
4002
+ optional LineCapStyle cap_style = 7
4003
+ [default = cap_round];
4004
+ optional double completion = 8
4005
+ [default = 1.0];
4006
+ optional Function completion_function = 9;
4007
+ }
4008
+
4009
+
4010
+ /**
4011
+ * Audio and video codecs available
4012
+ */
4013
+ enum Codec {
4014
+ option allow_alias = true;
4015
+
4016
+ /** No video */
4017
+ VIDEO_NONE = 0;
4018
+
4019
+ /** VP6 Flash video */
4020
+ VIDEO_FLV =1;
4021
+
4022
+ /** H.263 (Ole Flash Players) */
4023
+ VIDEO_H263 =2;
4024
+
4025
+ /** @internal */
4026
+ VIDEO_E264=3;
4027
+
4028
+ /** Multi-purpose H.264 (MP4, FLV, HLS, MPEG-DASH) */
4029
+ VIDEO_H264=4;
4030
+
4031
+ /** Low-efficiency (mobile) H.264 (MP4, FLV, HLS, MPEG-DASH) */
4032
+ VIDEO_X264_BASELINE=5;
4033
+
4034
+ /** Multi-purpose (Main Profile) H.264 (MP4, FLV, HLS, MPEG-DASH) */
4035
+ VIDEO_X264=6;
4036
+
4037
+ /** Multi-purpose (High Profile) H.264 (MP4, FLV, HLS, MPEG-DASH) */
4038
+ VIDEO_X264_HIGH=16;
4039
+
4040
+ /** Multi-purpose VP8 Codec for WebM video */
4041
+ VIDEO_VP8=14;
4042
+
4043
+ /** MPEG2 Codec for MPEG (.mpg) video */
4044
+ VIDEO_MPEG2=17;
4045
+
4046
+ /** Window Media (WMV) */
4047
+ VIDEO_WMV=18;
4048
+
4049
+ /** Animated GIF (small/short videos only) */
4050
+ VIDEO_GIF=19;
4051
+
4052
+ /** Multi-pupose high-quality professional Codec (.mov)*/
4053
+ VIDEO_PRORES=20;
4054
+
4055
+ /** No Audio */
4056
+ AUDIO_NONE = 0;
4057
+
4058
+ /** High quality ACC audio codec */
4059
+ AUDIO_AAC=7;
4060
+
4061
+ /** MPEG-2 (obsolete)*/
4062
+ AUDIO_MP2=8;
4063
+
4064
+ /** MPEG-3 (MP3)*/
4065
+ AUDIO_MP3=9;
4066
+
4067
+ /** @internal */
4068
+ AUDIO_EAAC=11;
4069
+
4070
+ /** Obsolete mobile phone audio codec */
4071
+ AUDIO_AMR_NB=12;
4072
+
4073
+ /** Obsolete mobile phone audio codec */
4074
+ AUDIO_AMR_WB=13;
4075
+
4076
+ /** High quality audio codec for use with VP8 video (WebM)*/
4077
+ AUDIO_VORBIS=15;
4078
+
4079
+ AUDIO_PCM=21;
4080
+ }
4081
+