http://www.spinellis.gr/pubs/trade/1993-Winmag/fastwin7/html/win7.html
This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:

The document's metadata is available in BibTeX format.

Find the publication on Google Scholar

This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.

Diomidis Spinellis Publications

ΥΛΟΠΟΙΗΣΗ ΕΦΑΡΜΟΓΩΝ MULTIMEDIA: Ελέγχοντας την Video Machine

Διομήδης Δ. Σπινέλλης
Multimedia Products Technical Support
FAST Hellas S.A.
Εθνικής Αντιστάσεως 14α, 152 32 Χαλάνδρι

Στο προηγούμενο τεύχος του περιοδικού παρουσιάστηκε το σύστημα desktop video publishing με τη Video Machine της FAST. Το σύστημα περιέχει το πρόγραμμα VM-Studio το οποίο παρέχει πολλές δυνατότητες για την οργάνωση και σύνθεση μιας ταινίας. Περιέχει μία πλούσια βιβλιοθήκη από οπτικά εφέ και ένα οπτικό σύστημα παρουσίασης της σύνθεσής τους για τη δημιουργία του τελικού αποτελέσματος. H Video Machine όμως εκτός από σύστημα για desktop video publishing μπορεί να αποτελέσει και μία πλατφόρμα multimedia εξαιρετικά υψηλών προδιαγραφών. Με εσωτερική μνήμη 2.5ΜΒ, δύο ψηφιοποιητές εικόνας, έξοδο video, πίνακες μετατροπής χρωμάτων, φωτεινότητας και διαφάνειας, και δυνατότητα ελέγχου συσκευών video με ακρίβεια ενός καρέ, μπορεί να αποτελέσει βάση πολύ φιλόδοξων εφαρμογών. Με τη χρήση των βιβλιοθηκών προγραμματισμού της κάρτας μπορεί κάποιος να υλοποιήσει σύνθετα ειδικά εφέ (π.χ. morphing), να δημιουργήσει μία εξειδικευμένη εφαρμογή (π.χ. αυτόματη παραγωγή τηλεοπτικών τίτλων), ή ένα σύγχρονο εκπαιδευτικό ή ψυχαγωγικό σύστημα. Ο προγραμματισμός της κάρτας γίνεται στα Windows μέσω βιβλιοθηκών DLL. Οι παράμετροι στις περισσότερες εντολές είναι σχετικές απλές, και έτσι οι DLL μπορούν να χρησιμοποιηθούν από περιβάλλοντα των Windows όπως η Visual Basic και C/C++, το Toolbook και η Microsoft Access. Στις παρακάτω ενότητες θα παρουσιάσουμε την αρχιτεκτονική της Video Machine και τις βασικές παραμέτρους του προγραμματισμού της κάτω από το περιβάλλον Windows.

Η αρχιτεκτονική του συστήματος

Η Video Machine μπορεί να επεξεργαστεί δύο πηγές εισόδου video, και να της ψηφιοποιήσει σε έναν ενταμιευτή εικόνας (frame buffer). Αυτόν τον ενταμιευτή μπορεί στη συνέχεια να μετατρέψει ξανά σε αναλογικό σήμα video. Κατά τη διαδικασία της μετατροπής του σήματος από αναλογικό σε ψηφιακό και αντίστροφα, μπορεί κανείς να ορίσει το ορθογώνιο τμήμα της εισόδου που θα ψηφιοποιηθεί, το τμήμα της μνήμης του ενταμιευτή που αυτό θα καταλάβει, καθώς και το τμήμα της εικόνας που τελικά θα απεικονίζεται (σχήμα 1). Αν κάποια από τα ορθογώνια έχουν διαφορετικά μεγέθη, τότε η εικόνα εκτείνεται ή συμπιέζεται έτσι ώστε να χωρέσει στο τελικό ορθογώνιο. Με τη χρήση αυτών των ορθογωνίων, μπορούμε να πετύχουμε εφέ όπως εικόνα μέσα σε εικόνα, μεγέθυνση ή σμίκρυνση, κινούμενο πλαίσιο μέσα σε εικόνα κ.λπ.


Σχήμα 1. Αρχιτεκτονική της Video Machine.

Εικόνα 1. Αντιστροφή της εικόνας.

Ο καθορισμός του μεγέθους των ορθογωνίων επιτυγχάνεται με τη χρήση της συνάρτησης VM_SetRects. Χρησιμοποιώντας την παράμετροVM_FLIP μπορούμε να αναποδογυρίσουμε ένα από τα ορθογώνια (εικόνα 1). Διαδοχική αργή αλλαγή του μεγέθους του ορθογωνίου εξόδου σε συνδυασμό με αναποδογύρισμα της εικόνας κάθε φορά που το μέγεθος μηδενίζεται μπορεί να χρησιμοποιηθεί για να δημιουργήσουμε το εφέ της περιστρεφόμενης εικόνας. Αν όλη η εικόνα σταλεί σε ένα μικρό ορθογώνιο του ενταμιευτή το οποίο στη συνέχεια χρησιμοποιηθεί σαν πηγή εξόδου, τότε επιτυγχάνουμε το εφέ των τετράγωνων εικονοστοιχείων (mosaic, εικόνα 4).

