The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::TimeLapse::RangeDef - Range-Definitionen

BASE CLASS

Quiq::Hash

SYNOPSIS

    # Klasse laden
    use %CLASS;
    
    # Instantiiere Range-Defintions-Objekt
    $trd = Quiq::TimeLapse::RangeDef->new('/my/timelapse/dir');
    
    # Liste der Clip-Bezeichner
    @keys = $trd->clipKeys;
    
    # Hash der Clip-Properties
    $h = $trd->clipProperties;
    
    # Liste der Range-Bezeichner
    @keys = $trd->rangeKeys;
    
    # Bildfolgen-Ausdruck zu einem Clip- oder Range-Bezeichner
    $expr = $trd->expression($key);

DESCRIPTION

Ein Objekt der Klasse kapselt die Definitionen aus einer oder mehrerer range.def-Dateien, die sich innerhalb eines Verzeichnisbaums befinden.

Syntax

Eine range.def-Datei besteht aus Zeilen folgender Art:

  • Leerzeile (leer oder nur Whitespace)

  • Kommentar-Zeile (# als erstes non-Whitespace-Zeichen)

  • Clip-Definitionszeile (beginnt mit "Clip:")

  • Range-Definitionszeile (KEY EXPR)

  • Range-Fortsetzungszeile (Zeile mit Whitspace am Anfang, gefolgt von einer Fortsetzung von EXPR)

Leerzeilen und Kommentarzeilen werden überlesen. Ein Kommentar am Ende einer Zeile wird entfernt.

Clip-Definition

Eine Clip-Definition hat den Aufbau:

    Clip: KEY PROPERTY=VALUE ...

KEY ist der Name/Bezeichner des Clip. Die Property-Liste PROPERTY=VALUE ... ist optional.

Clip-Properties

Folgende Clip-Properties können vereinbart werden:

endFrames=N

Dauer des Nachspanns mit dem Ende-Frame in Sekunden. Ein negativer Wert setzt die (Mindest-)Dauer des Clip fest.

framerate=N

Anzahl Bilder pro Sekunde.

pick=N

Nur jedes N-te Bild ist Teil des Clip.

reverse=BOOL

Die Bildfolge wird umgedreht.

Range-Definition

Eine Range-Definition besteht aus einem Namen/Bezeichner KEY und einem Bildfolgen-Ausdruck EXPR. Diese sind durch Whitspace getrennt. Der Ausdruck EXPR darf sich über mehrere Zeilen erstrecken, wenn die Folgezeilen mit Whitespace eingeleitet werden.

Bildfolgen-Ausdruck

Ein Bildfolgen-Ausdruck EXPR besteht aus 0 oder mehr Teilausdrücken, die mit Whitespace voneinender getrennt sind. Teilausdrücke sind:

    N  .................. Einzelbild N
    N-M ................. Bildnummern-Bereich N bis M
    KEY ................. die Bilder des Clip oder Range KEY
    all ................. sämtliche Bilder des Zeitraffer-Verzeichnisses
    used ................ die Bilder aller Ranges
    unused .............. die Bilder, die zu keinem Range gehören
    junk ................ Bilder von unused, die per {} ausgesondert sind
    duplicate(N,EXPR) ... jedes Bild in EXPR wird N-mal dupliziert
    randomize(N,EXPR) ... zufällige Auswahl von N Bildern aus Vorrat EXPR
    repeat(N,EXPR) ...... Bildfolge EXPR wird N-mal wiederholt
    reverse(EXPR) ....... Bildfolge EXPR wird umgedreht
    {EXPR} .............. die Bilder aus EXPR werden als Junk betrachtet
    [EXPR] .............. Teilsausdruck EXPR wird nicht berücksichtigt

Betrachten wir all, used, unused, junk als Mengen, also Bildvorräte ohne Berücksichtigung der Reihenfolge, gilt:

  • all ist die Vereinigung von used und unused

  • used und unused sind disjunkt

  • junk ist eine Teilmenge von unused

EXAMPLE

    # Bilder 1 .. 58
    Clip: autofahrt framerate=8
    strecke1 1-23 {24-30}
    strecke2 31-58

METHODS

Konstruktor

new() - Instantiiere Range-Definitions-Objekt

Synopsis

    $trd = $class->new($dir);

Arguments

$dir

Pfad zu Verzeichnisstruktur

Returns

Referenz auf das Range-Definitions-Objekt oder undef

Description

Instantiiere ein Range-Definitions-Objekt aus den range.def-Dateien in der Verzeichnisstruktur $dir und liefere eine Referenz auf dieses Objekt zurück. Existiert keine range.def Datei, wird kein Objekt instantiiert und undef geliefert.

Objektmethoden

files() - Liste der Range-Dateien

Synopsis

    @files|$fileA = $trd->files;

Returns

Liste von Datei-Pfaden. Im Skalarkontext liefere eine Referenz auf die Liste.

Description

Liefere die Liste der Range-Dateien in sortierter Reihenfolge.

clipKeys() - Liste der Clip-Bezeichner

Synopsis

    @keys|$keyA = $trd->clipKeys;

Returns

Liste von Clip-Bezeichnern. Im Skalarkontext liefere eine Referenz auf die Liste.

Description

Liefere die Liste aller Clip-Bezeichner in der Reihenfolge ihrer Definition in der Range-Datei.

clipProperties() - Hash der Clip-Properties

Synopsis

    $h = $trd->clipProperties($key);

Returns

Referenz auf Restricted-Hash

Description

Liefere eine Referenz auf den Hash mit den Properties des Clip $key.

rangeKeys() - Liste der Range-Bezeichner

Synopsis

    @keys|$keyA = $trd->rangeKeys;

Returns

Liste von Range-Bezeichnern. Im Skalarkontext liefere eine Referenz auf die Liste.

Description

Liefere die Liste aller Range-Bezeichner in der Reihenfolge ihrer Definition in der Range-Datei.

rangeCount() - Anzahl der definierten Ranges

Synopsis

    $n = $trd->rangeCount;

Returns

Integer >= 0

Description

Liefere die Anzahl der Range-Bezeichner. Diese Methode kann genutzt werden um festzustellen, ob Ranges definiert sind.

expression() - Bildfolgen-Ausdruck zu Clip- oder Range-Bezeichner

Synopsis

    $expr = $trd->expression($key);

Returns

Bildfolgen-Ausdruck (String)

Description

Liefere den Bildfolgen-Ausdruck des Clip- oder Range-Bezeichners $key. Geklammerte Teile sind nicht enthalten (siehe Abschnitt "Syntax").

VERSION

1.134

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2019 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.