Et Audio/ Video Framework Et framework for en audio/video applikation baseret på lokale og kilder tilgængelige på 1394 via AV/C protokollen
Teknikken kort Applikationen kan afvikles på win2000 og linux maskiner med 1394 kort Implementeret i java Simpelt interface ned mod 1394 implementeret i C Baseret på AV/C protokollen
Baggrund Eksisterende platform – Ca linjer C kode for en AV5 + eget OS + diverse FEP’s – SA/SD Model – Svær at overskue, vedligeholde og skabe varianter OO framework – Basis fra COT projektet – Vi ser det som nødvendigt for at kunne håndtere stigende kompleksitet tiltrække og fastholde medarbejde få gavn af de nyeste værktøjer og forskning
Design Lagt vægt på – Skalerbarhed Nem introduktion af nye kilder – Generalitet og abstraktioner Skal favne flere apparater med forskellig arkitektur – Uafhængighed af infrastruktur Anvendes med flere protokoller
Abstraktioner Kilder (sources) – Kan levere et signal og kontrolleres Sinks (flader) – Kan præsentere et signal og kontrolleres Diverse andre hardware entiteter – Power supply – Signal switch – Display til visning af status og ikoner
Framework
Kilder Beskrives ved interfaces CD, Tuner etc. De konkrete kilder realiseres ved implementation af disse interfaces. Kilder placeret på andre apparater realiseres med proxy objekter
En (simpel) abstrakt CD package avx.source.cd; /** * This interface describes the general methods needed for implementing * CD functionality. */ public interface CD { /** Interface implementation */ public SequenceIterator getAllRemainingSourcePositions(); public int getPlayInfo(); /** Goto specific track on CD. If track not available do nothing */ public void gotoTrack(int trackNumber); public void play(); public void pause(); public void stop(); public void gotoNextSourcePosition(); public void gotoPrevSourcePosition(); } Ud over dette interface skal metoderne i den abstrakte klasse Source også implementeres for at sikre de generelle funktionaliteter, som alle kilder har.
Kilder (et eksempel med cd)
Applikation Formål – Holde styr på netværkets resurser repository med kilde objekter (lokale og remote) som opdateres ved bus reset. – Etablere forbindelse mellem en source og en sink – Præsentere status – Give mulighed for kontrol -> ”UI” – Og lidt mere……
Etablering af forbindelse mellem en source og en sink Dette kan tage tid da hårdvarene skal i spil Implementeret som scenarier der kan udføres i sin egen tråd og dermed ikke blokerer for øvrige aktiviteter. /** Parameters to constructor are Source and Sink to connect source : Source to connect sink : Sink to connect */ public SourceSelectScenario(Source source, UserInterface userInterface, Unit unit) { super(); this.userInterface = userInterface; this.source = source; this.unit = unit; } /** Execute the Scenario */ public Session execute() { Sink sink = userInterface.getSink(); Session result = new Session(); if (!unit.hasSession()) { // Unit has no connections => standby configuration 1 userInterface.setSession(result); result.setUserInterface(userInterface); source.activate(result); sink.activate(); sink.deMute(); } …. Other cases based on current state Det er op til kilden og fladen selv, hvad der skal ske når de aktiveres, så scenariet kan anvendes ved alle opkoblinger
Kontrol (IR) IR kommandoer kommer til central input handler Alle entiteter som kan kontrolleres implementerer et controllable interface ”Åbne tilstande” – Prioriteter, ”Evige” og tidsbestemte Håndteres med en stak, hvor toppen udpeger den øjeblikkelige kontrollerede entitet. public interface Controllable { /** Returns the priority of this controllable. */ public int getPriority (); /** This entry receives commands. The implementing objects decide * what to do with these. the control command to handle, and the UserInterface from * where the command originated */ public void handleControlCommand(int command, UserInput sourceOfCommand); /** This function is called to notify the controllable that it is now * on the top of the UI stack. When the controllable receives this * notification, a typical reaction is to reinstall its associated * adapter(s) in the relevant display(s). */ public void receiveFocus(); }