Εικόνα 4. Καθορισμός μεγέθους εικονοστοιχείων (mosaic).

Δυναμικά ειδικά εφέ

Μεγάλο ενδιαφέρον παρουσιάζει ο τρόπος συγχρονισμού της εικόνας και των εφέ. Τα περισσότερα εφέ στην τηλεόραση διαρκούν ελάχιστα, και απαιτούν προσεκτικό συγχρονισμό. Ιδανικά, κάθε μεταβολή των στοιχείων της εικόνας θα έπρεπε να συμβαίνει κατά τη διάρκεια που η ακτίνα του καθοδικού σωλήνα της τηλεόρασης δεν είναι ορατή, δηλαδή ανάμεσα στις εικόνες. Φυσικά αυτό είναι πολύ δύσκολο να πραγματοποιηθεί απλά μέσα από μια συνηθισμένη γλώσσα προγραμματισμού, αφού η διεργασία αυτή απαιτεί την εξυπηρέτηση διακοπών (interrupt handling). Αντί γι' αυτό στη video machine η διαδικασία επιτυγχάνεται με την εγγραφή όλων των τμημάτων του εφέ - βήμα προς βήμα - σε μία λίστα (σχήμα 2). Η εγγραφή μπορεί να γίνει με την ταχύτητα που εκτελείται η γλώσσα. Στη συνέχεια δίνουμε εντολή στη video machine να αρχίσει να εκτελεί τις εντολές από τη λίστα - μία εντολή σε κάθε εναλλαγή εικόνας, δηλαδή 25 εντολές το δευτερόλεπτο. Με αυτόν τον τρόπο μπορούμε να προγραμματίσουμε με απόλυτη ακρίβεια το χρόνο εξέλιξης ενός ειδικού εφέ. Η λίστα μπορεί να περιέχει όλες τις εντολές καθορισμού χαρακτηριστικών της video machine (π.χ. εντάσεις χρωμάτων, μέγεθος ορθογωνίων, συντελεστές διαφάνειας κ.λπ.).

Σχήμα 2. Εκτέλεση ειδικών εφέ με χρονισμό.

Ο χειρισμός της λίστας γίνεται με τον εξής τρόπο:

Το παρακάτω παράδειγμα σε Visual Basic μειώνει σταδιακά την ένταση μιας εικόνας:
VM_NewEffect()
FOR I = 1 TO 255
    VM_SetFader(VM_VID_A, I, VM_NOTUSED, VM_DYNAMIC)
    VM_NextSync()
NEXT I
VM_PlayEffect()

Καθορισμός της πηγής εισόδου

Με τη συνάρτηση VM_SetVideoSwitcher μπορούμε να επιλέξουμε ποια από τις έξι δυνατές πηγές video θα αντιστοιχεί σε ποιο από τα δύο κανάλια επεξεργασίας. Αν θέλουμε να δημιουργήσουμε ένα ειδικό εφέ σε ένα τμήμα μόνο της εικόνας μπορούμε να επιλέξουμε και τα δύο κανάλια να τροφοδοτούνται από την ίδια πηγή. Μπορούμε ακόμα να φορτώσουμε στον ενταμιευτή σταθερές εικόνες (λ.χ. από Photo-CD) και να τις χρησιμοποιήσουμε ως φόντο. Η συνάρτηση VM_SetAquisition καθορίζει αν η εικόνα εισόδου μεταδίδεται ζωντανά ή είναι παγωμένη. Με διαδοχικό πάγωμα και ζωντάνεμα της εισόδου μπορούμε να δημιουργήσουμε στροβοσκοπικό εφέ όπως το παρακάτω παράδειγμα σε C που "διαβάζει" μία εικόνα κάθε 20 καρέ:
VM_NewEffect();
for (i = 0; i < 500; i++) 
    if (I % 20 == 0)
        VM_SetAquisition(VM_VID_A, VM_LIVE, VM_ODDEVEN, VM_DYNAMIC);
    if (I % 20 == 2)
        VM_SetAquisition(VM_VID_A, VM_STILL, VM_ODDEVEN, VM_DYNAMIC);
    VM_NextVSync();
VM_PlayEffect();

Πίνακες αντιστοιχίας χρωμάτων

Το σήμα της εισόδου, πριν σταλεί στον ενταμιευτή, περνάει από τους πίνακες αντιστοιχίας χρωμάτων. Αυτοί είναι δομημένοι αντίστοιχα με το σήμα video, δηλαδή ένας πίνακας αντιστοιχεί στο σήμα U, ένας στο σήμα V και ένας στη φωτεινότητα (Y). Κάθε τιμή από το σήμα εισόδου πριν γραφεί στον ενταμιευτή μεταφράζεται από αυτούς τους πίνακες με τη διαδικασία ΤΕΛΙΚΗ-ΤΙΜΗ = ΠΙΝΑΚΑΣ(ΑΡΧΙΚΗ-ΤΙΜΗ). Με τη χρήση αυτών των πινάκων μπορούμε να αντιστρέψουμε τη φωτεινότητα της εικόνας (εικόνα 2) αντιστρέφοντας τον πίνακα φωτεινότητας όπως το παρακάτω παράδειγμα σε Visual Basic:
FOR I = 0 to 255
    BYLUT(i) = 255 - I
