-
HINTERGRUND DER ERFINDUNG
-
Die
vorliegende Erfindung betrifft Strömungsinformation. Insbesondere
betrifft die vorliegende Erfindung die Aufzeichnung von Strömungsinformation
und die Rückgewinnung
der gespeicherten Information zur selektiven Wiedergabe.
-
Mit
Fortschritten in der Technologie, die schnellere Prozessoren, verbesserte
Grafik usw. einschließen, kann
ein Desktop-Computer Strömungsinformation
einfach empfangen und dem Benutzer präsentieren. Alltägliche Beispiele
von Strömungsinformation
sind Audio- und Videoströme,
die über
Weitbereichsnetze, wie z.B. dem Internet, geliefert werden. Zum
Beispiel werden Fernsehübertragungssignale,
die ansonsten drahtlos unter Verwendung von Satelliten, Fernsehsendern
usw. gesendet werden würden,
codiert und zum Senden an entfernte Computerbenutzer über das
Internet zur Verfügung
gestellt. Auf Anforderung des Desktop-Computerbenutzers werden die
codierten Datenpakete, die Audio- und Videodaten enthalten, nacheinander
an den Desktop-Computerbenutzer gesendet. Nach Empfang werden die
Datenpakete durch den Desktop-Computer decodiert und verarbeitet,
um dem Benutzer die Strömungsinformation
möglichst
in Echtzeit zurückzugeben. Nach
Wiedergabe oder Präsentation
werden die Datenpakete weggeworfen.
-
Obwohl
die Verarbeitung von Strömungsinformation
in der oben beschriebenen Weise nützlich ist, gibt es eine Anzahl
von Schwächen.
Gegenwärtig
wird Strömungsinformation
auf Verlangen jedes Desktop-Computers bereitgestellt. Jeder Benutzer
muss daher eine getrennte Verbindung mit der Quelle der Strömungsinformation
herstellen, um die gewünschte
Strömungsinformation
zu empfangen. Wenn einmal eingeleitet, ist der Benutzer außerstande,
die Art und Weise, in der Strömungsinformation
zurückgegeben
wird, zu kontrollieren. Zum Beispiel kann der Benutzer die ankommende
Strömungsinformation
nicht vorübergehend "anhalten", um eine andere
Aufgabe durchzuführen
und dann, wenn gewünscht,
das Betrachten fortzusetzen. Desgleichen ist der Benutzer nicht
in Lage, einen vorher wiedergegebenen Teil zu wiederholen, da die
Datenpakete weggeworfen wurden, oder nach vorne zu springen, da
die Datenpakete noch nicht empfangen wurden.
-
Es
besteht daher eine fortdauernde Notwendigkeit, die Art und Weise,
wie Strömungsinformation
wiedergegeben wird, zu verbessern. Obwohl oben in Bezug auf einen
Desktop-Computer und von dem Internet empfangene Strömungsinformation
beschrieben, sollte der verbesserte Prozess auf andere Informationsgeräte oder
Recheneinrichtungen und andere Formen von Strömungsinformation anwendbar
sein.
-
EP 0 510 834 A2 beschreibt
ein Verfahren und eine Vorrichtung zum Zugreifen auf Daten, die
als verkettete Listen aufgezeichnet sind. Eine Vielzahl von Fortsetzungsketten
wird gezeigt, wobei jede Kette aus vorgegeben großen Zuordnungsgruppen
von adressierbaren Datenspeicherbereichen besteht. Auf jede der
Ketten kann zugegriffen werden, um wenigstens einen Eintrag in einer
der Fortsetzungsketten zu finden.
-
ZUSAMMENFASSUNG DER ERFINDUNG
-
Es
ist die Aufgabe der Erfindung, die Art und Weise zu verbessern in
der Strömungsinformation
wiedergegeben wird.
-
Diese
Aufgabe wird durch die Erfindung wie in den unabhängigen Ansprüchen beansprucht
gelöst.
-
Bevorzugte
Ausführungen
sind in den abhängigen
Ansprüchen
definiert.
-
Ein
Datenblockformat für
Strömungsinformation
enthält
ein erstes Datenblockgrößenfeld
und ein zweites Datenblockgrößenfeld,
wobei jedes der Felder die Größe des Datenblocks
angibt. Ein Nutzlastfeld wird durch das erste Datenblockgrößenfeld
und das zweite Datenblockgrößenfeld
in dem Datenblockformat eingegrenzt.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 ist
ein Blockschaltbild einer ersten exemplarischen Umgebung für die vorliegende
Erfindung.
-
2 ist
ein Blockschaltbild einer zweiten exemplarischen Umgebung für die vorliegende
Erfindung.
-
3 ist
eine Perspektivansicht einer Mobileinrichtung.
-
4 ist
ein Blockschaltbild einer dritten exemplarischen Umgebung für die vorliegende
Erfindung.
-
5 ist
ein System zum Verarbeiten von Strömungsinformation.
-
6 ist
ein Blockschaltbild eines Verzögerungsfilters.
-
7 ist
ein Blockschaltbild des Verzögerungsfilters 112,
das eine Schnittstelle zu einem Ringpuffer in dem Filter zeigt;
-
8 ist
ein Diagramm, das den Ringpuffer entlang einer linearen Zeitlinie
veranschaulicht.
-
9A und 9B bilden
zusammen ein Flussdiagramm für
einen Schreibteil eines Synchronisationsalgorithmusses nach einer
Ausführung
der vorliegenden Erfindung.
-
10 ist
ein Diagramm, das das Voranschreiten einer Schwanzzeigervariablen
in dem Ringpuffer veranschaulicht.
-
11A und 11B veranschaulichen
gemeinsam ein Flussdiagramm für
den Leseteil des Synchronisationsalgorithmusses nach einer Ausführung der
vorliegenden Erfindung.
-
12 ist
ein Diagramm, das ein Beispiel des Ringpuffers veranschaulicht,
wenn ein Lesermodul ein Schreibermodul überholt hat.
-
13 ist
ein Diagramm, das ein Statusregister veranschaulicht, das für jeden
Datenkanal unterhalten wird, um anzugeben, welche Benutzeroperationen
in einem momentanen Status des Kanals erlaubt oder verboten sind.
-
14 ist
eine Tabelle, die Beispiele von Benutzeroperationen auflistet, die
Benutzeroperationsfeldern UOP0-UOP10 in 13 entsprechen.
-
15 ist
ein Flussdiagramm eines Softwareobjekts, das von einer Anwendung
als Reaktion auf eine Benutzeranforderung aufgerufen wird.
-
16 ist
ein Flussdiagramm, das Schritte veranschaulicht, die von dem Verzögerungsfilter
beim Aufrechterhalten der Benutzeroperationsbits des in 13 gezeigten
Statusregisters durchgeführt
werden.
-
17 ist
eine bildliche Darstellung eines Datenblocks.
-
18 ist
eine bildliche Darstellung einer ersten Sequenz von Datenblöcken.
-
19 ist
eine bildliche Darstellung einer zweiten Sequenz von Datenblöcken.
-
20 ist
ein Blockschaltbild einer anderen Ausführung eines erfindungsgemäßen Systems.
-
20A ist ein Bockschaltbild eines Beispiels eines
Filtergraphen.
-
21A bis 21D sind
Blockschaltbilder, die eine Stromanalyse veranschaulichen.
-
22 bis 23C sind Flussdiagramme, die Stromanalyse veranschaulichen.
-
24 ist
ein Flussdiagramm, das Indexierung veranschaulicht.
-
25 ist
eine Veranschaulichung eines Teils eines Datenpuffers.
-
26 ist
ein Flussdiagramm, das eine Suchen-Operation veranschaulicht.
-
AUSFÜHRLICHE
BESCHREIBUNG DER VERANSCHAULICHENDEN AUSFÜHRUNGEN
-
Übersicht
-
1 und
die zugehörige
Erörterung
sind gedacht, eine kurze, allgemeine Beschreibung einer ersten exemplarischen
Rechenumgebung zu geben, in der die Erfindung implementiert werden
kann. Obwohl nicht erforderlich, wird die Erfindung wenigstens zum
Teil in dem allgemeinen Kontext von prozessorausführbaren Anweisungen
beschrieben, z.B. Programmmodulen, die von einem Controller, Prozessor,
Personal Computer oder einer anderen Recheneinrichtung ausgeführt werden.
Programmmodule enthalten gewöhnlich
Routinenprogramme, Objekte, Komponenten, Datenstrukturen usw., die
bestimmte Tasks durchführen
oder bestimmte abstrakte Datentypen implementieren. Tasks, die von
den Programmmodulen durchgeführt
werden, werden unten mithlife von Blockschaltbildern und Flussdiagrammen
beschrieben. In der Technik erfahrene Personen können die Beschreibung, Block schaltbilder
und Flussdiagramme in prozessorausführbaren Anweisungen implementieren,
die auf computerlesbare Medien geschrieben werden können. Die
Fachleute werden außerdem einsehen,
dass die Erfindung mit anderen Informationsgeräten, einschließlich handgehaltener
Einrichtungen, mikroprozessorbasierter oder programmierbarer Verbraucherelektronik,
Netzwerk-PCs, Minicomputern, Mainframe-Computern und dergleichen,
praktiziert werden kann. Die Erfindung ist auch in verteilten Rechenumgebungen
anwendbar, wo Tasks durch entfernte Verarbeitungseinrichtungen durchgeführt werden,
die durch ein Kommunikationsnetzwerk verbunden sind. In einer verteilten
Rechenumgebung können
sich Programmmodule sowohl in lokalen als auch entfernten Speichereinrichtungen
befinden.
-
Auf 1 verweisend
enthält
eine erste exemplarische Umgebung für die Erfindung eine Universal-Recheneinrichtung
in der Form eines herkömmlichen
Personal Computers 20, der eine Verarbeitungseinheit 21,
einen Systemspeicher 22 und einen Systembus 23 enthält, der
verschiedene Systemkomponenten, einschließlich des Systemspeichers,
mit der Verarbeitungseinheit 21 verbindet. Der Systembus 23 kann
jede von mehreren Typen von Busstrukturen, einschließlich eines
Speicherbus- oder Speichercontrollers, eines Peripheriebusses und
eines lokalen Busses, sein, die irdendeine einer Vielfalt von Busarchitekturen
verwendet. Der Systemspeicher umfasst einen Nurlesespeicher (ROM) 24 und
einen Direktzugriffsspeicher (RAM) 25. Ein Basis-Eingabe/Ausgabesystem 26 (BIOS),
das die Basisroutine enthält,
die hilft, Information zwischen Elementen in dem Personal Computer 20,
z.B. während
des Anlaufens, zu übertragen,
ist im ROM 24 gespeichert. Der Personal Computer 20 umfasst
des Weiteren ein Festplattenlaufwerk 27 zum Lesen von einer
oder Schreiben auf eine Festplatte (nicht gezeigt), ein Magnetplattenlaufwerk 28 zum
Lesen von einer oder Schreiben auf eine abnehmbare Magnetplatte 29 und
ein optisches Plattenlaufwerk 30 zum Lesen von einer oder
Schreiben auf eine abnehmbare optische Platte 31, z.B.
ein CD-ROM oder
ein anderes optisches Medium. Das Festplattenlaufwerk 27,
das Magnetplattenlaufwerk 28 und das optische Plattenlaufwerk 30 sind
mit dem Systembus 23 durch eine Festplattenlaufwerk-Schnittstelle 32,
eine Magnetplattenlaufwerk-Schnittstelle 33 bzw. eine optische
Plattenlaufwerk-Schnittstelle 34 verbunden. Die Laufwerke
und das zugehörige
computerlesbare Medium stellen eine nichtflüchtige Speicherung von computerlesbaren
Anweisungen, Programmmodulen und anderen Daten für den Personal Computer bereit.
-
Obwohl
die hierin beschriebene exemplarische Umgebung eine Festplatte,
eine abnehmbare Magnetplatte 29 und eine abnehmbare optische
Platte 31 einsetzt, sollten die Fachleute einsehen, dass
andere Arten von computerlesbaren Medien, die für einen Computer zugäng liche
Daten speichern können,
z.B. Magnetkassetten, Flash-Speicherkarten, digitale Videoplatten,
Bernoulli-Kassetten, Direktzugriffsspeicher (RAMs), Nurlesespeicher
(ROMs) und dergleichen, ebenfalls in der exemplarischen Betriebsumgebung
verwendet werden können.
Ein Anzahl von Programmmodulen kann auf der Festplatte, der Magnetplatte 29,
der optischen Platte 31, im ROM 24 oder RAM 25 gespeichert
werden, einschließlich
eines Betriebssystems 35 eines oder mehrerer Anwendungsprogramme 36,
anderer Programmmodule 37 und Programmdaten 38.
Ein Benutzer kann Befehle und Information über Eingabeeinrichtungen, wie
z.B. eine Tastatur 40 und ein Zeigegerät (Maus) 42, in den
Personal Computer 20 eingeben. Andere Eingabeeinrichtungen
(nicht gezeigt) können
ein Mikrophon, Joystick, Game-Pad, Satellitenschüssel, Scanner und dergleichen
umfassen. Diese und andere Eingabeeinrichtungen werden an die Verarbeitungseinheit 21 oft über eine
serielle Port-Schnittstelle 46, die mit dem Systembus 23 verbunden
ist, angeschlossen, können
aber mit anderen Schnittstellen, wie z.B. eine Sound-Karte, ein
Parallel-Port, Game-Port oder ein Universal-Serial-Bus (USB), angeschlossen werden.
Ein Monitor 47 oder eine andere Art von Anzeigeeinrichtung
ist ebenfalls mit dem Systembus 23 über eine Schnittstelle, z.B.
einen Videoadapter 48, verbunden. Zusätzlich zu dem Monitor 47 umfassen
Personal Computer typischerweise andere periphere Ausgabeeinrichtungen,
z.B. einen mit einer Sound-Karte 57 verbundenen Lautsprecher 49 und Drucker
(nicht gezeigt).
-
Der
Personal Computer 20 kann in einer vernetzten Umgebung
arbeiten, die logische Verbindungen zu einem oder mehr entfernten
Computern, z.B. ein entfernter Computer 49, verwendet.
Der entfernte Computer 49 kann ein anderer Personal Computer,
ein Server, ein Router, ein Netzwerk-PC, eine Peer-Einrichtung oder
ein anderer Netzwerkknoten sein und umfasst typischerweise viele
oder alle oben bezüglich
des Personal Computers 20 beschriebenen Elemente, obwohl
in 1 nur eine Speichereinrichtung 50 dargestellt
wurde. Die in 1 gezeigten logischen Verbindungen
umfassen ein lokales Netzwerk (LAN) 51 und ein Weitbereichsnetzwerk
(WAN) 52. Solche Vernetzungsumgebungen sind in Büros, in
unternehmensweiten Computernetzwerk-Intranetzen und dem Internet
alltäglich.
-
Wenn
in einer LAN-Netzwerkumgebung verwendet, ist der Personal Computer 20 über eine
Netzwerk-Schnittstelle oder -Adapter 53 mit dem lokalen
Netzwerk 51 verbunden. Wenn in einer WAN-Netzwerkumgebung
verwendet, enthält
der Personal Computer 20 typischerweise ein Modem 54 oder
eine andere Einrichtung zum Herstellen von Übertragungen über das
Weitbereichsnetzwerk 52, z.B. das Internet. Das Modem 54,
das intern oder extern sein kann, ist mit dem Systembus 23 über die
serielle Port-Schnittstelle 46 verbunden. In einer Netzwerkumgebung
können
bezüglich
des Personal Computers 20 gezeigte Programmmodule oder
Teile davon in der entfernten Speichereinrichtung gespeichert werden.
Es ist einzusehen, dass die gezeigten Netzwerkverbindungen exemplarisch
sind und andere Einrichtungen zum Errichten einer Übertragungsstrecke
zwischen den Computern verwendet werden können.
-
Strömungsinformation
kann durch den Computer 20 mittels einer Anzahl bekannter
Verfahren und Technologien empfangen werden. Gewöhnlich ist eine Quelle von
Strömungsinformation
ein entfernter Computer, wobei der Computer 21 mit dem
entfernten Computer mittels eines verdrahteten oder drahtlosen Modems
verbunden ist. Diese Technik wird oft verwendet, wenn Strömungsinformation
durch ein Intranet oder das Internet, typischerweise in digitaler
Form, bereitgestellt wird. Digitale Strömungsinformation kann weiter
Satellitensignale umfassen, die durch einen Satellitenempfänger, -schüssel oder
dergleichen empfangen werden.
-
Strömungsinformation
kann jedoch auch als Analogsignale ankommen. Zum Beispiel kann die
Strömungsinformation
auch Rundfunk- oder Fernsehsignale umfassen. In solchen Fällen enthält der Personal Computer 20 einen
Radio-Tuner 60 und einen Fernseh-Tuner 62, um
die Rundfunksignale zu empfangen und die Analogsignale in digitale
Form zum Übertragen über den
Systembus 23 umzuwandeln.
-
Man
sollte verstehen, dass die vorliegende Erfindung neben dem Computer 20 in
anderen Recheneinrichtungen verwendet werden kann. 2 ist
ein Blockschaltbild einer Mobileinrichtung 68, die eine
andere exemplarische Rechenumgebung ist. Die Mobileinrichtung 68 enthält einen
Mikroprozessor 70, einen Speicher 72, Eingabe/Ausgabe-(E/A)Komponenten 74 und
eine Kommunikationsschnittstelle 76, um zum Beispiel mit Computer 20 zu
kommunizieren. In einer Ausführung
sind die vorerwähnten
Komponenten zur Kommunikation miteinander über einen geeigneten Bus 78 verbunden.
-
Der
Speicher 72 ist als nichtflüchtiger elektronischer Speicher,
z.B. als Direktzugriffsspeicher (RAM), mit einem Batterieunterstützungsmodul
(nicht gezeigt) implementiert, sodass in dem Speicher 72 gespeicherte Information
nicht verlorengeht, wenn die allgemeine Stromversorgung der Mobileinrichtung 68 ausgeschaltet wird.
Ein Teil des Speichers 72 wird vorzugsweise als adressierbarer
Speicher zur Programmausführung
zugewiesen, während
ein anderer Teil des Speichers 72 bevorzugt zur Speicherung
benutzt wird, um z.B. eine Speicherung auf einem Plattenlaufwerk
zu simulieren.
-
Der
Speicher 72 enthält
ein Betriebssystem 80, ein Anwendungsprogramm 82 sowie
einen Objektspeicher 84. Im Betrieb wird das Betriebssystem 80 bevorzugt
durch den Prozessor 70 von Speicher 72 ausgeführt. In
einer bevorzugten Ausführung
ist das Betriebssystem 80 ein "Windows CE" Betriebssystem, das von Microsoft Corporation
käuflich
ist. Das Betriebssystem 80 ist vorzugsweise für Mobileinrichtungen
gedacht und implementiert Datenbankmerkmale, die durch die Anwendung 82 durch
einen Satz von frei stehenden Anwendungsprogrammierungs-Schnittstellen
und -Verfahren benutzt werden können.
Die Objekte im Objektspeicher 84 werden durch die Anwendung 82 und
das Betriebsystem 80 wenigstens teilweise als Reaktion
auf Aufrufe an die frei stehenden Anwendungsprogrammierungs-Schnittstellen
und -Verfahren aufrechterhalten.
-
Die
Kommunikationsschnittstelle 76 stellt zahlreiche Einrichtungen
und Technologien dar, die der Mobileinrichtung 68 erlauben,
Strömungsinformation
zu empfangen. Die Einrichtungen gleichen denen oben in Bezug auf
Computer 20 erörterten
und enthalten verdrahtete und drahtlose Modems, Satelliten-Empfänger und
Runkfunk-Tuner, um einige zu nenen. Die Mobileinrichtung 68 kann
auch direkt mit dem Computer 20 verbunden werden, um Daten
damit auszutauschen. In solchen Fällen kann die Kommunikationsschnittstelle 76 ein
Infra-rot-Transceiver
oder eine serielle oder parallele Kommunikationsverbindung sein,
von denen jede imstande ist, Strömungsinformation
zu übertragen.
-
3 ist
eine vereinfachte bildliche Darstellung der Mobileinrichtung 68.
Die Mobileinrichtung 68 kann ein Desktop-Assistent sein,
der unter der Bezeichnung H/PC mit von Microsoft Corporation gelieferter
Software verkauft wird. In einer Ausführung enthält die Mobileinrichtung 68 eine
miniaturisierte Tastatur 83, eine Anzeige 85 und
einen Griffel 86. Bei der in 3 gezeigten
Ausführung
ist die Anzeige 85 eine Flüssigkristallanzeige (LCD),
die einen berührungsempfindlichen
Anzeigeschirm in Verbindung mit dem Griffel 86 verwendet.
Der Griffel 86 wird benutzt, um auf die Anzeige 85 an
bestimmten Koordinaten zu drücken
oder sie zu berühren, um
bestimmte Benutzereingabefunktionen auszuführen. Die miniaturisierte Tastatur 83 wird
bevorzugt als eine miniaturisierte alphanumerische Tastatur mit
allen geeigneten und gewünschten
Funktionstasten implementiert, die zum Ausführen bestimmter Benutzereingabefunktionen
bereitgestellt werden. Bei anderen bekannten Ausführungen
wird die Tastatur 83 weggelassen, und eine "Soft"-Tastatur wird durch
den berührungsempfindlichen
An zeigeschirm bereitgestellt. Bei noch anderen Ausführungen
wird ein Zeichenerkennungsmodul eingesetzt, um auf dem berührungsempfindlichen
Anzeigeschirm mit dem Griffel 86 geschriebene Zeichen zu
erkennen.
-
4 zeigt
noch eine andere exemplarische Umgebung, in der die vorliegende
Erfindung arbeiten kann. In 4 wird eine
Unterhaltungvorrichtung 90 veranschaulicht, die eine Verarbeitungseinheit 21,
einen Systemspeicher 22 und einen Systembus 23 enthält. Ein
Festplattenlaufwerk 27 oder irgendwelche der anderen oben
beschriebenen Speichereinrichtungen sind des Weiteren mit dem Systembus 23 verbunden
und werden zur vorübergehenden
und permanenten Speicherung von Programmanwendungen, Daten usw.
benutzt. Anders als typische Desktop-Computer, wie z.B. der oben
beschriebene Computer 20, kann die Unterhaltungsvorrichtung 90 eine
begrenzte Eingabeeinrichtung, z.B. eine handgehaltene Fernbedienung 92,
verwenden, die mit einem Empfänger 94 betrieben
werden kann, der ein Infrarot-Empfänger, ein Funkempfänger oder
dergleichen sein kann. In der Unterhaltungsvorrichtung 90 wird
Information an den Benutzer mittels eines Monitors 47 oder
einer anderen Anzeigeeinrichtung zurückgegeben, die mit dem Systembus 23 über einen
Videoadapter 48 verbunden ist. Audioinformation wird ebenfalls
zurückgegeben
und hier mit einem Lautsprecher 49 veranschaulicht. Der
Lautsprecher 49 ist mit dem Systembus 23 über eine
Sound-Karte 57 verbunden,
die, wenn gewünscht,
mit dem Videoadapter 48 kombiniert werden kann, um eine
Signaleinrichtung zu bilden. Des Weiteren sollte man verstehen,
dass Audio- und Videoinformation an externe Komponenten geliefert
werden könnte,
z.B. Verstärker
oder dergleichen, die ihrerseits mit dem Monitor 47 und
Lautsprechern 49 verbunden sind.
-
Strömungsinformation
wird der Unterhaltungsvorrichtung 90 über eine Kommunikationsschnittstelle 96 bereitgestellt.
Die Kommunikationsschnittstelle 96 kann eine der oben in
Bezug auf die zwei vorangehenden Umgebungen beschriebenen Einrichtungen
sein.
-
Verzögerungsfilter
-
5 ist
ein allgemeines Blockschaltbild, das ein System 110 zur
Verarbeitung von Strömungsinformation
veranschaulicht. Das System 110 enthält ein Verzögerungsfilter 112 zum
Zwischenspeichern von Strömungsinformation,
die von einer Strömungsinformationsquelle 114 empfangen
wird. Das Verzögerungsfilter 112 ist
mit einer Wiedergabeeinrichtung oder -einrichtungen 116 verbunden,
um Strömungsinformation
auf Verlangen des Benutzers wiederzugeben. 5 zeigt
auch einen Coder 118 und einen Decoder 120. Obwohl nicht
erfor derlich, können
der Coder 118 und der Decoder 120 die Systemleistung
verbessern, wobei der Coder 118 Strömungsinformation von der Quelle 114 empfängt und
die Strömungsinformation
komprimiert, bevor sie an das Verzögerungsfilter 112 übergeben
und dort gespeichert wird. Der Decoder 120 empfängt die
in dem Verzögerungsfilter 112 im
komprimierten Format zwischengespeicherte Strömungsinformation und dekomprimiert
die Strömungsinformation,
bevor sie an die Wiedergabeeinrichtung 116 übergeben
wird.
-
An
dieser Stelle sollte zur Kenntnis genommen werden, dass das System 110 in
jeder der oben beschriebenen Rechenumgebungen oder in ähnlichen
Rechenumgebungen betrieben werden kann. Die Fachleute werden einsehen,
dass das Verzögerungsfilter 112,
die Wiedergabeeinrichtung 116, der Coder 118 und der
Decoder 120 in Hardware, Software oder in Kombinationen
davon implementiert werden können.
In einer Ausführung
wird z.B. das Verzögerungsfilter 112 in
dem Betriebssystem verkörpert.
Höherstufige
Anwendungsprogramme oder andere Teile des Betriebssystems können unter
Verwendung von Anwendungsprogramm-Schnittstellen (APIs) auf Funktionen
des Verzögerungsfilters 112 zugreifen,
wie in der Technik bekannt ist.
-
Im
Betrieb liefert eine Strömungsinformationsquelle 114 einen
Informationsstrom an das Verzögerungsfilter 112 (optional über Coder 118).
Im Allgemeinen umfasst die Strömungsinformation
digitale Daten, die einen oder mehr Kanäle von Inhaltsinformation darstellen.
Zum Beispiel kann die Strömungsinformationsquelle 114 ein
Intranet oder das Internet, das durch die oben beschriebene Kommunikationsschnittstelle
verfügbar
ist, umfassen. Desgleichen kann die Strömungsinformationsquelle 114 einen
analogen oder digitalen Fernseh-Tuner umfassen, wobei getrennte
Audio-, Video- und Daten-(d.h. 'closed
captioning')Informationsströme einen
einzelnen Kanal umfassen. Andere Quellen von Strömungsinformation sind Audio-Tuner,
Satelliten-Empfänger
und dergleichen, sind aber darauf nicht begrenzt.
-
In
der veranschaulichten Ausführung
empfängt
der Coder 118 die Strömungsinformation
und codiert oder komprimiert die Strömungsinformation in ein bekanntes
Format, z.B. "AVI", "MOV" (AppleR QuickTimeR) und "WAV", obwohl, wenn benutzt,
die vorliegenden Erfindung nicht auf irgendein bestimmtes Codierformat begrenzt
ist.
-
Wie
unten erörtert,
enthält
das Verzögerungsfilter 112 im
Allgemeinen ein Schreibermodul 122, einen Ringpuffer 124 und
ein oder mehr Lesermodule 126. Das Schreibermodul 122 empfängt die
von der Strömungsinformationsquelle 114 bereitgestellte
Strömungsinforma tion
und schreibt die Strömungsinformation
in den Ringpuffer 124. Der Ringpuffer 124 kann
eine der oben beschriebenen Speichereinrichtungen, z.B. Festplatte 27 oder
einen RAM-Speicher,
umfassen. Das Lesermodul 126 greift auf den Ringpuffer 124 zu,
um die Strömungsinformation
zurückzugewinnen,
wenn die Strömungsinformation
wiederzugeben ist. Wenn die im Ringpuffer 124 gespeicherte
Strömungsinformation
codiert oder komprimiert ist, decodiert oder dekomprimiert der Decoder 120 die
Strömungsinformation,
die dann an eine Wiedergabeeinrichtung 116 übergeben
wird.
-
6 ist
eine ausführlichere
bildliche Darstellung des Verzögerungsfilters 112.
In dieser gezeigten Ausführung
umfasst die Strömungsinformation
ein Fernsehsignal oder -kanal, der Audio-, Video- und Daten-(closed
captioning)Ströme
enthält.
Die Strömungsinformation
wird an einen Stromanalysator 130 geliefert, der die ankommenden
Ströme
analysiert und solche Information als Synchronisationspunkte bereitstellt,
die in jedem der Ströme
vorhanden sein können.
Synchronisationspunkte werden beim Wiedergeben einiger Arten von
Strömungsinformation
benutzt und werden unten in Einzelnen erörtert.
-
Strömungsinformation
und Synchronisationspunkt-Information wird dem Schreibermodul 122 zugeführt. In
einer Ausführung,
wie gezeigt, umfasst das Schreibermodul 122 einen MUX-Schreiber, der Multistrom-Strömungsinformation
zur Speicherung in dem Ringpuffer 124 empfängt. Wie
oben angedeutet, werden ein oder mehr Lesermodule (hier als 1261 , 1262 und 1263 bezeichnet) bereitgestellt, um die
Strömungsinformation
aus dem Ringpuffer 124 zur Wiedergabe zu lesen. Das Schreibermodul 122 speichert
Synchronisationsinformation in einem Index 132. Die Lesermodule 126 können auf
den Index 132 zugreifen, um einen bestimmten Teil der Strömungsinformation
aufzufinden und die Strömungsinformation
richtig wiederzugeben. Die Funktion des Schreibermoduls 122,
des Ringpuffers 124, der Lesermodule 126 und des
Indexes 132 werden unten im Detail erörtert.
-
In
der gezeigten Ausführung
werden zwei getrennte Abspiel-Lesermodule 1261 und 1262 mit Ausgängen gezeigt, die Strömungsinformation
an getrennte Video-, Audio- und Datendecoder 120 und Wiedergabeeinrichtungen 116 liefern.
Dies zeigt allgemein, dass getrennte Lesermodule 126 Strömungsinformation
aus dem Ringpuffer 124 an verschiedenen Punkten in dem
Ringpuffer 124 lesen können,
und stellt daher getrennte Individuen dar, die auf die darin gespeicherten
Daten zugreifen. Außerdem
können
andere Lesermodule 126, wie z.B. bei 136 angedeutet,
implementiert werden, um die Strömungsinformation
zum späteren
Betrachten im Ringpuffer 124 zu archivieren und zu speichern.
Im Allgemeinen liefert in dem Archivierungssystem 136 das Lesermodul 1263 Strömungsinformation an einen MUX-For matierer 138,
der wiederum die Strömungsinformation
an ein Schreibermodul 140 zur Speicherung in einer der
oben angegebenen Speichereinrichtungen, z.B. Festplatte 27,
liefert.
-
Ringpuffer
-
Wieder
auf Ringpuffer 124 verweisend hat der Ringpuffer 124 "schwebende" Anfangs- und Endpunkte, die
als ein logischer "Kopf" 150 und "Schwanz" 152 bezeichnet
werden. Der Kopf 150 entspricht dem logischen Kopf von
gültigen
Daten im Ringpuffer 124, und der Schwanz 152 entspricht
dem logischen Schwanz von gültigen
Daten im Ringpuffer 124. Das Schreibermodul 122 schreibt
immer an den Kopf von Puffer 124, der sich in der Richtung
von Pfeil 154 zirkular durch den Puffer bewegt. Der Puffer 124 hat
daher immter eine feste, maximale Zeitmenge von Daten, die zum Lesen
verfügbar
ist. Wenn z.B. Multimedia-(d.h. Audio und Video)Inhalt zeitverschoben
wird, empfängt
das Schreibermodul 122 die Strömungs-Multimedia-Information
und speichert die Information im Puffer 124. Der Benutzer
betrachtet den gespeicherten Multimedia-Inhalt durch eines der Lesermodule 126.
Die zirkulare Struktur des Puffers 124 erlaubt, dass ein
Teil der Strömungsinformation dem
Benutzer zur "Sofortwiedergabe" oder "Pause" bei Bedarf zur Verfügung steht,
ohne dass dem Puffer erlaubt wird, sich mit "zeitverschobenen" Daten zu füllen. Der Ringpuffer 124 kann
in einem flüchtigen
oder nicht flüchtigen
Speicher implementiert werden, z.B. als Direktzugriffsspeicher (RAM),
Festplatte, Floppydisk oder optische Platte. In einer Ausführung wird
der Ringpuffer 124 in dem Festplattenlaufwerk 27 implementiert.
-
7 ist
ein Blockschaltbild eines Verzögerungsfilters 112,
das eine Schnittstelle zum Ringpuffer 124 zeigt. Eine Puffer-E/A-Schicht 200 verbindet
den Ringpuffer 124 und die Klienten des Puffers, die das
Schreibermodul 122 und die Lesermodule 126 (bezeichnet 1261 -126N ,
wo N eine Ganzzahlvariable größer oder gleich
1 ist) umfassen. Die Puffer-E/A-Schicht 200 implementiert
die Zirkularität
des Puffers 124 und synchronisiert das Schreibermul 122 mit
den Lesermodulen 1261 -126N . Die Puffer-E/A-Schicht 200 implementiert
die Zirkularität
durch Übersetzen
zwischen logischen Adressen, die an oberen Schnittstellen 204-207 benutzt
werden, um logische Positionen im Puffer 124 zu identifizieren,
und physikalischen (überlagernden)
Adressen, die an der unteren Schnittstelle 208 zum Identifizieren
bestimmter physikalischer Adressen im Puffer 124 benutzt werden.
Die logischen Adressen nehmen mit der Zeit immer zu (oder ab) und überlagern
sich niemals. Die logischen Adressen können, wenn gewünscht, periodisch
zurückgesetzt
werden. Die physikalischen Adressen überlagern sich (d.h. überlagern
sich von der höchsten
Adresse des Puffers zur niedrigsten Adresse des Puffers) bei einer
durch die Größe des Ringpuffers
bestimmten Häufigkeit.
-
Wenn
jeder aufeinanderfolgende Block der Strömungsinformation von dem Schreibermodul 122 empfangen
wird, wird der Block mit einer betreffenden logischen Adresse oder
einem Bereich von logischen Adressen verbunden, was mit jedem folgenden
Block zunimmt. Die Puffer-E/E-Schicht 200 übersetzt
die logischen Adressen in entsprechende physikalische Adressen,
die benutzt werden, um auf den Ringpuffer 124 zuzugreifen.
In einer Ausführung übersetzt
die Puffer-E/A-Schicht 200 die logischen Adressen in physikalische
Adressen als eine Funktion der logischen Adresse Modulo Puffergröße (d.h.
die Anzahl von Speicherstellen im Ringpuffer 124). Die
Puffer-E/A-Schicht 200 kann z.B. in einem Betriebssystem
implementiert werden.
-
Schreib/Lese-Synchronisation
-
Da
das Schreibermodul 122 und die Lesermodule 1261 -126N unabhängig voneinander
und mit verschiedenen Datenraten arbeiten können, synchronisiert die Pufter-E/A-Schicht
das Schreibermodul 122 und die Lesermodule 1261 -126N ,
um eine vorbestimmte zeitliche Reihenfolge zwischen dem Schreiben
und dem Lesen aufrechtzuerhalten. In einer Ausführung verhindert die Puffer-E/A-Schicht 200,
dass einer der Leser 1261 -126N Daten liest, die logisch noch nicht
vorhanden sind, und verhindert, dass das Schreibermodul 122 Daten überschreibt,
die im Begriff sind, von einem oder mehreren der Lesermodule 1261 -126N gelesen
zu werden. Im Ringpuffer 124 entspricht eine gegebene physikalische
Position mehrfachen logischen Positionen. Ohne Synchronisation kann
ein Lesermodul, das dem Lesermodul 122 um einen Abstand,
der nahe der Puffergröße ist,
voreilt, gerade aus dem gleichen physikalischen Bereich lesen, in
den das Schreibermodul 122 gerade schreibt. Die Puffer-E/A-Schicht
200 erlaubt den Lesermodulen 1261 -126N , dem Schreibermodul 122 so
nahe wie möglich
zu folgen, um die Latenz zu minimieren.
-
Die
Puffer-E/A-Schicht 200 implementiert einen Synchronisations-Algorithmus
für das
Schreibermodul 122 und die Lesermodule 1261 -126N . Jedes Mal, wenn das Schreibermodul 122 Daten
in die Puffer-E/A-Schicht 200 zu übergeben wünscht, ruft seine entsprechende
Anwendung den Synchronisations-Algorithmus auf. Desgleichen, jedes
Mal, wenn eines der Lesermodule 1261 -126N Daten aus der Puffer-E/A-Schicht 200 zu
lesen wünscht,
ruft seine entsprechende Anwendung den Synchronisations-Algorithmus
auf. Der Synchronisations-Algorithmus kann, wie gewünscht, in
Hardware, Software oder einer Kombination von beiden implementiert
werden.
-
Der
Synchronisations-Algorithmus benutzt "Blockierung", um (1) ein Lesermodul 1261 -126N zu
sperren, das versucht, Daten zu lesen, die noch nicht geschrieben
wurden, und/oder (2) das Schreibermodul 122 zu sperren,
wenn es versucht, in einen Bereich des Ringpuffers 124 zu
schreiben, aus dem eines der Lesermodule 1261 -126N gerade liest. In beiden Fällen wird
eine Komponente gesperrt, bis eine andere Komponente die zum Beseitigen
der Anstoß erregenden
Situation erforderliche Operation vollendet hat. Wenn z.B. das Schreibermodul 122 gesperrt
wird, bleibt es gesperrt, bis alle Lesermodule 1261 -126N , die gerade aus dem zu schreibenden
Bereich lesen, ihr Lesen vollendet haben. Wenn ein Lesermodul gesperrt
wird, bleibt es gesperrt, bis das Schreibermodul 122 alle
von diesem Lesermodul verlangten Daten geschrieben hat.
-
Der
Synchronisatians-Algorithmus benutzt eine Vielzahl von gemeinsamen
Variablen. Jeder Klient hat seinen eigenen Satz von Variablen, der
mit anderen Klienten gemeinsam verwendet wird. In 8 ist
ein Ringpuffer 124 längs
einer linearen Zeitlinie von null bis unendlich angeordnet. Der
Synchronisations-Algorithmus unterhält einen "Schwanzzeiger" 230, der eine Ganzzahl-Variable
ist, die den logischen Schwanz von gültigen Daten im Ringpuffer 124 anzeigt.
Ein "Kopfzeiger" 232 ist
eine Ganzzahl-Variable, die den logischen Kopf von gültigen Daten
im Ringpuffer 124 anzeigt. Damit eine Leseoperation erfolgreich
ist, muss die logische Leseposition im Ringpuffer 124 größer oder
gleich dem Schwanzzeiger 230 und kleiner oder gleich dem
Kopfzeiger 232 sein. Da der Puffer 124 zirkular
ist, ist die logische Position des Schwanzzeigers 230 der
logischen Position des Kopfzeigers 232 auch logisch "voraus".
-
Wenn
das Schreibermodul 122 einen Schreibbefehl ausgibt, spezifiziert
sie einen im Puffer 124 zu schreibenden Bereich, beginnend
bei der momentanen Schreibposition 234. Eine "Schreiber-Gesperrt-Auf"-Ganzzahl-Variable 236 wird
benutzt, um die logische Position, die dem Ende der zu schreibenden Daten
entspricht, zu identifizieren, wenn der ganze oder ein Teil des
zu schreibenden Bereichs von einem oder mehreren der Lesermodule 1261 -126N gesperrt
wird. Die Schreiber-Gesperrt-Auf-Variable wird gesetzt, wenn eines
der Lesermodule 1261 -126N momentan aus diesem Bereich liest.
Zum Beispiel kann ein Lesermodul gegenwärtig von einer logischen Position 235 lesen,
die zwischen Positionen 234 und 236 liegt. Ein "Null"-Wert für die Schreiber-Gesperrt-Auf-Variable
zeigt an, dass das Schreibermodul 122 momentan nicht von
einem der Lesermodule 1261 -126N gesperrt wird.
-
Eine
Ganzzahl-Variable "Momentan-Lesen-Von" wird für jedes
der Lesermodule 1261 -126N unterhalten. Die Variable Momentan-Lesen-Von
wird benutzt, um anzuzeigen, dass das Le sermodul gerade ein Lesen durchführt, das
an dieser logischen Position in dem Ringpuffer 124 beginnt.
Zum Beispiel liest in 8 ein Lesermodul gerade von
der logischen Position 235 im Ringpuffer 124.
Die Variable Momentan-Lesen-Von wird benutzt, um zu verhindern,
dass das Schreibermodul 122 die Daten an der logischen
Position 235 überschreibt,
während
das Lesermodul gerade von der logischen Position 235 liest.
Wenn ein bestimmtes Lesermodul 1261 -126N momentan nicht aus dem Ringpuffer 124 liest,
wird seine entsprechende Momentan-Lesen-Von-Variable auf unendlich
gesetzt.
-
Eine
Variable "Schreiber-Ungesperrt-Ereignis" wird benutzt, um
das Schreibermodul 122 "aufzuwecken", wenn es mit seinem
gewünschten
Schreibbefehl fortfahren kann. Zum Beispiel wird die Schreiber-Ungesperrt-Ereignis-Variable
auf einen aktiven Status gesetzt, wenn das Schreibermodul 122 nicht
gesperrt ist, und wird auf einen inaktiven Status zurückgesetzt,
wenn das Schreibermodul 122 gesperrt wird. Das Schreiber-Ungesperrt-Ereignis
kann als ein WindowsR-Ereignis (ein "Win32"-Ereignis) oder durch
jeden anderen ähnlichen
Synchronisations-Mechanismus implementiert werden, der den Fachleuten
in der Technik vertraut ist.
-
Eine
Variable "Leser-Entsperr-Ereignis" wird für jedes
Lesermodul 1261 -126N benutzt, um das Lesermodul "aufzuwecken", wenn die Daten,
die es anfordert, vorhanden sind. Zum Beispiel wird die Variable
Leser-Entsperr-Ereignis auf einen aktiven Status gesetzt, wenn das
entsprechende Lesermodul 1261 -126N nicht gesperrt ist, und wird auf einen
inaktiven Status zurückgesetzt,
wenn das entsprechende Lesermodul 1261 -126N gesperrt ist.
-
Eine
Variable "Kritischer-Abschnitt" wird benutzt, um
den Zugriff auf jede der obigen gemeinsamen Variablen zu schützen. Zum
Beispiel kann ein "Win32" Kritischer Abschnitt
oder irgendein anderer ähnlicher
Synchronisationsmechanismus, z.B. ein gegenseitiges Ausschließungs-"Mutex"-Objekt, benutzt
werden, wie den Fachleuten in der Technik bekannt ist.
-
9A, 9B, 11A und 11B bilden
gemeinsam ein Flussdiagramm für
den Synchronisations-Algorithmus
nach einem Beispiel der vorliegenden Erfindung. Die während eines
Schreibens durchgeführten
Schritte werden in 9A gezeigt und sind mit 300-317 bezeichnet.
Wenn in Schritt 300 die Anwendung, die das Schreibermodul 122 treibt,
Daten an die Puffer-E/A-Schicht 200 zu übergeben
wünscht,
ruft die Anwendung einen Algorithmus 290 auf. In Schritt 301 sperrt
der Algoritmus 290 den kritischen Abschnitt, um den Zugriff
auf die in den Schritten 302-305 benutzten Variablen
zu schützen.
In Schritt 302 rückt
der Algorithmus 290 den "Schwanzzeiger" zu der logischen Position im Ringpuffer 124 vor,
die dem Ende des Schreibbefehls entspricht. Diese logische Position
wird von der Datenmenge abhängen,
die vom Schreibermodul 122 geschrieben wird. Die Datenlänge kann
von einem Schreibbefehl oder Datenblock zum nächsten variieren, und die Daten
können
beliebige Datenformate haben, die auch von einem Schreibbefehl oder
Datenblock zum nächsten
variieren können.
-
10 ist
ein Diagramm, das das Vorrücken
des Schwanzzeigers im Ringpuffer 124 veranschaulicht. Der
Schwanzzeiger 250 wird von der logischen Position 260 zu
der logischen Position 262 vorgerückt. Das Vorrücken des
Schwanzzeigers 250 macht sofort den zu schreibenden Bereich
(hinter dem vorgerückten Schwanzzeiger 250)
für künftiges
Lesen ungültig,
auch wenn das Schreibermodul 122 warten muss, bevor es tatsächlich das
Schreiben der Daten beginnen kann. Als Folge können, sobald das Schreibermodul 122 die Puffer-E/A-Schicht 200 durch
Aufrufen des Schreiberalgorithmusses informiert hat, dass es in
einen Bereich des Ringpuffers 124 zu schreiben wünscht, keine
neuen Lesermodule das Lesen aus diesem Bereich beginnen. Dies minimiert
die Zeit, während
der das Schreibermodul 122 auf die Lesermodule 1261 -126N warten muss,
und verhindert, dass der Schreiber andauernd gesperrt ist.
-
Wieder
auf 9A verweisend stellt des Synchronisations-Algorithmus 290 in
Schritt 303 fest, ob eine der "Momentan-Lesen-Von"-Variablen der Leser 1261 -126N kleiner
als (d.h. hinter) die "Schwanzvariable" ist. In 10 kann
z.B. ein Lesermodul eine Momentan-Lesen-Von-Variable haben, die
auf eine logische Position 272 im Ringpuffer 124 zeigt,
die kleiner als die logische Position 272 des vorgerückten Schwanzzeigers 250 ist.
Wenn dies der Fall ist, sperrt oder verzögert der Synchronisations-Algorithmus 290 das
Schreibermodul 122, sodass das in Konflikt stehende Lesermodul "aus dem Weg gehen
kann". Wenn keine
der Momentan-Lesen-Von-Variablen der Lesermodule kleiner als die
vorgerückte
Schwanzzeiger-Variable ist, geht der Synchronisations-Algorithmus 290 direkt
zu Schritt 311 (9B), um
die Daten in den Ringpuffer 124 zu schreiben.
-
In
Schritt 304 setzt der Algorithmus 290 die "Schreiber-Gesperrt-Auf"-Variable auf den
Wert der "Schwanzzeiger"-Variablen 250.
Dieser gibt die größte logische
Position im Ringpuffer 124 an, die die Lesermodule 1261 -126N verlassen
haben müssen,
bevor das Schreibermodul 122 die Daten schreiben kann.
Der Algorithmus 290 sperrt dann das Schreibermodul 122 durch
Rücksetzten
des "Schreiber-Entsperr"-Ereignisses auf
den inaktiven Status in Schritt 305. Da das Schreibermodul 122 gesperrt
ist, werden in Schritt 306 die Kritischen Abschnitte entsperrt.
In Schritt 307 wartet der Algorithmus 290 darauf,
dass die "Schreiber-Entsperr"-Ereignis-Variable durch den Synchronisations-Algorithmus
für den
in Konflikt stehenden Leser, der auf den zu schreibenden Bereich
zugreift, aktiviert wird. Wenn das in Konflikt stehende Lesermodul
das "Schreiber-Entsperr"-Ereignis aktiviert,
sperrt der Algorithmus 290 den Kritischen Abschnitt in
Schritt 308 und setzt dann in Schritt 309 die "Schreiber-Gesperrt-Auf"-Variable auf null
zurück.
In Schritt 310 entsperrt der Algorithmus 290 den
Kritischen Abschnitt wieder und geht zu Schritt 311 (gezeigt
in 9B).
-
In
Schritt 311 wandelt die Puffer-E/A-Schicht 200 die
logische Startadresse in eine zirkulare oder physikalische Adresse
um und schreibt die Daten in den Ringpuffer 124, beginnend
bei dieser physikalischen Adresse. Sobald die Daten geschrieben
sind, sperrt der Algorithmus 290 den Kritischen Abschnitt
für die
in Schritten 313-315 benutzten Variablen und rückt die "Kopfzeiger"-Variable zu der
logischen Position im Ringpuffer 124 vor, die dem Ende
der von dem Schreibermodul 122 geschriebenen Daten entspricht.
In dem in 10 gezeigten Beispiel wird der
Kopfzeiger 274 von Position 276 zu Position 278 (die
auch als "hinter" dem vorgerückten Schwanzzeiger 250 liegend
angesehen werden kann) vorgerückt.
Das Vorrücken
des Kopfzeigers 274 validiert die neu geschriebenen Daten
zwischen dem Kopfzeiger 274 und dem Schwanzzeiger 250.
-
In
Schritt 314 stellt der Algorithmus 290 fest, ob
eine der "Leser-Gesperrt-Auf"-Variablen der Lesermudule 1261 -126N kleiner
als die vorgerückte "Kopfzeiger"-Variable 274 ist.
Wenn nicht, hat keines der Lesermodule 1261 -126N auf die von dem Schreibermodul 122 geschriebenen
Daten gewartet, und der Algorithmus 290 geht zu Schritt 316.
Wenn ja, hatten ein oder mehrere der Lasermodule 1261 -126N auf
das Schreibermodul 122 gewartet, das nun die gewünschten
logischen Positionen validiert hat. In Schritt 315 setzt
der Algorithmus 290 alle solchen "Leser-Entsperr"-Variablen, um das entsprechende Lesermodul
zu entsperren.
-
In
dem in 10 gezeigten Beispiel kann ein
Lesermodul gerade warten, um Daten an der logischen Position 280 zu
lesen, die noch nicht verfügbar
war, als der Kopfzeiger 274 auf die logische Position 276 zeigte. Dieses
Lesermodul würde
eine "Leser-Gesperrt-Auf"-Variable gehabt
haben, die auf die logische Position 280 zeigt, wie durch
Pfeil 282 gezeigt. Nun, da die "Kopfzeiger"-Variable 274 auf die logische
Position 278 zeigt, die vor der logischen Position 280 liegt,
stehen die Daten in Position 280 zum Lesen zur Verfügung, und
der Algorithmus 290 setzt die "Leser-Entsperr"-Ereignis-Variable für dieses Lesermodul auf den
ak tiven Status, um dadurch das Lesermodul zu entsperren.
-
Wieder
auf 9B verweisend werden in Schritt 316 die
entsprechenden Kritischen Abschnitte entsperrt, und der Algorithmus
endet in Schritt 317.
-
11A und 11B veranschaulichen
zusammen einen Leseteil des Synchronisations-Algorithmusses 290,
der die Schritte 351-372 umfasst. Wenn eines der
Lesermodule 1261 -126N Daten aus dem Ringpuffer 124 zu
lesen wünscht,
ruft dieses Lesermodul den Algorithmus 290 in der Puffer-E/A-Schicht 200 in Schritt 351 auf.
In Schritt 352 sperrt der Algorithmus 290 den
Kritischen Abschnitt, um die in Schritten 353-355 benutzten
Variablen zu schützen.
In Schritt 353 stellt der Algorithmus 290 fest,
ob sich die zu lesende Menge von Daten bis zu einer logischen Position
im Ringpuffer 124 erstreckt, die jenseits der logischen
Position des "Kopfzeigers" liegt, sodass ein
Teil der gewünschten
Daten noch nicht gültig
ist. Wenn nicht, geht der Algorithmus direkt zu Schritt 360.
-
12 ist
ein Diagramm, das ein Beispiel des Ringpuffers 124 veranschaulicht,
wenn sich die verlangten Daten über
den Kopfzeiger hinaus erstrecken. Der Ringpuffer 124 hat
einen Schwanzzeiger 330 an einer logischen Position 332 und
einen Kopfzeiger 334 an einer logischen Position 336.
Wenn das Lesermodul Daten verlangt, die bei der logischen Position 337 beginnen
und sich bis zur logischen Position 338 erstrecken, die
jenseits der logischen Position 336 des Kopfzeigers 334 liegt,
dann setzt der Algorithmus 350 die Variable "Leser-Ist-Gesperrt-Auf" für dieses
Lesermodul auf die logische Position, die dem Ende der verlangten
Lesedaten entspricht (z.B. logische Position 338), wie
durch Pfleil 340 gezeigt. Wieder auf 11A verweisend setzt in Schritt 355 der
Algorithmus 350 das "Leser-Entsperr"-Ereignis-Variable
zurück,
um das entsprechende Lesermodul zu sperren. Da das Lesermodul gesperrt
ist, entsperrt in Schritt 356 der Algorithmus 350 den
entsprechenden Kritischen Bereich. In Schritt 357 wartet
der Algorithmus 350 darauf, dass die "Leser-Entsperr"-Variable für diesen Leser gesetzt wird
(in Schritt 315 in 9B). Sobald
die "Leser-Entsperr"-Variable gesetzt
ist. wird das entsprechende Lesermodul entsperrt, und in Schritt 358 wird
der Kritische Bereicht gesperrt. Die "Leser-Gesperrt-Auf"-Variable für diesen Leser wird dann in
Schritt 359 auf unendlich gesetzt, und der Algorithmus 350 geht
zu Schritt 360.
-
In
Schritt 360 stellt der Algorithmus 350 fest, ob
die logische Position, die dem Anfang der verlangten Daten entspricht,
vor der logischen Position der "Schwanzzeiger"-Variablen liegt.
Wenn ja, sind die verlangten Daten ungültig, da sie bereits durch
das Schreibermodul 122 überschrieben
wurden. In diesem Fall entsperrt in Schritt 361 der Algorithmus 350 den
Kritischen Abschnitt und verfehlt in Schritt 362 die verlangte
Leseoperation. Dieser Fehler kann an das entsprechende Lesermodul
durch eine Vielfalt von Mechanismen, z.B. eine Statusvariable, übergeben
werden.
-
Wenn
die verlangten Daten bei einer logischen Position beginnen, die
nicht vor der "Schwanzzeiger"-Variablen liegt,
geht der Algorithmus 350 zu Schritt 363 (in 11B). In Schritt 363 setzt der Algorithmus 350 die "Momentan-Lesen-Von"-Variable des Lesers
auf die logische Position am Anfang der verlangten Daten. In Schritt 364 wird
der Kritische Abschnitt entsperrt, und die logische Anfangsadresse
wird in eine zirkulare oder physikalische Adresse für den Ringpuffer 124 umgewandelt
(7). In Schritt 365 liest die Puffer-E/A-Schicht 200 die
verlangte Menge an Daten, beginnend bei der umgewandelten logischen
Adresse, und liefert in Schritt 365 die Daten an das entsprechende
Lesermodul. In Schritt 366 sperrt der Algorithmus 350 den
Kritischen Abschnitt. In Schritt 367 wird die "Momentan-Lesen-Von"-Variable für den Leser
auf unendlich zurückgesetzt,
da die Leseoperation vollendet wurde.
-
In
Schritt 368 stellt der Algorithmus 350 fest, ob
die "Schreiber-Gesperrt-Auf"-Variable auf eine
logische Position im Ringpuffer 124 zeigt, die größer als
die Leseposition ist. Die Leseposition ist die logische Position
im Ringpuffer 124, die dem Anfang der zu lesenden Daten
entspricht. Wenn die "Schreiber-Gesperrt-Auf"-Variable nicht größer als
diese logische Position ist, dann hat dieses Lesermodul das Schreibermodul 122 nicht
blockiert. Der Algorithmus 350 entsperrt dann in Schritt 369 den
Kritischen Abschnitt und vollendet in Schritt 370 seine
Funktion.
-
Wenn
die "Schreiber-Gesperrt-Auf"-Variable größer als
diese Position ist, hat dieses Lesermodul das Schreibermodul 122 blockiert,
und der Algorithmus 350 geht zu Schritt 371, um
festzustellen, ob irgendein anderes Lesermodul das Schreibermodul 122 blockiert.
Wenn nicht, setzt der Algorithmus 350 in Schritt 372 die "Schreiber-Entsperr"-Ereignis-Variable,
um das Schreibermodul 122 zu entsperren. Wenn es andere
Lesermodule gibt, die das Schreibermodul 122 blockieren,
geht der Algorithmus 350 zu Schritt 369, ohne
die "Schreiber-Entsperr"-Ereignis-Variable
zu setzen.
-
Der
in 9 und 11 gezeigte
Algorithmus kann in alternativen Ausführungen in vielfältiger Weise
modifiziert werden. Zum Beispiel kann es nicht erwünscht sein,
das Schreibermodul 122 zu sperren. Wenn die dem Schreibermodul 122 bereitgestellte
Strömungsinformation
verlorengehen kann, wenn das Schreibermodul 122 um eine
wesentliche Zeitdauer verzögert
wird, z.B., wenn das Schreibermodul 122 mit einem Fernseh-Tuner
verbunden ist, wäre
es nicht wünschenswert,
das Schreibermodul 122 zu verzögern. In diesen Ausführungen
wird der Algorithmus in 9A und 9B modifiziert,
um die Schritte 303-310 zu entfernen, die zum
Verzögern
des Schreibermoduls 122 dienen. Der Algorithmus 290 geht
von Schritt 302 direkt zu Schritt 311. Ähnlich wird
der Algorithmus 290 in 11A und 11B modifiziert, um die Schritte 366-369, 371 und 372 zu
entfernen, die zum selektiven Entsperren des Schreibermoduls 122 dienen.
-
Des
Weiteren kann der Algorithmus 290 modifiziert werden, um
die Schritte 360-362 (Validieren der Leseoperation)
entweder bevor oder nachdem das Lesen in Schritt 365 durchgeführt ist,
durchzuführen,
oder sowohl als auch. Validieren der Leseoperation vor der tatsächlichen
Leseoperation vermeidet ein verschwenderisches Lesen. Wenn gewünscht, können die
Schritte 360-362 jedoch nach Schritt 366 durchgeführt werden. Die
Schritte 360-362 können ebenfalls
sowohl vor als auch nach dem Leseschritt 365 durchgeführt werden.
-
Der
in 9 und 11 gezeigte
Synchronisations-Algorithmus benötigt
keinen Ringpuffer wie der in 6 gezeigte.
Der Synchronisations-Algorithmus kann mit kleineren Modifikationen
auch in einen linearen Puffer benutzt werden, der sowohl logische
als auch physikalische Adressen besitzt, die sich bei einer auf
der Größe des Puffers
basierenden Frequenz überlagern.
Der Ringpuffer erlaubt jedoch, dass ein Lesermodul in Bezug auf
das Schreibermodul zeitverschoben ist, sodass ein Teil der Strömungsinformation
dem Benutzer auf Verlangen zur "Sofort-Wiedergabe" zur Verfügung steht.
Ein Ringpuffer erlaubt dem Benutzer, ein Programm pausieren zu lassen,
erlaubt dem Benutzer aber nicht, den Puffer versehentlich mit zeitverschobenen
Daten aufzufüllen.
Das Schreibermodul schreibt immer an den "Anfang" des Puffers, der der Punkt ist, der
sich kreisförmig
durch den Puffer bewegt.
-
Der
in 9 und 11 gezeigte
Synchronisations-Algorithmus erlaubt auch dem Benutzer, die im Puffer gespeicherten
Daten schnell vorwärts
zu durchlaufen. Wenn der Benutzer ein Lesermodul hat pausieren lassen,
sodass das Schreibermodul diesem Leser erheblich voraus ist, hat
der Benutzer oder die Anwendung die Möglichkeit, das Lesermodul schnell
vorwärts
laufen zu lassen, um zu dem Schreibermodul aufzuschließen. Der
Synchronisations-Algorithmus stoppt jedoch den schnellen Vorlauf,
wenn das Lesermodul das Schreibermodul einholt. Das Lesermodul kann
z.B. ein "Direktzeigen"-Ereignis (oder ein
anderer geeigneter Er eignis-Mechanismus, der der Softwareumgebung
zur Verfügung
steht) einleiten, wann immer das Lesermodul durch das Schreibermodul
gesperrt wird. Die Anwendung erkennt dieses Ereignis und schaltet
den Zustand des Lesermoduls vom schnellen Vorlauf in den normalen
Abspielmodus. Wenn das Schreibermodul das Lesermodul einholt, kann
eine Verfälschung
durch das Schreibermodul vermieden werden, indem (1) das Lesermodul
gesperrt wird, bis die Daten vorhanden sind, (2) das Schreibermodul
gesperrt wird, bis der Leser aus dem Weg ist, oder (3) der Leser
nach vorne bewegt wird, indem eine Pause des Lesers abgebrochen
oder der Leser schnell vorwärts
bewegt wird.
-
Benutzeroperation-Erlaubnisprüfung
-
In
einer Ausführung
enthält
das Verzögerungsfilter 112 (gezeigt
in 6) weiter einen Benutzeroperation-Erlaubnisprüfungs- und
-Mitteilungsmechanismus, der verträgliche Betriebszustände in dem
Filter aufrechterhält. 13 ist
ein Diagramm, das ein Statusregister 420 veranschaulicht,
das von dem Verzögerungsfilter 112 für jeden
Datenstrom, oder Kanal, durch das Filter unterhalten wird. Das Verzögerungsfilter 112 kann das
Register 420 z.B. in einem RAM oder einem anderen Speichermedium
unterhalten. Das Statusregister 420 enthält eine
Vielzahl von Feldern, wobei jedes Feld ein oder mehrere Bits hat.
In dem in 13 gezeigten Beispiel entsprechen
die Bits 0-10 des Statusregisters 420 jeweils Benutzeroperationsfeldern
UOP1-UOP10. Die Bits 11-27 entsprechen reservierten Feldern. Die
Bits 28-31 entsprechen einem Kanal-Streamer-ID-Feld, das den einzelnen
Datenstrom durch das Schreibermodul 122 und die Lesermodule 1261 -126N identifiziert,
mit denen das Statusregister 410 verbunden ist. Jedes Benutzeroperationsfeld
UOP1-OUP10 hat einen Binärwert, der
anzeigt, ob die entsprechende Benutzeroperation erlaubt oder verboten
ist. Zum Beispiel würde
eine binäre "eins" in dem entsprechenden
Feld anzeigen, dass diese Benutzeroperation erlaubt ist. Eine binäre "null" in einem Benutzeroperationsfeld
würde anzeigen,
dass diese Benutzeroperation verboten ist. 14 ist
eine Tabelle, die Beispiele von Benutzeroperationen auflistet, die
Benutzeroperationsfeldern UOP0-UOP10 entsprechen. Das Verzögerungsfilter 112 unterhält die UOP-Felder
für jeden
Strom oder Kanal basierend auf dem Status seines Lesermoduls. Das
Verzögerungsfilter 112 aktualisiert
die Benutzeroperationsbits jedes Mal, wenn sich der Status des Lesermoduls ändert.
-
Bestimmte
Benutzeroperationen können
nur in bestimmten Zuständen
des Verzögerungsfilters
erlaubt sein. Der Gebrauch einer verbotenen Operation könnte zu
unverträglichen
Zuständen
in dem Verzögerungsfilter
und der Benutzerschnittstelle führen.
Zum Beispiel ange nommen, dass ein Lesermodul, das eine "Zeitverschiebung" des Multimedia-Inhalts
durchführt,
am Punkt X im Ringpuffer 124 pausiert. In der Zwischenzeit schreibt
das Schreibermodul 122 noch Daten in den Ringpuffer 122.
Abhängig
von der Größe des Ringpuffers 124 und
der Zeit, für
die das Lesermodul pausiert hat, gibt es eine Möglichkeit, dass das Schreibermodul 122 zu
dem Punkt X, wo das Lesermodul pausiert, aufschließen und
versuchen kann, die Daten zu überschreiben. In
diesem Fall kann das Verzögerungsfilter 112 das
Lesermodul zwingen, die Pause abzubrechen, und eine Nachricht an
die Anwendung senden, dass die Pause des Lesermoduls abgebrochen
wurde. Es gibt ein kleines Zeitfenster zwischen der Zeit, bei der
die Pause des Lesermoduls abgebrochen wird, und der Zeit, bei der die
Anwendung die Benachrichtigung empfängt. Während dieses Zeitfensters könnte die
Anwendung einen verbotenen Benutzerbefehl, z.B. Vorwärtssuchen,
ausgeben. Das Lesermodul wird nun das Vorwärtssuchen zu der Zeit durchführen, bei
der die Anwendung die Nachricht empfängt, dass die Pause des Lesermoduls
abgebrochen wurde, und wird mit normaler Geschwindigkeit spielen.
Die Anwendung und das Verzögerungsfilter 112 befinden
sich daher in unverträglichen
Zuständen.
-
Um
dieses Problem zu vermeiden, erlaubt das Verzögerungsfilter 112 der
Anwendung, die Benutzeroperationsbits jedes Mal zu prüfen, wenn
eine Benutzeroperation ausgegeben wird, um die Gültigkeit der Operation zu überprüfen. Außerdem berichtet
jedes Mal, wenn sich die Benutzeroperationsbits ändern, das Verzögerungsfilter 112 diese Änderung
an die Anwendung. Die Anwendung kann daher ihre Benutzerschnittstelle aktualisieren,
um sicherzustellen, dass keine ungültigen Benutzeroperationen
an das Verzögerungsfilter 112 ausgegeben
werden.
-
15 ist
ein Flussdiagramm eines Softwaremoduls oder Objekts, das von der
Anwendung durch z.B. eine Anwendungsprogrammschnittstelle ("API") immer dann aufgerufen
werden kann, wenn der Benutzer eine Operation anfordert oder sich
die Benutzeroperations-Statusbits ändern. In Schritt 430 wartet
die Anwendung darauf, dass der Benutzer eine Operation anfordert.
Sobald eine Benutzeroperation angefordert ist, prüft die Anwendung
in Schritt 431 den Status des entsprechenden Benutzeroperationsbits.
Wenn die Operation in Schritt 432 erlaubt ist, gibt die
Anwendung in Schritt 433 die verlangte Operation an das
Verzögerungsfilter 112 aus.
Wenn die verlangte Operation verboten ist, wird die Operation in
Schritt 434 zurückgewiesen.
-
16 ist
ein Flussdiagramm, das Schritte veranschaulicht, die das Verzögerungsfilter
beim Unterhalten der Benutzeroperationsbits für jedes Statusregister durchführt. In
Schritt 440 erfasst das Verzögerungsfilter 112 eine
Zustandsänderung
eines der Lesermodule. In Schritt 441 werden die Benutzeroperationsbits
des Statusregisters für
den entsprechenden Strom oder Kanal als eine Funktion der Zustandsänderung
aktualisiert. Das Verzögerungsfilter 112 informiert
dann in Schritt 442 die Anwendung z.B. durch eine API für diesen
Strom oder Kanal über
die Zustandsänderung.
Die Anwendung kann dann die Benutzerschnittstelle aktualisieren,
um ausgewählte
Untermengen der in 14 aufgeführten Benutzeroperationen zu
sperren oder freizugeben. Eine Aktualisierung der Benutzerschnittstelle
kann z.B. das Setzen oder Rücksetzen
von Lichtanzeigern, das Ausgeben einer hörbaren Warnung oder das Ändern von
Schirmanzeigen umfassen. Die Anwendung kann feststellen, ob die
Benutzerschnittstelle aktualisiert werden sollte, indem sie das
Verzögerungsfilter 112 nach
den Benutzeroperationsbits für
einen bestimmten Strom oder Kanal fragt.
-
Zeitverschieben
-
Ein
anderer durch die exemplarische Ausführung veranschaulichter breiter
erfinderischer Aspekt enthält
das Konzept des "Zeitverschiebens", wenn Strömungsinformation
wiedergegeben wird. Im Allgemeinen implementiert eine Informationsvorrichtung
zum Empfangen von Strömungsinformation
das Zeitverschieben, indem sie einen Puffer (in einer Ausführung der
Ringpuffer 124), ein Schreibermodul 122, das Blöcke von
Strömungsinformation
empfängt
und Blöcke
in den Puffer schreibt, und wenigstens ein Lesermodul 126 enthält, das
die Blöcke
selektiv aus dem Puffer liest.
-
Obwohl
alle Signalverarbeitungsvorrichtungen inhärent eine Signalausbreitungsverzögerung enthalten,
ist "Zeitverschieben", wie hierin gebraucht,
aus den unten erörterten
Gründen
getrennt oder in jeder Kombination unterscheidbar. In dem ersten
Fall ist der Betrag der Zeitverschiebung (d.h. die relative Position
von einem der Lesermodule 125 in Bezug auf das Schreibermodul 122 im
Ringpuffer 124) selektiv und einstellbar. In einer ersten
Betriebsart kann der Benutzer "Rückspulen", "Pause", "Schnell Vorwärts" und "Spielen" in jeder gewünschten
Reihenfolge wählen,
um dadurch die relative Leseposition eines zugehörigen Lesermoduls 126 in
Bezug auf eine Position des Schreibermoduls 122 im Ringpuffer 124 zu ändern. Wiedergegebene
Strömungsinformation
(die mit einem Lesermodul 126 beginnt) wird folglich zeitlich
gegenüber
der Strömungsinformation
verschoben, die von dem Schreibermodul 122 geschrieben
wird.
-
In
einer anderen Betriebsart wird Logik bereitgestellt, um den Betrag
der Zeitverschiebung basierend auf dem Betrieb des Systems und ohne
Eingreifen des Benutzers einzustellen. Wenn z.B. ein Lesermodul durch
einen Benutzer zum Pausieren gebracht wurde, um so die gegenwärtige Position
des Lesermoduls 126 im Ringpuffer 124 beizubehalten,
kann es zu einer Zeit erforderlich sein, das Vorrücken der
Leserposition zu beginnen, damit das Schreibermodul 122 neue
Strömungsinformation
im Ringpuffer 124 speichern kann. Diese Situation kann
erfordern, dass sich das Lesermodul 126 in dem Ringpuffer 124 mit
einer Rate vorwärts
zu bewegen beginnt, die größer als
die oder wenigstens gleich der Rate ist, mit der Strömungsinformation
in den Ringpuffer 124 geschrieben wird.
-
Eine
automatische Einstellung der Position eines Lesermoduls 126 im
Ringpuffer 124 kann auch durch Benutzerbefehle eingeleitet
werden, die nicht direkt mit dem Verschieben einer Position des
Lesermoduls 122 verbunden sind, z.B. "Spielen", "Pause", "Rückspulen", und "Schnell Vorwärts". Wie wahrscheinlich am besten durch
Beispiel veranschaulicht, kann die Quelle von Strömungsinformation
für das
Verzögerungsfilter 112 eine Mehrfach-Rundfunkkanaleinrichtung
sein, wie z.B. ein Fernseh-Tuner oder dergleichen. Wenn der Benutzer das
Wiedergeben von Information gemäß einem
gewählten
Rundfunkkanal pausieren lässt
und dann das Wiedergeben der Information auf dem gleichen Rundfunkkanal
fortsetzt, wird sich folglich die zugehörige Position des Lesermoduls 126 ändern, um
dadurch den relativen Abstand der Position des Lesermoduls 126 und
der Position des Schreibermoduls 122 im Ringpuffer 124 zu
vergrößern. Wenn
der Benutzer dann einen anderen wiederzugebenden Rundfunkkanal,
z.B. einen anderen Fernsehkanal, wählt, dann wird das Schreibermodul 122 die
mit dem neuen Rundfunkkanal verbundene Strömungsinformation in dem Ringpuffer 124 aufzeichnen. Da
jedoch die Position des Lesermoduls 126 gegenüber der
Position des Schreibermoduls 122 um eine Verzögerung proportional
zu dem Zeitbetrag, den der Benutzer pausiert hatte, zeitverschoben
ist, wird der Benutzer die neue Rundfunkkanalwahl erst bemerken,
wenn das Lesermodul 126 die durch den Wechsel des Rundfunkkanals
bereitgestellte neue Strömungsinformation
im Ringpuffer 124 erreicht. Um den durch das Vorangehende
dargelegten Problemen zu begegnen, wird die Position des Lesermoduls 126 automatisch
zu einer Position im Ringpuffer 124 vorgerückt, die
an die Position des Schreibermoduls 122 angrenzt. Diese
Technik vermindert den Betrag der Verzögerung, sodass wiedergegebene
Strömungsinformation
der Rundfunkkanalwahl in einer Mehrfach-Rundfunkkanalumgebung im
Wesentlichen folgt.
-
Ein
anderes Unterscheidungsmerkmal zwischen "Zeitverschieben", wie hierin gebraucht, und einer typischen
Signalausbreitungsverzögerung
ist das zum Aufzeichnen von Strömungsinformation
verwendete Medium. Insbesondere kann, wie oben erörtert, der
Ringpuffer 124 mittels einer der oben beschriebenen Speichereinrichtungen,
z.B. RAM-Speicher, Festplatte 27 oder dergleichen, verkörpert werden.
Außerdem
ist die Menge an Speicher, die im Ringpuffer 124 vorhanden
ist, ausreichend, um, wenn gewünscht,
eine wahrnehmbare Verzögerung
für den
Benutzer bereitzustellen. In einer Ausführung liefert die Größe des Ringpuffers 124 wenigstens
fünf Minuten
Verzögerung
zwischen dem Schreiben und Wiedergeben von Strömungsinformation. In einer
weiteren Ausführung
reicht die Größe des Ringpuffers 124 aus,
um wenigstens eine Verzögerung
von 30 Minuten zwischen dem Schreiben und Wiedergeben der Strömungsinformation
bereitzustellen. In noch einer weiteren Ausführung ist die Größe des Ringpuffers 124 ausreichend,
um eine Verzögerung
von wenigstens einer Stunde bereitzustellen.
-
Ein
weiteres Unterscheidungsmerkmal der Zeitverschiebung, wie hierin
gebraucht, ist das Vorhandensein eines einzigen Schreibermodul und
einer Vielzahl von unabhängigen
Lesermodulen 1261 -126N .
-
In
einer Ausführung
wird alle von der Strömungsquelle 114 empfangene
Information zuerst im Ringpuffer 124 gespeichert, bevor
die Strömungsinformation
an den Benutzer zurückgegeben
wird. Mit anderen Worten, alle an den Benutzer zurückzugebende
Information wird mit einem zugehörigen
Lesermodul 126 aus dem Ringpuffer 124 gelesen,
wobei es keine direkte Verbindung von der Strömungsquelle 114 zu
der Wiedergabeeinrichtung 116 gibt.
-
Obwohl
das Aufzeichnen im und das Lesen aus dem Ringpuffer 124 vor
dem Wiedergeben der Strömungsinformation
die Ausbreitungsverzögerung
etwas erhöhen
kann, wenn die Position des Lesermoduls 126 im Ringpuffer 124 im
Wesentlichen an die Position des Schreibermoduls 122 angrenzt,
umfassen die Vorteile des immer Schreibens in den und Lesens aus
dem Ringpuffer 124 eine Vereinfachung im Systementwurf
und -betrieb, was die Systemstabilität erhöht. Obwohl in dem System eine
Schaltvorrichtung bereitgestellt werden könnte, um zwischen im Wesentlichen "Live"-Strömungsinformation
und zeitverschobener Strömungsinformation,
wie vom Verzögerungsfilter 112 bereitgestellt,
umzuschalten, erfordert die Schaltvorrichtung, ob Software, Hardware
oder eine Kombination davon, trotzdem eine andere Komponente in
diesem System, die entworfen und geprüft werden muss, um mit den übrigen Komponenten
des Systems zu arbeiten. Des Weiteren ist durch Beseitigen einer
direkten Verbindung der Quelle der Strömungsinformation 114 und
der Wiedergabe einrichtung 116 und immer Lesen aus dem Ringpuffer 124 vor
dem Wiedergeben die Qualität
der wiedergegebenen Information gleichbleibend. Mit anderen Worten,
es gibt keine Änderung
in der Qualität
(z.B. Videoqualität
oder Audioqualität)
von wiedergegebener Strömungsinformation,
da alle Information die gleichen Systemkomponenten durchlaufen muss.
Indem immer in den Ringpuffer 124 geschrieben und daraus
gelesen wird, muss sich außerdem
der Benutzer nicht erinnern, einen bestimmten Befehl auszuführen, sodass
Strömungsinformation
aufgezeichnet wird, um z.B. "Sofort-Abspielen" bereitzustellen.
Auf diese Weise ist der Benutzer auch in der Lage, ein ganzes Segment
von Strömungsinformation
(z.B. eine Fernseh-Show) zurückzugewinnen
und zu speichern, auch wenn der Benutzer bereits einiges der Strömungsinformation
wiedergegeben hat. Wenn der Benutzer eine Show betrachtet und dann
später
entscheidet, die Show zu speichern, kann er das Archivsystem 136 aufrufen,
um am Anfang der Show im Ringpuffer 124 zu beginnen und
eine Kopie der Strömungsinformation
in eine dauerhaftere Datei zu übertragen.
Das Letztere kann, während
der Benutzer noch die Show ansieht, mit einem getrennten Lesermodul 126 durchgeführt werden.
Der Benutzer muss jedoch das Speichern oder Archivieren einleiten,
bevor das Schreibermodul 122 irgendwelche Teile der gewünschten
Strömungsinformation überschreibt,
aber in einer bevorzugten Ausführung
ist der Ringpuffer 124 lang genug, um viele Minuten, wenn
nicht Stunden, an gespeicherter Information bereitzustellen.
-
Datenblockstruktur
-
17 ist
eine bildliche Darstellung eines Blocks 500 von im Ringpuffer 124 gespeicherten
Daten für einen
Strom einer Mehrstromquelle von Strömungsinformation. Der Datenblock 500 enthält allgemein
einen Vorspannteil 502, einen Daten- oder Nutzlastteil 504 und
einen Schwanz- oder Endteil 506. Der Vorspannteil 502 enthält relevante
Information bezüglich
der Größe des Datenblocks
und des Kanals, zu dem er gehört. Insbesondere
enthält
der Vorspannteil 502 ein Feld 508, in dem die
Größe des ganzen
Blocks, einschließlich dieses
Feldes, gespeichert ist. Feld 509 enthält Information, die benutzt
wird, um die Strömungsinformation
zu identifizieren, zu der der Datenblock gehört. Feld 510 liefert
einen Abstand (typischerweise Bytes) vom Beginn des Datenblocks
bis zu der Stelle, wo die tatsächliche
Strömungsinformation
oder Nutzlast im Datenblock 500 gespeichert ist. Feld 511 stellt
einen Wert bereit, der die Größe der tatsächlichen
Daten oder Nutzlast 504 angibt. In einer Ausführung haben
alle Felder 508-511 eine feste Länge, damit
ihre Stelle im Datenblock 500 bekannt ist.
-
In
einer Ausführung
wird auch ein Feld 512 im Vorspannteil 502 bereitgestellt.
Das Feld 512 stellt andere für die Strömungsinformation relevante
Information bereit. Wie hierin gebraucht, wird das Feld 512 angesichts
seiner Beziehung zu den eigentlichen Daten oder Nutzlast 502 als "Präfixfeld" bezeichnet. In einer
Ausführung
hat das Präfixfeld 512 eine
variable Länge,
sodass die Länge
der Information nicht eingeschränkt
werden muss. Wenn gewünscht,
wird auch ein Feld 513 bereitgestellt, das die Größe des Präfixfeldes 512 angibt. Typischerweise
hat das Feld 513, wie die Felder 508-511,
eine feste Länge.
-
Das
Präfixfeld 512 kann
benutzt werden, um Information, z.B. Synchronisationsanzeiger, unten
erörtert,
einen Zeiger auf den nächsten
Block, der zum gleichen Strom gehört, oder andere Information,
wenn gewünscht,
zu speichern. Wie die Fachleute einsehen werden, wird ein Format
für Information,
die in dem Präfixfeld 512 enthalten
sein soll, spezifiziert, damit relevante Information leicht decodiert
werden kann. Da das Präfixfeld 512 eine
beliebige Länge
haben kann, kann zusätzliche
Information, wenn nötig,
gespeichert werden, um so den Datenblock 500 erweiterbar
zu machen.
-
Man
sollte auch zur Kenntnis nehmen, dass das Präfixfeld 512 auch eine
ausgewählte
Menge an "Füll"-Daten enthalten
kann. Die Fülldaten
werden benutzt, um die Größe des Datenblocks
auf eine vorbestimmte Länge
einzustellen oder zu erhöhen,
was für
die Verarbeitung oder Speicherung im Ringpuffer 124 erwünscht sein
kann.
-
Das
Daten- oder Nutzlastfeld 504 speichert von der Strömungsinformationsquelle 114 empfangene
Digitaldaten, die wiedergegeben werden.
-
In
der veranschaulichten Ausführung
enthält
der Schwanz- oder Endteil 506 zwei Felder 520 und 521. Das
Feld 520, hierin auch als "Suffix"-Feld bezeichnet, gleicht dem Präfixfeld
dadurch, dass es benutzt werden kann, um Information über in dem
gleichen Strom folgende oder verangehende Datenblöcke zu speichern.
In einer Ausführung
ist das Suffixfeld 520 an einer bekannten Stelle vom Ende
des Datenblocks 500 und speichert einen Zeiger, der die
Stelle des vorangehenden Datenblocks, der dem gleichen Kanal entspricht,
anzeigt. Diese Information ist besonders nützlich, wenn es erforderlich
sein kann, eine "Rückspulen"-Operation auf der im
Ringpuffer 124 enthaltenen Strömungsinformation durchzuführen. Das
Suffix-Feld 520 kann auch andere in dem Datenblock 500 vorhandene
Information, z.B. mit Feld 511 und Feld 513 verbundene
Daten, enthalten. In einer dem Präfixfeld 512 ähnlichen
Weise ist ein Format für
die in dem Suffixfeld 520 enthaltene Information vorbestimmt
und dem Lesermodul bekannt, damit relevante Information davon gewonnen
werden kann. Das Suffix feld 520 kann feste oder variable
Länge haben,
wobei es erwünscht
sein kann, ein zusätzliches
Feld ähnlich
Feld 513 bereitzustellen, das die Länge des Suffixfelds 520 angibt.
Das Suffixfeld 520 kann auch benutzt werden, um, wenn gewünscht, "Füll"-Daten zu speichern.
-
Das
Feld 521 liefert die Größe des Datenblocks 500 und
ist als solches identisch mit dem Feld 508 im Vorspannteil 502.
Das Feld 521 ist nützlich,
wenn ein Lesermodul rückwärts durch
den Ringpuffer 124 geht. Auf diese Weise kann das Lesermodul
die Größe eines
Datenblocks 500 durch Lesen des im Feld 521 enthaltenen
Werts feststellen, wobei an diesem Punkt das Lesermodul festgestellt
hat, wo sich das Ende des vorangehenden Blocks befindet. Ohne das
Vorhandensein des Felds 521 müsste das Lesermodul ansonsten
den Datenblock absuchen, um seine Größe oder Anfangsstelle zu ermitteln,
was Verarbeitungszeit verbrauchen kann.
-
18 veranschaulicht
eine Folge von Datenblöcken 530 von
einer Mehrstrom-Strömumgsinformationsquelle.
Insbesondere umfassen Datenblöcke 532A, 532B und 532C einen
Teil eines ersten Stromes; Datenblöcke 534A und 534B umfassen
einen Teil eines zweiten Stromes, und Datenblöcke 536A und 536B umfassen
einen Teil eines dritten Stromes. Die Datenblöcke 532A-532C, 534A-534B und 536A-536B umfassen gemeinsam
einen einzelnen Kanal (z.B. Audio, Video und Daten) und sind gewöhnlich,
wie in 18 varanschaulicht, verschachtelt.
Grundsätzlich
besteht jedoch keine Notwendigkeit, eine bestimmte Reihenfolge einzuhalten.
-
Wie
oben angedeutet, können
die Präfixfelder 512 und
Suffixfelder 520 verwendet werden, um Zeiger zu speichern,
die vorangehende und nachfolgende Datenblöcke in jedem der Stromströme anzeigen.
In der Darstellung von 18 stellen Pfeile 534 dar,
dass Präfixfelder 512 von
Datenblöcken 530 Zeiger
oder Adressen des unmittelbar folgenden Datenblocks in jedem der
Ströme
speichern. Ähnlich
stellen Pfeile 536 dar, dass Suffixfelder 520 von
jedem der Datenblöcke
Zeiger oder Adressen des in jedem Strom unmittelbar vorangehenden
Datenblocks speichern. In einer Ausführung speichert jedes der Präfixfelder 512 die
Adresse des Präfixfelds 512 in
dem unmittelbar folgenden Datenblock, während jedes der Suffixfelder 520 die
Adresse des Suffixfelds 520 in dem unmittelbar vorangehenden
Datenblock speichert. Auf diese Weise kann das Lesermodul 126 Datenblöcke für einen
bestimmten Strom von Strömungsinformation
schnell auffinden und verarbeiten.
-
19 veranschaulicht
eine zweite Sequenz von Datenblöcken 550.
In der Sequenz 550 gehören
Datenblöcke 552, 554 und 556 zu
von der Strömungsinformationsquelle 114 empfangener
Strömungsinformation, die
von Wiedergabeeinrichtungen 116 in der oben und unten weiter
erörterten
Weise selektiv wiedergegeben werden wird. Die Sequenz 550 enthält jedoch
Datenblöcke 558 und 560,
die die Sequenz 550 "vollstopfen" und keine wiederzugebende
Strömungsinformation
enthalten. Stattdessen werden die Datenblöcke 558 und 560 benutzt,
um, wenn gewünscht,
die im Ringpuffer 124 oder einer anderen Speichereinrichtung
gespeicherte Sequenz 550 zu organisieren oder zu strukturieren.
Zum Beispiel kann es erwünscht
sein, dass im Ringpuffer 124 gespeicherte Datenblöcke mit
einem definierten Mediengrenzenabschnitt, z.B. Sektor- oder Cluster-Grenzen, übereinstimmen.
In 19 sind gewünschte
Grenzen bei 562A und 562B angegeben. Datenblöcke 552, 554 und 556 sind
zusammen mit einem Fülldatenblock 560 geeigneter
Größe oder
Länge organisiert,
sodass ein Datenblock 564 an der Grenze 562B beginnt.
Wenn gewünscht,
kann eine Vielzahl von Fülldatenblöcken benutzt
werden, und die Reihenfolge von Strömungsinformations-Datenblöcken und
Fülldatenblöcken kann
verändert
werden, um alle gewünschten
Kriterien zu erfüllen.
Die Sequenz von 19 ist nur eine exemplarische Sequenzstruktur.
-
Man
sollte beachten, dass das Feld 509 jedes Datenblocks benutzt
werden kann, um Fülldatenblöcke von
anderen Strömungsinformations-Datenblöcken zu
unterscheiden, wobei das Schreibermodul 122 Fülldatenblöcke während des
Verarbeitens und Bildens von Strömungsinformations-Datenblöcken nach
Bedarf erzeugen kann. Des Weiteren können Fülldatenblöcke, wenn gewünscht, in
Kombination mit "Füll"-Daten benutzt werden,
die im Präfixfeld 512 oder
Suffixfeld 520 bereitgestellt werden. Der Mux-Formatierer 138 und
das Schreibermodul 140 können auch den Gebrauch von
Fülldatenblöcken und/oder
im Präfixfeld 512 oder
Suffixfeld 520 enthaltener Fülldaten implementieren.
-
Mehrfache Leser pro Puffer
-
In
einigen Fällen
kann es erwünscht
sein, einer Vielzahl von Benutzern zu gestatten, jederzeit auf die Strömungsinformation
zuzugreifen. Dies kann auf vielfache Weise zustande gebracht werden.
Zum Beispiel könnte
die Strömungsinformation
dupliziert werden und ein Lesermodul könnte für jede Kopie der Strömungsinformation
bereitgestellt werden. Dies erfordert jedoch eine große Menge
an Speicher und kann auch erhöhte Verarbeitungsleistung
zum Herstellen mehrfacher Kopien der Strömungsinformation und Zugreifen
auf die duplizierten Kopien erfordern. Sobald die vorbestimmte Zahl
von Kopien der Strömungsinformation
im Gebrauch ist, kann es außerdem
schwierig werden, neue Benutzer hinzuzufügen.
-
20 gleicht
der oben beschriebenen 6. 20, zeigt
jedoch Teile eines Systems 610 ausführlicher und beseitigt der
Klarheit wegen andere Teile. 20 zeigt,
dass das System 610 einen Ringpuffer 124, eine
Vielzahl von Lesermodulen 614, 616, 618 und 610 (die
die gleichen wie die oben erwähnten
Lesermodule 126 oder ähnliche
sein können),
die mit einer Vielzahl von Benutzern (Benutzer 630-636)
verbunden sind. Desgleichen zeigt 20, dass
jedes Lesermodul eine Schnittstelle 622, 624, 626 bzw. 628 enthält. Die
Schnittstellen 622-628 werden
unten ausführlicher
beschrieben.
-
Bei
der in 20 gezeigten veranschaulichenden
Ausführung
wird eine Vielzahl mit den Schnittstellen 622-628 verbundener
Benutzer 630, 632, 634 und 636 dargestellt.
In der gezeigten Ausführung
sind Benutzer 630 und 632 Betrachter oder Wiedergabeanwendungen
zum Betrachten oder Wiedergeben von im Ringpuffer 124 gespeicherter
Strömungsinformation,
während
Benutzer 634 und 636 Datenspeicherorte sind, die
zum Archivieren der im Ringpuffer 124 gespeicherten Strömungsinformation
verwendet werden. 20 zeigt auch ein getrenntes
Anwendungsprogramm 638, das separat mit den Schnittstellen 622-628 verbunden
ist.
-
Man
sollte wiederum beachten, dass 20 nur
veranschaulichend ist und dass jede Zahl von Benutzern oder Anwendungsprogrammen
mit jeder Zahl von Lesermodulen verbunden werden kann. Desgleichen können die
Benutzer jede Art von geeigneten Benutzern sein, die auf die im
Ringpuffer 124 gespeicherte Strömungsinformation zuzugreifen
wünschen
und auf die Information aus anderen Gründen als Betrachten oder Archivierungszwecke
zugreifen können,
wie in 20 gezeigt. Ebenso muss nach
diesem Aspekt der vorliegenden Erfindung die gepufferte Strömungsinformation
nicht unbedingt im Ringpuffer 124 gespeichert werden, sondern
kann in einem linearen Puffer oder jeder anderen Art von Puffer
gespeichert werden. Der Ringpuffer 124 wird daher nur der
Einfachheit wegen veranschaulicht.
-
In
einer veranschaulichenden Ausführung
werden die Lesermodule 614-620 als Objekte implementiert,
die dem COM objektorientierten Programmiermodell entsprechen. Jedes
Lesermodul oder "Leserobjekt" hat unabhängigen Zugriff
auf die gepufferte Strömumgsinformation.
Jedes Lesermodul 614-620 ist als auf die Strömungsinformation
an einer anderen Stelle auf dem Ringpuffer 124 zugreifend
dargestellt. Dies zeigt, dass die Lesermodule 614-620 auf
die gepufferte Information zu verschiedenen Zeiten in dem gepufferten
Strömungsinformationsstrom
zugreifen können.
Dies erlaubt den vielfachen Benutzern 630-636,
alle Merkmale der oben erwähnten
Zeitverschiebung zu verwenden, ohne andere Benutzer, die auf den
gepufferten Strom zugreifen, zu stören. Ein Benutzer kann z.B.
die Strömumgsinformation
zum späteren
Betrachten archivieren, während
ein anderer Benutzer zur gleichen Zeit die Information anschauen
kann.
-
Ebenso
kann der Archivbenutzer die gepufferte Strömungsinformation von einer
Zeit oder Stelle in dem Datenpuffer speichern, die anders ist als
die Zeit oder Stelle in dem Datenpuffer, auf die der Betrachter zugreift.
Zum Beispiel kann der Archivbenutzer einfach die Information lesen
wie sie im Ringpuffer 124 aufgezeichnet ist und sie im
Archivspeicher speichern. Im Gegensatz dazu kann der Betrachter
die Daten betrachten, aber intermittierend unterbrechen, um Pausen
zu machen oder andere Aufgaben durchzuführen. Das mit dem Betrachter
verbundene Lesermodul kann sich daher durchaus an einer zeitlich
versetzten, anderen Steile im Puffer 124 befinden als das
mit dem Archivprozess verbundene Lesermodul.
-
20 zeigt
somit ein System, durch das mehrfache Lesermodule auf die gepufferte
Strömungsinformation
zugreifen können.
Das gezeigte System benötigt
nur ein Schreibermodul zum Puffern der Strömungsinformation und nur einzige
Kopie der Strömungsinformation.
Dies verringert in hohem Maße
die Menge an benötigtem
Speicher und reduziert außerdem
die benötigte
Verarbeitungsleistung. Da in einer veranschaulichenden Implementierung
die die Lesermodule einfach Objekte sind, die zum Zugreifen auf
die Information im Puffer 124 eingerichtet sind, kann praktisch
dem System jede Zahl von Objekten hinzugefügt werden, begrenzt nur durch
die Rechenressourcen des Systems. Dies kann zustande gebracht werden,
indem einfach ein anderes Leserobjekt eingerichtet wird.
-
Da
die in den Ringpuffer 124 geschriebene Strömungsinformation
aus einem oder mehreren Kanälen bestehen
kann, die je eine Vielzahl von Strömen (z.B. Audio, Video, Closed
Captioning usw.) haben, wird der Ausgang von jedem der Lesermodule 614-620 wahrscheinlich
eine Vielzahl von wirksamen Ausgangsstiften haben, wobei jeder Stift
einen der Ströme
eines gegebenen Kanals in der Strömungsinformation befördert. Da das
System 610 veranschaulicht, dass eine Vielzahl verschiedener
Lesermodule benutzt werden kann, um auf die gleiche gepufferte Strömungsinformation
zuzugreifen, kann dies einige Hindernisse mit sich bringen, die überwunden
werden müssen.
-
Zum
Beispiel kann in einigen Strömungs-Architekturen
die Notwendigkeit entstehen, die mit jedem Lesermodul 614-620 verbundenen
Stifte zu gruppieren, sodass der Benutzer, die Anwendung oder irgendeine andere
Komponente, die Daten von dem Lesermodul empfängt, weis, welche Stifte zu
diesem Lesermodul gehören.
Ein Beispiel einer Strömungs-Architektur,
die erfindungsgemäß verwendet
werden kann, ist eine als 'DirectShow'-Services bekannte
Architektur.
-
DirectShow-Services
ist eine Architektur, die käuflich
und wohl bekannt ist. Zum besseren Verständnis von bestimmten Aspekten
der vorliegenden Erfindung kann jedoch eine kurze Beschreibung des
DirectShow-Services-Systems von Vorteil sein.
-
DirectShow-Services
bezieht sich auf ein modulares System von steckbaren Komponenten,
bekannt als Filter, die in einer als Filtergraph bekannten Konfiguration
angeordnet sind. Eine als Filtergraph-Manager bezeichnete Komponente überwacht
die Verbindung dieser Filter und steuert den Fluss der Strömungsinformation
dadurch. Ein exemplarischer Filtergraph besteht aus einer Sammlung
von Filtern verschiedener Arten.
-
Die
meisten Filter können
in eine von drei Arten eingeteilt werden.
- 1.
Quellenfilter nehmen Daten von einer Quelle, z.B. einer Plattendatei,
Camcorder, Satellitenempfänger, Internet-Server
oder VCR, und führen
diese Daten in den Filtergraphen ein.
- 2. Transformationsfilter verarbeiten Daten und leiten sie an
andere Teile des Filtergraphen weiter oder heraus aus dem Filtergraphen.
- 3. Wiedergabefilter geben Daten an eine Hardwareeinrichtung
oder eine Stelle zurück,
die eine Medieneingabe annimmt (z.B. Speicher oder Plattendatei).
-
Zusätzlich zu
diesen drei Typen von Filtern gibt es auch andere Arten von Filtern.
Beispiele anderer Filter sind Effektfilter, die Effekte hinzufügen, ohne
den Datentyp zu ändern,
und Parser-Filter, die eingerichtet sind, das Format der Quellendaten
zu verstehen und zu kennen, wie richtige Bytes zu lesen sind, Zeitstempel zu
erzeugen und Suchoperationen durchzuführen.
-
Des
Weiteren ist es durchaus möglich,
dass einige Filter eine Kombination von Filtertypen oder Funktionen
darstellen. In der DirectShow-Architektur soll ein Filter Strömungsinformation "stromab" zu einem nächsten folgenden
Filter leiten, Ein "Stromauf"-Filter betrifft
das Filter, das Daten an das Stromab-Filter leitet, und ein "Stromab"-Filter betrifft
das nächste
Filter in der Linie, um die Daten zu empfangen. In einer veranschaulichenden
Ausführung
sind die Filter in irgendeiner Sprache geschriebene Programmmodule,
die Objekte erzeugen können,
die mit Komponenten-Objektmodell-(COM)Programmierung verwachsen
sind. COM-Programmierung bezieht sich natürlich auf das objektorientierte
Programmiermodell, das definiert, wie Objekte mit einer einzelnen
Anwendung oder zwischen Anwendungen interagieren. In COM greift
Client-Software auf ein Objekt über
einen Zeiger zu einer Schnittstelle (z.B. API) zu, die einen verwandten
Satz von Funktionen, genannt Verfahren, auf dem Objekt hat.
-
Ein
Filtergraph 640, dessen Zweck darin besteht, MPEG-komprimierte
Videoinformation von einer Datei abzuspielen, kann z.B. die in 20A dargelegte Form annehmen. Der Filtergraph 640 enthält ein Quellenfilter 642,
einen MPEG-Parser 644, ein Video-Dekompressions-Transformationsfilter 646,
ein Audio-Dekompressions-Transformationsfilter 648, ein
Video-Wiedergabefilter 650 und ein Audio-Wiedergabefilter 652. Das
Quellenfilter 642 liest Daten von einer Platte und liefert
sie als Strömungsinformation
an den MPEG-Parser 644. Der MPEG-Parser 644 zerlegt
die Strömungsinformation
in ihre Audio- und Videoströme.
-
Die
Transformationsfilter 646 und 648 dekomprimieren
die Video- und Audiodaten in die entsprechenden Ströme. Die
Wiedergabefilter 650 und 652 zeigen die Videodaten
auf einem Schirm an und senden die Audioinformation an eine Sound-Karte.
-
Man
kann somit sehen, dass, wenn bestimmte Strömungs-Architekturen verwendet
werden, wie z.B. die DirectShow-Architektur, es wichtig sein kann,
dass Anwendungen oder andere Programmiermodule, die Strömungsinformation
von einem der Lesermodule 614-620 empfangen sollen,
wissen, welche Ausgangsstifte welchem der Lesermodule entsprechen.
Da z.B. die von jedem der Lesermodule 614-620 gelesene
Strömungsinformation
einen Kanal mit einer Vielzahl von Strömen enthalten kann, ist es
wichtig, dass ein Benutzer oder ein Anwendungsprogramm, das Information
von einem gegebenen Leser empfängt,
alle mit diesem und keinem anderen Leser verbundenen Ströme empfängt. Mit
anderen Worten, es wäre
für ein
Anwendungsprogramm (oder z.B. ein Wiedergabefilter) unerwünscht, einen
Audiostrom vom Lesermodul 614, aber einen Videostrom und
Closed-Captioning-Strom vom Lesermodul 616 zu empfangen.
Das Lesermodul 614 kann durchaus die Strömungsinformation
von einer anderen Stelle im Puffer 124 lesen als das Lesermodul 614.
Die Audio- und Closed-Captionig-Ströme würden daher nicht dem Videostrom
entsprechen.
-
Um
dieses Hindernis anzusprechen, enthält ein Merkmal der vorliegenden
Erfindung eine neue COM-Schnittstelle, die einem Objekt außerhalb
der Lesermodule 614-620 erlaubt, die zu diesem
einzelnen Lesermodul gehörenden
Ausgangsstifte aufzuzählen.
Mit anderen Worten, in der Ausführung,
in der die Lesermodule 614-620 als Objekte implementiert
sind, sind diese Objekte konfiguriert, um durch zugehörige Schnittstellen 622-628 zu
der Anwendung (oder anderen externen Komponenten, die Kontakt mit
den Lesermodulen haben) Verfahren zu enthüllen, die eine Bearbeitung
des Objekts erlauben. Ein durch die Schnittstellen 622-628 enthülltes exemplarisches
Verfahren wird als IenumChannelStreamPin bezeichnet, das, wenn von
einem äußeren Objekt
aufgerufen, einen Wert ergibt, der eine Aufzählung der einzelnen Ausgangsstifte
darstellt, die zu dem einzelnen Lesermodul gehören, das gefragt wurde. Auf
diese Weise kann ein äußeres Objekt über seine
zugehörige
Schnittstelle 622-628 schnell und einfach eine
Aufzählung
der einzelnen Stifte erhalten, die zu einem der gegebenen Lesermodule 614-620 gehören.
-
Die
Schnittstellen 622-628 enthüllen auch ein anderes Verfahren,
das erlaubt, dass jeder spezifische Ausgangsstift durch irgendeines
der Lesermodule 614-620 nach dem Aufzählerobjekt
seiner Gruppe gefragt wird. Mit anderen Worten, ein äußeres Objekt
kann jeden Stift, mit dem es Kontakt hat, abfragen, um die Identität des bestimmten
Aufzählers
zu erlangen, der der Gruppe entspricht, die diesen Stift enthält. In dieser
Weise kann ein Benutzer oder Anwendungsprogramm, das erst kürzlich Zugang
zu einem Ausgangsstift erlangte, diesen Ausgangsstift abfragen,
um den mit diesem Ausgangsstift verbundenen Aufzähler zu finden. Die externe
Komponente kann dann das durch den Aufzähler enthüllte Verfahren aufrufen, um
eine vollständige
Aufzählung
der diesem Kanal entsprechenden Stifte zu erlangen. Die externe
Komponente kann somit leicht und genau die Identität der Stifte
erlangen, die mit jedem gegebenen Lesermodul oder Kanal, der vom
System 610 ausgegeben wird, verbundenen sind.
-
Indexieren und Suchen
-
Wie
oben erörtert,
erzeugt ein Indexer 132 einen Index, der Indexeinträge enthält, die
zum Suchen verwendet werden. Mit anderen Worten, jedes der Lesermodule 614-620 kann
nach jedem Punkt im Puffer 124 suchen, der einen entsprechenden
Eintrag in dem Index hat. In einigen Fällen kann, abhängig von
der Art der Strömungsinformation,
im Wesentlichen jeder Punkt im Puffer 124 indexiert werden.
Für andere
Arten von Strömungsinformation
kann es jedoch erwünscht
sein, nur bestimmte Punkte in der Strömungsinformation zu indexieren.
-
Solche
Punkte werden hierin als Sync-Punkte bezeichnet. Mit anderen Worten,
die Natur der Strömungsinformation
kann es unvernünftig
oder unerwünscht
machen, nach bestimmten Punkten in der Strömungsinformation zu suchen
und das Wiedergeben der Daten an diesem Punkt zu beginnen.
-
Bestimmte
Video-Strömungsinformation
arbeitet z.B. auf dem bekannten MPEG2-Videoformat. Ein solches Format
enthält
eine Anzahl verschiedener Typen von Rahmen, die als I-Rahmen, B-Rahmen
und P-Rahmen bezeichnet werden. I-Rahmen benötigen keine andere Information.
um wiedergegeben zu werden, während
B- und P-Rahmen abhängige
Rahmen sind, die Information in einem vorangehenden I-Rahmen benötigen, um
wiedergegeben zu werden. In einem solchen Beispiel kann es unerwünscht sein,
nach einem Zeiger in Puffer 124 zu suchen, der mit einem
B- oder P-Rahmen beginnt. In der Tat können viele herkömmliche Videodecoder
nicht einmal in der Lage sein, Daten, die von einem B- oder P-Rahmen
geliefert werden, ohne die nötige
Information, die im vorangehenden I-Rahmen enthalten ist, zu decodieren.
Es kann daher in hohem Maße
wünschenswert
sein, nur I-Rahmen in einem solchen, im Puffer 124 gespeicherten
Videostrom zu indexieren.
-
Desgleichen,
wo die Strömungsinformation
einen Strom enthält,
z.B. geschriebenen Text für Closed-Captioning,
kann es erwüscht
sein, einem Benutzer zu gestatten, nach Punkten zu suchen, die dem Beginn
oder Ende von Wörtern,
Sätzen
oder Abschnitten entsprechen. Das gleiche gilt für einen Audiostrom. Mit anderen
Worten, es kann erwünscht
sein, einem Benutzer zu erlauben, nur nach bestimmten Stellen in dem
Audiostrom zu suchen. Solche Stellen können Satz- oder Wortgrenzen
usw. entsprechen.
-
Ein
erklärendes
Merkmal der vorliegenden Erfindung enthält daher einen Stromanalysator 654,
wie z.B. in 21A gezeigt. Der Stromanalysator 654 ist
mit einer Quelle 656 von Strömungsinformation und einer Senke 658 von
Strömungsinformation
verbunden gezeigt. Der Stromanalysator 654 ist eingerichtet,
um die Strömungsinformation
von der Quelle 656 (die als ein Softwareobjekt implementiert
sein kann) zu empfangen.
-
In
einer erklärenden
Ausführung
verkörpert
der Stromanalysator 654 Kenntnis der Organisation der von
der Quelle 656 gelieferten Strömungsinformation. Der Analysator 654 verkörpert außerdem erklärend Kenntnis
bezüglich
der Erfassung von logischen Grenzen in der Information, um die Stelle
dieser Grenzen (Sync-Punkte) zu erlangen. Die Stelle der Sync-Punkte kann dann
jeder anderen Software- oder Hardware-Komponente vorgelegt werden,
die die Information wünschen
mag, um das Vorwärts-
oder Rückwärts-Springen
durch die Strömungsinformation
praktikabler zu ermöglichen.
-
Der
Stromanalysator 654 stellt erklärend ein Anzeichen der Sync-Punkte
in einer von zwei Weisen bereit. In einer ersten Ausführung bettet
der Stromanalysator 654 die Stelle der Sync-Punkte in der Strömungsinformation
selbst ein, wenn sie an die Informationssenke 658 geliefert
wird. Dies wird als In-Band-Kommunikation von gewonnener Sync-Punkt-Information
bezeichnet.
-
In
einer alternativen Ausführung
kann der Stromanalysator 654 die Sync-Punkt-Information,
wie durch den gestrichelten Pfeil 660 angezeigt, getrennt
von der an die Senke 658 gelieferten Strömungsinformation
bereitstellen. Dies wird als Außer-Band-Kommunikation
von gewonnener Sync-Punkt-Information bezeichnet.
-
In
einer erklärenden
Ausführung
ist der Stromanalysator 654 in der C++ Programmiersprache
implementiert, der Klassen verwendet und mit anderen Softwareobjekten
mittels COM-Schnittstellen
kommuniziert. Man sollte aber beachten, dass eine solche Implementierung
nur erklärend
ist und die vorliegende Erfindung nicht auf dieses einzelne Implementierungsverfahren
beschränkt
ist.
-
Die
Informationssenke 658 kann natürlich ein Stromab-Filter (stromab
von dem Stromanalysator 654), ein Anwendungsprogramm, ein
Wiedergabefilter oder eine andere Programmkomponente usw. sein.
Die Senke 658 kann den gewonnenen Sync-Punkt selbst verwenden
oder ihn einfach an andere Komponenten weitergeben, die wünschen mögen, die
gewonnene Sync-Punkt-Information zu verwenden. In einer erklärenden Ausführung wird
die gewonnene Sync-Punkt-Information dem Verzögerungssfilter 112 bereitgestellt,
das sie beim Erzeugen eines Indexes benutzt, wie unten ausführlicher
beschrieben wird.
-
In
einer anderen erklärenden
Ausführung
untersucht der Stromanalysator 654 nicht nur die ankommende
Strömungsinformation
auf logische Grenzen, die als Sync-Punkte benutzt werden können, sondern
untersucht die ankommende Strömungsinformation
auch auf interessierende Punkte, die erwünschte Sync-Punkte sein können. Solche
interessierenden Punkte können
im Wesentlichen alle Punkte sein, von denen angenommen wird, dass
sie möglicherweis
für den
Benutzer von Interesse sind. In einer solchen Ausführung verkörpert daher
der Stromanalysator 654 Kenntnis über den Typ und das Format
der Information in dem ankommenden Strom sowie Kenntnis über die
Arten von Ereignissen, die für
den Benutzer von Interesse sind. Ebenso ist der Stromanalysator 654 konfiguriert,
um Kenntnis darüber
zu enthalten, wie diese interessierenden Punkte in der ankommenden
Strömungsinformation
zu erfassen sind, und ist mit einem Mechanismus versehen, um die
Stelle in dem Datenstrom, der diesen interessierenden Punkten entspricht,
zu berichten.
-
21B und 21C sind
ausführlichere
Blockschaltbilder, die den Stromanalysator 654 nach erklärenden Ausführungen
der vorliegenden Erfindung veranschaulichen. 21B veranschaulicht
eine Ausführung
des Stromanalysators 654, in der die gewonnene Sync-Punkt-Information außer Band
bereitgestellt wird, während 21C eine Ausführung
veranschaulicht, in der die gewonnene Sync-Punkt-Information in
Band bereitgestellt wird.
-
In 21B enthält
der Stromanalysator 654 eine Punkt-von-Interesse-(POI)Analysekomponente 662, eine
Punkt-von-Interesse-Schnittstellenkomponente 664 und eine
Strömungsinformation-Schnittstellenkomponente 666.
Die Strömungsinformation
wird von der Quelle 656 an die Punkt-von-Interesse-Analysekomponente 662 geliefert,
die sich an ihre Wissensbasis bezüglich der Art von Information
und der Organisation von in der Strömungsinformation enthaltener
Information wendet und sich an ihre Kenntnis bezüglich der den Benutzer interessierenden
Punkte wendet. Die POI-Analysekomponente 662 identifiziert
dann die interessierenden Punkte in der Strömungsinformation und stellt
einen Ausgang 668 bereit, der die Stelle des interessierenden
Punkts anzeigt (d.h., er zeigt die Sync-Punkte an). Der Ausgang 668 wird
an die POI-Schnittstelle 664 angelegt, die die Information
für die
Senke 658 verfügbar
macht. Ähnlich
gibt die POI-Analysekomponente 662 die ankommende Strömungsinformation
an die Strömungsinformations-Schnittstelle 666 weiter,
sodass die Strömungsinformation
der Senke 658 getrennt zur Verfügung steht.
-
21C gleicht 21B,
und ähnliche
Elemente sind entsprechend nummeriert. Anstatt jedoch zwei getrennte
Schnittstellen 664 und 666 für die Sync-Punkt-Information
und die Strömungsinformation
zu haben, hat der in 21C gezeigte Stromanalysator 654 eine
einzige kombinierte Schnittstelle 669, die die Punkt-von-Interesse-(oder
Sync-Punkt)Information in die Strömungsinformation integriert
und sie als einen In-Band-Ausgang an die Senke 658 liefert.
Man sollte natürlich
beachten, dass die Integration der Sync-Punkt-Information auch in
der POI-Analysekomponente 662 durchgeführt werden kann. In jedem Fall wird
ein einzelner Ausgang von Strömungsinformation
(die die Sync-Punkt-Information in-band enthält) der Senke 658 zur
Verfügung
gestellt.
-
21D ist ein ausführlicheres Blockschaltbild
einer Ausführung
der Punkt-von-Interesse-Analysekomponente 662,
bei der die Integration der Sync-Punkt-Information in die an ihrem
Ausgang bereitgestellte Strömungsinformation
innerhalb der Punkt-von-Interesse-Analysekomponente 662 durchgeführt wird.
Die POI-Komponente 662 enthält in der in 21D gezeigten erklärenden Ausführung eine Parsing-Komponente 670,
eine Schriftsprachen-Analysekomponente 672, eine Video-Analysekomponente 674 und
eine Audio-Analysekomponente 676. Während jede Art von Informationsanalysenkomponente
benutzt werden kann, werden die Komponenten 672, 674 und 676 nur
zu exemplarischen Zwecken veranschaulicht. Die POI-Analysekomponente 662 enthält auch
die Integrationskomponente 678.
-
Die
Parsing-Komponente 670 empfängt die Strömungsinformation an ihrem Eingang.
In der veranschaulichten Ausführung
kann die Strömungsinformation
eine Vielzahl von Strömen
(obwohl nur ein einziger Strom verarbeitet werden kann), z.B. einen
Schrifttextstrom (z.B. Closed-Caption-Information), einen Videostrom
und einen Audiostrom, enthalten. Die Parsing-Komponente 670 zerlegt
die ankommende Strömungsinformation
in ihre jeweiligen Stromkomponenten und stellt diese Komponenten
geeigneten Analyseblöcken 672, 674 und 676 zur
Verfügung.
-
Die
Analysekomponenten 672, 674 und 676 analysieren
die ankommenden Ströme,
identifizieren mögliche
interessierende Punkte und erzeugen Information, die die Stelle
dieser interessierenden Punkte anzeigt. Die Strömungsinformation sowie die
Sync-Punkt-Information wird dann von jeder Analysekomponente 672-676 an
die Integrationskomponente 678 übergeben. In der veranschaulichten
Ausführung
reintegriert die Integrationskomponente 678 die Ströme in die
ursprüngliche
Strömungsinformation
und bettet auch die Sync-Punkt-Information
an geeigneten Stellen in der Strömungsinformation
ein. Die In-Band-Sync-Punkt-Information
wird daher in dem Datenstrom am Ausgang der Integrationskomponente 678 bereitgestellt.
-
Man
sollte beachten, dass die Analysekomponenten 672-676 nach
im Wesentlichen allen interessierenden Punkten suchen können. Zum
Beispiel kann die Schriftsprachen-Komponente 672 konfiguriert
sein, um nach Satzgrenzen oder Wortgrenzen zu suchen. Beim Suchen
nach Satzgrenzen kann die Analysekomponente einfach so konfiguriert
sein, dass sie nach Perioden in dem ankommenden Strom sucht. Um
nach Wortgrenzen zu suchen, kann die Komponente 672 einfach
so konfiguriert sein, dass sie nach Zwischenräumen in dem ankommenden Strom
sucht. Man sollte auch beachten, dass die Sprachenanalysekomponte 672 eine
höher entwickelte
Analysekomponente sein kann, z.B. eine Natursprachen-Verarbeitungs-
oder Natursprachen-Analysekomponente, wobei in diesem Fall die Komponente 672 konfiguriert
sein kann, um bestimmte Wendungen, Zunahmen, Sprachteile usw. zu
identifizieren. In jedem Fall wird Information, die die von der
Komponente 762 zu identifirenden Schriftsprachenpunkte
von Interesse anzeigt, an die Komponente 672 geliefert,
sodass die gewünschten
Punkte von Interesse in dem ankommenden Strom identifiziert werden
können.
-
Desgleichen
kann die Video-Analysekomponente 674 benutzt werden, um
jede Zahl von verschiedenen interessierenden Punkten zu identifizieren.
Zum Beispiel kann die Komponente 674 konfiguriert sein,
um Werbeunterbrechungen sowie die oben erwähnten I-, B- und P-Rahmen zu identifizieren. Beim
Identifizieren von Werbeunterbrechungen in dem ankommenden Videostrom
kann die Video-Analysekomponente 674 konfiguriert sein,
um nach einem schwarzen Schirm zu suchen, der für eine gewisse vorbestimmte
Zeitdauer vorhanden ist. Desgleichen enthalten in dem MPEG2-Videoformat
die I-, B- und P-Rahmen Marken, die sie als solche identifizieren,
oder ein Vorspann geht voraus, der die Rahmen identifiziert. Die
Video-Analysekomponente 674 kann daher konfiguriert werden,
um nach der Identifizierungsinformation in dem Strom zu suchen.
-
Die
Audio-Analysekomponente 676 kann auch konfiguriert werden,
um nach einem weiten Bereich von interessierenden Punkten zu suchen.
Zum Beispiel kann, wenn der ankommende Strom ein Horrorfilm, ein Kriegsfilm,
ein Actionfilm oder ein Fernsehprogramm ist, die Audio-Analysekomponente
konfiguriert werden, um nach lauten Geräuschen wie Geschrei, Gewehrschüsse oder
Autoverfolgungsgeräusche
zu suchen. In diesem Fall kann die Komponente 676 einfach
konfiguriert sein, um nach Amplitudeninformation zu suchen, die eine
vorbestimmte Schwelle übersteigt.
Desgleichen kann die Komponente 676 eine fortgeschrittenere
Komponente sein, z.B. eine Spracherkennungs- oder Stimmerkennungs-Komponente.
In dem Fall, wo die Komponente 676 eine Spracherkennungs-Komponente
enthält,
kann sie konfiguriert sein, um nach Satz- oder Wortgrenzen zu suchen,
oder sie kann benutzt werden, um nach bestimmten Wörtern oder
Wendungen zu suchen. Zum Beispiel kann die Komponente 676 benutzt
werden, um profane Wörter
zu identifizieren, die zum späteren Löschen markiert
werden können.
Ebenso kann, wo die Komponente 676 eine Stimmerkennungs-Komponente enthält, diese
konfiguriert sein, um die Stimme von bestimmten Schauspielern oder
Schauspielerinnen oder jeder anderen Wesenheit zu identifizieren,
die so identifiziert werden kann.
-
Es
sei nochmals erwähnt,
dass die Punkt-von-Interesse-Analysekomponente 662 konfiguriert
sein kann, um die Stelle von im Wesentlichen jedem Punkt von Interesse
zu identifizieren, die identifiziert werden kann. Die Komponente 662 muss
nur mit der Information, die die zu analysierenden Punkte von Interesse
anzeigt, und mit der Information versorgt werden, die den Typ der
Information und das Format der Information anzeigt, die in den ihr
zugeführten
Strömen
empfangen werden wird. Die oben erwähnten spezifischen Ausführungen
sind nur Beispiele und sind nicht als die Anwendung dieses Merkmals
der vorliegenden Erfindung einschränkend anzusehen.
-
22 ist
ein Flussdiagramm, das die Arbeitsweise der POI-Analysekomponente 662 ausführlicher veranschaulicht.
Zuerst empfängt
die POI-Analysekomponente 662 die Strömungsinformation. Dies wird
durch 680 angezeigt. Dann zerlegt die Parsing-Komponente 670 die
Strömungsinformation
in ihre jeweiligen Ströme für eine Punkt-von-Interesse-Analyse.
Diese wird in Block 682 angezeigt. An einem Punkt vor der Punkt-von-Interesse-Analyse
muss Punkt-von-Interesse-Analyseinformation, die zu identifizierende
Punkte von Interesse angibt, den verschiedenen Analysekomponenten
in der POI-Analysekomponte 662 zugeführt werden. Dies wird durch
Block 684 angezeigt. Die Ströme werden dann basierend auf
der empfangenen Punkt-von-Interesse-Information analysiert, wie
durch Block 686 angezeigt.
-
Sobald
die Punkt-von-Interesse-Information aus den Strömen gewonnen ist, werden die
Ströme
reintegriert, und die Punkt-von-Interesse-Information wird zusammen
mit den integrierten Strömen
entweder in Band oder außer
Band bereitgestellt. Dies wird durch Block 688 angezeigt.
Der Datenstrom und die Punkt-von-Interesse-Information werden dann
zur weiteren Verarbeitung an eine Stromab-Komponente (z.B. Verzögerungsfilter 112)
gesendet. Es wird nomals betont, dass die Punkt-von-Interesse-Information
entweder in Band oder außer
Band bereitgestellt werden kann. Dies wird durch Block 690 in 22 angezeigt.
-
23A, 23B und 23C sind ausführlichere
Flussdiagramme, die die Arbeitsweise der Schriftsprachen-Analysekomponente 672,
der Video-Analysekomponente 674 und der Audio-Analysekomponenten 676 veranschaulichen. 23A zeigt, dass die Schriftsprachen-Analysekomponente 672 zuerst
die Schriftsprachen-Strominformation (z.B. Closed-Caption-Information)
empfängt.
Dies wird durch Schritt 692 angezeigt. Die Komponente 672 analysiert
dann die Strominformation, um Wort- oder Satzgrenzen, bestimmte Wendungen,
Zunamen oder andere Sprachteile aufzufinden. Der identifizierte
Punkt von Interesse kann wieder im Wesentlichen jeder Punkt von
Interesse sein, für
den die Komponente 672 richtig konfiguriert ist.
-
Dies
wird durch Block 694 angezeigt. Die Komponente 762 liefert
dann eine Angabe der Stellen in der Strömungsinformation, wo die Punkte
von Interesse liegen. Dies wird durch Block 696 angezeigt.
-
23B ist ähnlich 23A, und ähnliche
Elemente sind entsprechend nummeriert. Anstatt Textpunkte von Interesse
aufzufinden, untersucht jedoch die Video-Analysekomponente 674 die
Videostrominformation auf einen schwarzen Schirm, Bildänderungen
(die gewünschten
Szenenwechseln entsprechen können),
I-, B- und P-Rahmenmarken usw. Dies wird durch Block 698 angezeigt.
-
23C ist ähnlich 23A und 23B,
und ähnliche
Elemente sind ähnlich
nummeriert. Anstatt Schriftsprachen- oder Videoinformation zu analysieren,
untersucht jedoch die Komponente 676 Audiostrominformation.
In der in 23C gezeigten Ausführung untersucht
die Komponente 676 die Audiostrominformation auf Amplitudenänderungen,
Satz- oder Wortgrenzen, bestimmte Inhaltswörter (z.B. Profanität), die
Stimme bestimmter Personen usw.
-
Dies
wird durch Block 700 angezeigt.
-
Indexerzeugung
-
Wie
oben beschrieben, sind die Lesermodule 614-620 im
System 610 so konfiguriert, dass sie im Puffer 124 nach
jedem indexierten Punkt suchen können.
Für Informationsströme, die
keine Sync-Punkte haben, ist es angebracht, dass die Lesermodule
nach im Wesentlichen jeder Probe im Puffer 124 suchen.
In solchen Informationsströmen
kann daher jede Probe indexiert werden. In einer solchen Ausführung erzeugt
der Indexer 132 Indexeinträge, die einfach der gewünschten
Körnigkeit
des Indexers entsprechen. Zum Beispiel kann es in bestimmten Strömen erwünscht sein,
Punkte zu indexieren, die zeitlich um etwa 0.25 Sekunden beabstandet
sind. Bei anderer Information kann es erwünscht sein, Punkte zu indexieren,
die um zwei Sekunden oder mehr beabstandet sind. Bei Informationsströmen, die
keine Sync-Punkte haben, erzeugt der Indexer 132 einfach
Indexeinträge,
die Stellen im Puffer 124 identifizieren, die durch die
gewünschte
Körnigkeit
des Indexers getrennt sind.
-
Wie
im vorangehenden Abschnitt erörtert,
werden jedoch viele Datenströme
mit Sync-Punkten versehen. In diesen Fällen kann es erwünscht sein,
dass der Indexer 132 Indexeinträge erzeugt, die nur Sync-Punkten
entsprechen. Man wird natürlich
zur Kenntnis nehmen, dass, wenn Sync-Punkte häufiger vorkommen als die gewünschte Körnigkeit
des Indexgenerators, nicht jeder einzelne Sync-Punkt indexiert werden
kann. Wenn jedoch Sync-Punkte weniger häufig vorkommen als die gewünschte Körnigkeit
des Indexgenerators, kann im Wesentlichen jeder Sync-Punkt indexiert
werden.
-
Unter
einer solchen Gegebenheit kann ein Problem auftreten. Zum Beispiel
mag in einer gegebenen Strömungs-Architektur
der oben beschriebene Stromanalysator 654 nicht vorhanden
sein, oder er mag noch nicht wissen, ob die Strömungsinformation, die er empfängt, irgendwelche
Sync-Punkte enthält.
Wenn dies der Fall ist, mag der Indexer zu dem Zeitpunkt, da er
Strömungsinformation
zu empfangen beginnt, nicht wissen, ob er einfach beginnen muss,
Proben entsprechend seiner Körnigkeit
zu indexieren, oder ob er warten muss, um nur Sync-Punkte zu indexieren. 24 ist
ein Flussdiagramm, das die Operation des Indexers 132 beim Ansprechen
dieses Problems veranschaulicht.
-
Zuerst
führt der
Indexer 132 einfach eine Abfrage an den Stromanalysator 654 aus,
um festzustellen, ob der Stromanalysator 654 Information
dahin gehend liefern kann, ob die ankommende Strömungsinformation Sync-Punkte
enthält.
Dies wird durch Block 702 angezeigt. Der Stromanalysator 654 mag
nicht einmal eine Antwort geben, oder er mag eine Antwort geben,
die anzeigt, dass er noch nicht weiss, ob die Strömungsinformation
Sync-Punkte enthält.
Wenn der Analysator 654 eine Antwort liefert, die anzeigt,
dass Information, die angibt, ob Sync-Punkte existieren, vorhanden
ist, wird ein Flag gesetzt. Das Flag wird in 24 als
das "Sync-Punkt-Info-Ist-Autoritativ"-Flag bezeichnet.
Dies wird durch Blöcke 703 und 704 angezeigt.
Wenn keine Information vorhanden ist, die anzeigt, ob Sync-Punkte
existieren, wird dieses Flag zurückgesetzt,
wie durch Blöcke 703 und 705 angezeigt.
-
Als
Nächstes
wird, wenn Information hinsichtlich der Anwesenheit oder Abwesenheit
von Sync-Punkten verfügbar
ist, festgestellt, ob irgendwelche Sync-Punkte vorhanden sind. Dies
wird durch Block 706 angezeigt. Wenn der Stromanalysator 654 bereits
Sync-Punkte in der ankommenden Strömungsinformation identifiziert
hat, versorgt er den Indexer 132 mit einer Antwort, die
anzeigt, dass Sync-Punkte existieren. In diesem Fall setzt der Indexer 132 ein
Sync-Punkt-Flag auf einen Wert, der angibt, dass die ankommenden
Strömungsdaten
in der Tat Sync-Punkte enthalten. Dies wird durch Block 707 angezeigt.
Wenn jedoch der Stromanalysator 654 nicht antwortet oder
er noch keine Sync-Punkte in der ankommenden Strömungsinformation lokalisiert
hat, und einen Ausgang, der das anzeigt, an den Indexer 132 liefert,
nimmt der Indexer 132 für
den Moment an, dass es keine Sync-Punkte in der ankommenden Strömungsinformation
gibt, und setzt das Sync-Punkt-Flag zurück. Dies wird durch Block 708 angezeigt.
Der Indexer 132 empfängt
dann eine Probe der Strömungsinformation,
wie durch Block 710 angezeigt.
-
Nach
Empfang der Probe untersucht der Indexer 132 die Probe,
um zu sehen, ob die Probe als ein Sync-Punkt markiert ist. Dies
wird durch Blöcke 712 und 714 angezeigt.
Wenn die Probe nicht als ein Sync-Punkt markiert wurde, untersucht
der Indexer 132 das Sync-Punkt-Flag, um zu sehen, ob das Sync-Punkt-Flag
gesetzt ist. Dies wird durch Block 716 angedeutet. Wenn
in Block 716 festgestellt wird, dass das Sync-Punkt-Flag
tatsächlich
gesetzt ist, zeigt dies an, dass die Strömungsinformation, die verarbeitet
wird, Sync-Punkte enthält,
und die vorliegende Probe wird nicht als Sync-Punkt markiert. Der
Indexer 132 indexiert daher die untersuchte Probe nicht,
sondern kehrt einfach zu der Verarbeitung in Block 710 zurück.
-
Wenn
aber in Block 716 festgestellt wird, dass das Sync-Punkt-Flag
nicht gesetzt ist, nimmt der Indexer 132 noch an, dass
in der ankommenden Strömungsinformation
keine Sync-Punkte
vorhanden sind. Der Indexer stellt daher einfach fest, ob er die
gegenwärtige
untersuchte Probe basierend auf der gewünschten Körnigkeit des Indexers 132 indexieren
sollte. Mit anderen Worten, wenn der Indexer 132 Punkte
nicht öfter als
(zum Beispiel) alle halbe Sekunde indexieren soll, stellt der Indexer 132 fest,
ob die gegenwärtige
Probe von der zuvor indexierten Probe um wenigstens eine halbe Sekunde
zeitlich entfernt ist. Wenn ja, wird die gegenwärtige Probe indexiert. Wenn
nicht, kehrt die Verarbeitung einfach zu Block 710 zurück. Dies
wird durch Block 718 angedeutet.
-
Wenn
der Indexer 132 in Block 714 feststellt, dass
die vorliegende Probe als ein Sync-Punkt markiert ist, dann stellt
der Indexer 132 fest, ob das Sync-Punkt-Flag gegenwärtig gesetzt
ist. Dies wird durch Block 720 angedeutet. Wenn das Sync-Punkt-Flag
gegenwärtig
gesetzt ist, setzt der Indexer 132 einfach die Verarbeitung
in Block 718 fort und stellt fest, ob er genügend zeitlichen
Abstand von dem vorherigen Indexeintrag erreicht hat, um den gegenwärti-Sync-Punkt zu indexieren.
-
Wenn
aber in Block 720 festgestellt wird, dass, obwohl die vorliegende
Probe als ein Sync-Punkt
markiert ist, das Sync-Punkt-Flag nicht gesetzt ist, stellt der
Indexer 132 in Block 721 fest, ob das Flag "Sync-Punkt-Info-Ist-Autoritativ" gesetzt ist. Wenn
nicht, erkennt der Indexer 132, dass er der Annahme war, dass
in der untersuchten Strömungsinformation
keine Sync-Punkte existieren, aber er erkennt auch, dass Sync-Punkte
tatsächlich
existieren. Der Indexer 132 wirft daher alle vorangehenden
Indexeinträge
weg (da sie Nicht-Syny-Punkt-Proben
entsprechen), wie in Block 722 angezeigt, und setzt das
Sync-Punkt-Flag, wie durch Block 724 angegeben. Die Verarbeitung
wird dann in Block 718 fortgesetzt. Desgleichen wird, wenn
in Block 721 festgestellt wird, dass das Flag "Sync-Punkt-Info-Ist-Autoritativ" gesetzt ist, die
Verarbeitung in Block 718 fortgesetzt.
-
Es
ist daher zu ersehen, dass unter Verwendung des in 24 veranschaulichten
Algorithmusses dieses Merkmal der vorliegenden Erfindung benutzt
werden kann, um Punkte in der Strömungsinformation genau zu indexieren,
unabhängig
davon, ob der Indexer augenblicklich weiß, ob Sync-Punkte in der Strömungsinformation
vorhanden sind. Wo Sync-Punkte nicht vorhanden sind, werden Proben
entsprechend der gewünschten
Körnigkeit
des Indexers indexiert. Wenn Sync-Punkte vorhanden sind, werden
nur Sync-Punkte indexiert.
-
Zeitverschobenes Suchen mit
Mehrfachströmen
-
Wie
oben beschrieben, kann die im Puffer 124 gespeicherte Strömungsinformation
mehrfache Ströme enthalten.
Wie ebenfalls oben beschrieben, kann es erwünscht sein, Lesermodulen 614-620 (gezeigt
in 20) zu gestatten, nach verschiedenen durch den
Indexer 132 indexierten Punkten in der Strömungsinformation
zu suchen. Dies wirft eine Schwierigkeit auf. Es ist schwierig,
zu entscheiden, bei welchem einzelnen Dateioffset im Puffer 124 das
einzelne Lesermodul zu lesen beginnen sollte, nachdem ein Suchen
verlangt wurde. Diese Entscheidung wird durch eine Anzahl von Faktoren
erschwert.
-
Zum
Beispiel können
die Ströme
innerhalb der im Puffer 124 befindlichen Datei außer Synchronisation sein.
Mit anderen Worten, Audioinformation kann vor oder hinter Videoinformation
und in verschieden großen Speicherblöcken gespeichert
sein, sodass die zwei nicht direkt übereinstimmen. Auch kann das
Lesermodul verlangen, nach einer Stelle im Puffer 124 zu
suchen (nach einer Probe mit einem bestimmten Zeitstempel), für die kein
Sync-Punkt indexiert wurde. Mit anderen Worten, wie oben dargelegt,
indexiert der Indexer 132 nicht jede einzelne Probe. Stattdessen
indexiert er nur basierend auf seiner eigenen Körnigkeit oder basierend auf
Sync-Punkten. Ein Lesermodul kann daher verlangen, nach einem Zeitstempel
zu suchen, für
den kein Indexeintrag vorhanden ist. Des Weiteren können einige
Ströme
Sync-Punkte enthalten und andere nicht. Außerdem können nicht alle Sync-Punkte
indexiert werden, da sie häufiger
vorkommen können
als die gewünschte
Körnigkeit
des Indexers. Ein erklärendes
Merkmal der vorliegenden Erfindung ist auf das Ansprechen dieser Hindernisse
beim Suchen durch einen Kanal mit mehrfachen Strömen gerichtet.
-
25 ist
eine exemplarische Darstellung eines Teils des Puffers 124,
der in eine Vielzahl von gepufferten Proben geteilt ist. Proben 730 mit
Schraffierung in einer ersten Richtung stellen Proben eines ersten Stroms
dar. Proben mit Schraffierung in der entgegengesetzten Richtung
stellen Proben eines zweiten Stroms dar. Proben 734A. 734B, 734C und 734D,
ohne Schraffur, entsprechen Proben eines dritten Stroms.
-
Um
die oben genannten Hindernisse anzusprechen, ist eine erklärende Ausführung der
vorliegenden Erfindung ein Suchalgorithmus, der mit Verweis auf 25 und 26 beschrieben
wird. In dem Algorithmus sucht ein bestimmtes Lesermodul, das eine
Suche durchführt,
nach einem höchsten
Dateiversatz im Puffer 124, der geeignet ist, die einzelnen
Suchanforderungen jedes Stroms zu erfüllen. Das Lesermodul beginnt dann,
Information strömen
zu lassen, lässt
aber Information für
jeden der gerade gelesenen Ströme,
die vor der ersten Probe gelesen wird, die tatsächlich für diesen Strom gespielt werden
sollte, fallen. Außerdem
wird, wo keine Sync-Punkte mit dem genauen Zeitstempel indexiert
wurden, der nächste
Sync-Punkt vor der gewünschten
Suchposition als ein möglicher
Startpunkt bereitgestellt, sofern nicht der nächste Sync-Punkt vor der gewünschten
Suchposition zu weit zurückliegt.
Da einige Ströme
keine Sync-Punkte enthalten, nimmt die vorliegende Erfindung an,
dass in einem Strom ohne Sync-Punkte jede Probe ein Sync-Punkt ist.
Da nicht alle Sync-Punkte indexiert werden können, findet schließlich der
Suchalgorithmus zuerst einen nächsten
indexierten Sync-Punkt vor und hinter der gewünschten Suchposition und ermittelt
dann die Differenz zwischen den zwei indexierten Suchpunkten, um
zu sehen, ob sich weitere, nicht indexierte Sync-Punkte zwischen
den zwei befinden können.
Wenn ja, werden die Daten zwischen den zwei indexierten Sync-Punkten
gelesen, um festzustellen, ob weitere Sync-Punkte (und solche, die
näher an
dem gewünschten
Suchpunkt liegen) vorhanden sind.
-
26 ist
ein Flussdiagramm, das eine Suchoperation nach einem erklärenden Merkmal
der vorliegenden Erfindung veranschaulicht. Um nach einer Position
im Puffer 124 (gezeigt in 25) zu
suchen, empfängt
das auserwählte
Lesermodul zuerst eine Suchanforderung, um nach einer Stelle im
Puffer 124 mit einem Zeitstempel, der Zeit T angibt, zu
suchen. Dies wird durch Block 740 angedeutet. In 25 entspricht
der Zeitstempel T der Probe 734C. In der erklärenden Ausführung ist
Probe 734C nicht indexiert.
-
Als
Nächstes
wird eine Variable FILEOFFSET auf unendlich (oder eine sehr große Zahl)
ge setzt. Dies wird durch Block 742 angedeutet.
-
Dann
wird der erste der Vielzahl von Strömen zur Analyse ausgewählt. Dies
wird durch Block 744 gezeigt.
-
Für den ersten
Strom wird eine Zeitvariable T1 auf den Indexeintrag mit dem höchsten Zeitstempel
vor der gewünschten
Suchzeit T gesetzt. In 25 ist zu sehen, dass die Probe 734A für den auserwählten Strom dem
Indexeintrag T1 entspricht, der den höchsten Zeitstempel vor der
gewünschten
Suchzeit T hat. Wenn kein derartiger Indexeintrag vorhanden ist,
wird T1 auf T-Z gesetzt. In einer erklärenden Ausführung ist Z = 100. Dies bewirkt
im Grunde, dass T1 weggeworfen wird, wie in späterer Verarbeitung veranschaulicht
wird. Dies wird durch Block 746 gezeigt.
-
Als
Nächstes
wird ein Zeitabschnitt T2 für
den ausgewählten
Strom auf einen Indexeintrag mit dem niedrigsten Zeitstempel nach
der gewünschten
Suchzeit T gesetzt. Man kann sehen, dass die Probe 734D einer
Probe in dem ausgewählten
Strom entspricht, die indexiert ist und den niedrigsten Zeitstempel
rechts von Zeit T hat (z.B. nach nach Zeit T). Wenn ein solcher
Eintrag nicht existiert, wird der gegenwärtig ausgewählte Strom für Zwecke
des Berechnens des Dateiversatzes ignoriert, und ein neuer Strom
wird ausgewählt.
Dies wird durch Block 748 gezeigt.
-
Nach
der Verarbeitung in Block 748 ist somit zu sehen, dass
die zwei Indexeinträge,
die auf beiden Seiten von Zeit T liegen und Zeit T am nächsten sind,
identifiziert wurden. Diese Indexeinträge entsprechen den Zeiten T1
und T2. Der zeitliche Versatz zwischen der gewüschten Zeit T und der vorangehend
indexierten Zeit T1 wird durch X = T – T1 dargestellt. Der zeitliche
Versatz zwischen der gewünschten
Suchzeit T und dem nachfolgenden Indexeintrag T2 wird durch Y =
T2 – T
dargestellt.
-
Wenn
sowohl X als auch Y größer als
ein vorbestimmtes Zeitintervall (z.B. 5 Sekunden) sind, zeigt dies an,
dass beide indexierten Proben T1 und T2 zu weit von der gewünschten
Suchposition T entfernt sind, um hilfreich sein. Diese Feststellung
wird durch Block 750 angedeutet. Wenn es der Fall ist,
dass X und Y größer als
das vorbestimmte Zeitintervall sind, wird der vorliegende Strom
zum Berechnen von FILEOFFSET einfach ignoriert. Dies wird durch
Block 752 angegeben. Die Verarbeitung geht dann in Block 754 weiter,
wo festgestellt wird, ob weitere Ströme vorhanden sind. Wenn ja,
wird in Block 756 ein neuer Strom ausgewählt, und
die Verarbeitung geht in Bezug auf Block 746 weiter. Wenn
keine weiteren Ströme
vorhanden sind, wird in Block 758 eine Suche durchgeführt, die
unten ausführlicher
beschrieben wird.
-
Wenn
in Block 750 festgestellt wird, dass beide Werte X und
Y nicht größer als
das vorbestimmte Zeitintervall sind, wird festgestellt, ob entweder
X oder Y größer als
das vorbestimmte Zeitintervall ist. Zum Beispiel wird in Block 760 festgestellt,
ob der Wert X (der T – T1
entspricht) größer als
fünf Sekunden
ist. Wenn ja, darf der Wert Y nicht größer als fünf Sekunden sein, und eine
Variable FILE_OFFSET_THIS_STREAM wird auf den Indexwert T2 gesetzt.
Dies wird durch Block 762 angezeigt.
-
Wenn
in Block 760 festgestellt wird, dass der Wert X nicht größer als
fünf Sekunden
ist, wird festgestellt, ob der Wert Y größer als fünf Sekunden ist. Wenn ja, kann
der Wert T2 ignoriert werden, und die Variable FILE_OFFSET_THIS_STREAM
wird auf den Wert T1 gesetzt. Dies wird durch Blöcke 764 und 766 angezeigt.
-
Im
Grunde stellen die Blöcke 760-766 fest,
ob entweder der Indexwert T1 oder T2 zu weit von der gewünschten
Suchzeit T getrennt ist, um hilfreich zu sein. Wenn dies der Fall
ist, werden sie von weiterer Berechnung ausgeschlossen.
-
Wenn
aber in Block 764 festgestellt wird, dass der Wert Y nicht
größer als
fünf Sekunden
ist, heißt
das, dass beide Proben, die den Werten T1 und T2 entsprechen, nahe
genug an der gewünschten
Suchzeit T liegen, um von Interesse zu sein. Wenn das der Fall ist,
wird festgestellt, ob andere Sync-Punkte zwischen T1 und T2 vorhanden
sein können.
Mit anderen Worten, wenn ein Abstand zwischen T1 und T2 so klein
ist, dass keine anderen Sync-Punkte zwischen ihnen indexiert werden
konnten (basierend auf der gewünschten
Körnigkeit
des Indexers), dann können
weitere Sync-Punkte zwischen den Proben T1 und T2 existieren, die
näher an
der gewünschten
Suchposition T liegen, aber einfach aus dem Index weggelassen wurden,
weil die Körnigkeit
des Indexers nicht ausreichend war, um einen zusätzlichen Indexeintrag unterzubringen.
-
Deshalb
wird ein Suchalgorithmus durchgeführt, bei dem die Proben des
ausgewählten
Stromes, die zwischen den Proben T und T1 liegen, gesucht werden,
um festzustellen, ob sie in der Tat Sync-Punkte sind. Wenn ja, würde das
bedeuten, dass diese Sync-Punkte zeitlich näher an der gewünschten
Suchposition T und zeitlich vor dieser Suchposition liegen. Wenn dies
zutrifft, wird die Variable FILE_OFFSET_THIS_STREAM auf den Wert
gesetzt, der diesem identifizierten Sync-Punkt entspricht. Dies
wird durch Blöcke 768 und 770 gezeigt.
-
Daher
ist an diesem Punkt in der Verarbeitung der gewünschte Dateioffset für den gerade
untersuchten Strom entweder als T1, T2 oder als ein Wert zwischen
T1 und T gewählt
worden. Für
den gerade untersuchten Strom fordert daher der Suchalgorithmus
nachfolgende Filter in dem Strömungsprozess
auf, alle Datenproben, die aus dem Puffer 124 ausgelesen
werden und Zeitstempel vor dem durch die Variable FILE_OFFSET_THIS_STREAM
identifizierten haben, zu ignorieren. Dies wird durch Block 772 angezeigt.
-
Sobald
die Variable FILE_OFFSET_THIS_STREAM gewonnen ist, wird festgestellt,
ob dieser Wert kleiner als der momentane Wert der Variablen FILEOFFSET
ist. Wenn dies der erste ausgewählte
Strom ist, wird der Wert kleiner sein als der momentane Wert von
FILEOFFSET, der auf undendlich gesetzt wurde. Wenn dies aber ein
zweiter, dritter oder später
ausgewählter
Strom war, wird der Dateioffset für den vorliegenden untersuchten
Strom als der Wert für
die Variable FILEOFFSET nur benutzt, wenn er weiter links (oder
zeitlich früher)
als der momentane Wert für
die Variable FILEOFFSET liegt. Dies hat die Wirkung, dass der Suchpunkt, der
tatsächlich
beim Suchen im Puffer 124 benutzt werden wird, zu einem
Punkt weit genug links im Puffer bewegt wird, um die einzelnen Suchanforderungen
jedes Stroms zu erfüllen.
Dies wird durch Block 774 angezeigt.
-
Die
Verarbeitung geht dann in Bock 754 weiter, wo festgestellt
wird, ob weitere Ströme
untersucht werden müssen.
Wenn ja, geht die Verarbeitung in Block 756 weiter. Wenn
nicht, geht die Verarbeitung in Block 758 weiter. In Block 758 wird
das ausgewählte
Lesermodul angewiesen, nach der durch die Variable FILEOFFSET identifitierten
Probe zu suchen und an diesem Punkt mit dem Strömen von Daten aus dem Puffer 124 zu beginnen.
Da in Block 772 ein Wert für jeden Strom gesetzt wurde,
der anzeigt, dass vor dem gewünschten Sync-Punkt für diesen
Strom geströmte
Daten zu ignorieren sind, werden die aus dem Puffer 124 geströmten Daten
für einen
gegebenen Strom erst wiedergegeben, wenn diese Daten mit dem oder
nach dem für
diesen gegebenen Strom identifizierten (und durch die Variable FILE_OFFSET_THIS_STREAM
identifizierten) Sync-Punkt übereinstimmen.
-
Eine
Ausführung
von Pseudocode, der dem Flussdiagramm von 26 entspricht,
wird unten dargelegt.
-
-
Suche
durch den Teil der Datei zwischen FileOffset (T1) und FileOffset
(T2), um den Sync-Punkt
mit dem höchsten
Zeitstempel zu finden, der noch unter T ist.
-
Die
Position dieses Sync-Punkts wird FileOffsetForThisStream.
-
Dann
sage dem Splitter, alle Proben für
diesen Strom wegzuwerfen, deren Zeitstempel kleiner sind als der,
den wir gerade gefunden haben.
-
-
Es
ist somit sehen, dass der in 26 veranschaulichte
Algorithmus eine Anzahl von Problemen löst. In Bezug auf Ströme, die
in einer Datei außer
Synchronisation sein können,
sucht der Algorithmus nach dem höchsten
Dateiversatz, der geeignet ist, die einzelnen Suchanforderungen
jedes Stroms zu erfüllen.
Das Lesermodul beginnt dann an diesem Punkt das Strömen, lässt aber
alles vor der ersten Probe, die tatsächlich für jeden gegebenen Strom gespielt
werden sollte, fallen. Desgleichen wird, wo kein Sync-Punkt mit
dem genauen gewünschten
Zeitstempel (die gewünschte
Suchposition) vorhanden ist, die Suchposition auf den nächsten Sync-Punkt
vor der gewünschten
Suchposition gesetzt, sofern der nächste Sync-Punkt nicht zu weit
nach links (in der Vergangenheit) liegt. Da außerdem einige Ströme Suchpunkte
enthalten können
und andere nicht, wird jede Probe in einem Strom ohne Suchpunkte
als ein geeigneter Suchpunkt angesehen. Schließlich, da nicht alle Suchpunkte
indexiert werden können,
findet der Suchalgorithmus die nächsten
indexierten Suchpunkte vor und hinter der gewünsten Suchposition und schaut
dann auf die Differenz zwischen diesen indexierten Punkten, um festzustellen,
ob irgendwelche Sync-Punkte zwischen ihnen liegen können. Wenn
ja, werden die Proben links von der gewünschten Suchposition gelesen,
um nach zusätzlichen
Sync-Punkten zu suchen.
-
Obwohl
die vorliegende Erfindung mit Verweis auf bevorzugte Ausführungen
beschrieben wurde, werden Fachleute in Technik erkennen, dass Änderungen
in Form und Detail vorgenommen werden können, ohne vom Umfang der Erfindung
abzuweichen.