NEXT I
VM_SetInputLUTs(VM_VID_A, BYLUT, 0, VM_STATIC);
Ακόμα, κβαντοποιώντας τις τιμές των πινάκων (δηλαδή γεμίζοντας λ.χ. δέκα συνεχόμενες θέσεις του πίνακα με την ίδια τιμή) μπορούμε να επιτύχουμε το εφέ των απότομων διαβαθμίσεων (posterize, εικόνα 3).

Εικόνα 2. Αντιστροφή της φωτεινότητας.

Εικόνα 3. Καθορισμός διαβαθμίσεων φωτεινότητας (posterize).

Επεξεργασία εικόνας με διαφάνεια

Ένα σημαντικό χαρακτηριστικό της video machine είναι η δυνατότητα χρήσης εικόνων με πεδίο α (alpha plane). Τέτοιες εικόνες συναντώνται συχνά σε υψηλής ποιότητας συστήματα (στο λειτουργικό σύστημα NeXTStep το πεδίο α είναι φυσικό τμήμα κάθε εικόνας) και θα τις βλέπουμε όλο και πιο συχνά στο περιβάλλον των Windows καθώς βελτιώνονται τα προγράμματα επεξεργασίας εικόνων. Γι' αυτό θα αφιερώσουμε μερικές γραμμές στο να εξηγήσουμε τι είναι αυτό το πεδίο. Ο πιο συνηθισμένος τρόπος φύλαξης εικόνων υψηλής ποιότητας είναι ο χωρισμός των χρωμάτων σε τρία συστατικά (κόκκινο, πράσινο, μπλε) και η φύλαξη κάθε τέτοιου συστατικού με τη μορφή ενός πεδίου, δηλαδή μιας εικόνας. Ετσι, κάθε εικόνα φυλάσσεται τρεις φορές, μία για κάθε χρώμα. Εκτός από αυτά τα πεδία μπορούμε να φυλάξουμε ένα ακόμα χαρακτηριστικό της εικόνας: τη διαφάνειά της. Μέγιστη διαφάνεια σημαίνει ότι η εικόνα αντικαθίσταται με το φόντο της, ενώ ελάχιστη διαφάνεια σημαίνει το η εικόνα κρύβει εντελώς το φόντο. Φυσικά κάθε εικονοστοιχείο της εικόνας είναι συνδυασμένο με μία διαφορετική τιμή α και έτσι μπορούμε να ενώσουμε δύο εικόνες έτσι ώστε ορισμένα τμήματα της μίας να υπερκαλύπτουν τμήματα της άλλης. Στη video machine κάθε μια από τις δύο σταθερές εικόνες που φορτώνονται στον ενταμιευτή μπορούν να περιέχουν πεδίο α. Η ισχύς του πεδίου α ορίζεται με τις συναρτήσεις VM_AlphaOn και VM_AlphaOff. Με αυτόν τον τρόπο μπορούμε να επιτύχουμε εφέ όπως την κίνηση εικόνας μέσα σε τίτλους ή σχήματα.

Το αντίθετο εφέ, δηλαδή η κινούμενη εικόνα σε κάποιο φόντο επιτυγχάνεται με την τεχνική του "κλειδώματος" με βάση το χρώμα ή τη φωτεινότητα μέσω της συνάρτησης VM_KeyingOn. Στη συνάρτηση αυτή καθορίζουμε το μέγιστο και ελάχιστο κάθε χρώματος ή της φωτεινότητας που το σήμα μας γίνεται διαφανές. Ετσι αν καθορίσουμε κάποιους τόνους του μπλε μέσα σε αυτό το τμήμα μπορούμε λ.χ. να προβάλουμε τον παρουσιαστή του δελτίου ειδήσεων που μιλάει μπρος από ένα μπλε φόντο, πάνω από την κινούμενη πηγή εισόδου του άλλου καναλιού.

Επίλογος

Η επιτραπέζια σύνθεση και παραγωγή video είναι μια νέα τεχνολογία. Το περιβάλλον των Windows επιτρέπει την επεξεργασία και τη δημιουργία τίτλων και σταθερών εικόνων μιας παραγωγής με μοναδική ευκολία, ενώ παράλληλα οι γλώσσες που τρέχουν κάτω από το περιβάλλον αυτό επιτρέπουν στους πιο τολμηρούς τον απόλυτο έλεγχο αυτής της διαδικασίας. Μη φοβηθείτε να αφήσετε τη δημιουργικότητά σας να σας οδηγήσει στα άκρα.

(C) Copyright 1993-97 Διομήδης Σπινέλλης. Επιτρέπεται η ελεύθερη ανάγνωση από browsers του WWW και παρόμοια προγράμματα. Με την επιφύλαξη κάθε άλλου δικαιώματος.