Verwaltung und Programmierung


Szenenwechsel suchen und verwenden

Der Video Extender stellt eine Gruppe von Anwendungsprogrammierschnittstellen zur Verfügung, mit denen Sie Aufnahmen oder Vollbilder in einem Videoclip suchen können. Wenn Sie eine Aufnahme oder ein Vollbild gefunden haben, können Sie auf die zugehörigen Daten zugreifen, wie z. B. die Anfangs- und Endvollbildnummern oder den Pixelinhalt eines Vollbilds. Sie können dann diese Informationen zur weiteren Verarbeitung an ein Programm übergeben. Beispielsweise können Sie den Inhalt eines Vollbilds an ein Programm übergeben, das diesen Inhalt anzeigen kann.

Der Video Extender stellt außerdem APIs zur Verfügung, mit denen Aufnahmedaten in einem Aufnahmekatalog gespeichert werden können. Der Aufnahmekatalog kann in einer Datenbank oder einer Datei sein. Sie können auf den Aufnahmekatalog in einer Datei oder auf eine schreibgeschützte Sicht des Aufnahmekatalogs in einer Datenbank zugreifen.

Eine Aufnahmekatalogdatei enthält Felder für die folgenden Daten:

Die Sicht des Aufnahmekatalogs in einer Datenbank enthält Spalten für die folgenden Daten:

Sie können auf die Daten in einer Aufnahmekatalogdatei zugreifen oder die Daten abfragen, wenn sich der Aufnahmekatalog in einer Datenbank befindet. Die Informationen zu repräsentativen Vollbildern sind besonders beim Anzeigen von Storyboards sinnvoll. Darüber hinaus können Sie, wenn sich der Aufnahmekatalog in einer Datenbank befindet, die Aufnahmedaten mit zugehörigen Daten in anderen Tabellen verknüpfen. Beispielsweise kann das Personal in einem Fernsehstudio einen Aufnahmekatalog in einer Datenbank erstellen. Es kann dann die Katalogdaten mit einer Tabelle verknüpfen, die die Videoclips sowie Informationen zu den Clips enthält. Auf diese Weise kann das Personal eine einzige Abfrage verwenden, um einen Clip und geschäftsinterne Informationen zum Clip abzufragen sowie Aufnahmen innerhalb des Clips zu identifizieren.

Datenstrukturen bei der Aufnahmeermittlung

Daten, die mit der Aufnahmeermittlung zusammenhängen, werden in Strukturen gespeichert, die in der Kopfdatei für die Aufnahmeermittlung, dmbshot.h, enthalten sind. Für viele der APIs für die Aufnahmeermittlung ist erforderlich, daß Sie auf eine oder mehrere dieser Strukturen zeigen. Einige dieser Strukturen werden verwendet, um Daten zu speichern, die der Video Extender als Eingabe verwendet. Beispielsweise enthält die Steuerstruktur für Aufnahmen Informationen, die die Aufnahmeermittlung steuern. Die meisten der Strukturen werden vom Video Extender verwendet, um Daten zu speichern, die von einem Video abgerufen werden. Beispielsweise enthält die Datenstruktur für Videovollbilder den Pixelinhalt eines Vollbilds.

Die Strukturen, die für die Aufnahmeermittlung verwendet werden, sind DBvIOType, DBvShotControl, DBvShotType, DBvFrameData und DBvStoryboardCtrl.

DBvIOType

Die Datenstruktur DBvIOType enthält Daten zu einem Video, wie z. B. Format, Dimensionen und Anzahl der Vollbilder. Die Datenstruktur ist wie folgt definiert:

typedef struct {

   FILE *hFile;                    /* file handle for the video */
   char vhandle[255];              /* video handle (if from database)
   char vtable[255];               /* video table name (if from database) */
   char vcolumn[255];              /* video column name (if from database) */
   char vFile[255];                /* name of video file */
   char idxFile[255];              /* name of index file */
   char isIdx;                     /* 1 if the index exists, 0 otherwise */
   char isInDb;                    /* 1 if from DB, 0 if from file */
   int format;                     /* Format of the video */
   unsigned long dx, dy;           /* Dimensions of the video */
   unsigned long totalFrames;      /* TotalFrames in the video */
   unsigned long markFrame;        /* used by shot detection */
   unsigned long currentFrame;     /* The current video frame */
   DBvFrameData fd;                /* Frame data for current frame */
   DBvDCFrameData fdDc;            /* Frame data for DC images */
   unsigned char BGRValid;         /* reserved */
   unsigned short usDeviceID;      /* reserved */
   unsigned long hwnd;             /* reserved */
   int videoReset;                 /* Flag if video is opened or seeked */
   int firstshot;                  /* Used internally to indicate the first call */
   void *reserved                  /* reserved */

} DBvIOType;

DBvShotControl

Die Datenstruktur DBvShotControl enthält Informationen, die zur Steuerung der Aufnahmeermittlung verwendet werden, wie z. B. die Ermittlungsmethode. Die Datenstruktur ist wie folgt definiert:

typedef struct {

  unsigned long reserved;
  unsigned long method;           /* detection method */

    #define DETECT_CORRELATION  0x00000001
    #define DETECT_HISTOGRAM    0x00000002
    #define DETECT_CORRHIST     0x00000003
    #define DETECT_CORRHISTDISS 0x00000004


  int normalCorrValue;            /* Correlation threshold */
  int sceneCutSkipXY;             /* reserved */
  int CorrHistThresh;             /* Histogram threshold */
  int DissThresh;                 /* Dissolve threshold */
  int DissCacheSize;              /* Dissolve cache size */
  int DissNumCaches;              /* Dissolve cache number */
  int minShotSize;                /* Minimum frames in a shot */

} DBvShotControl;

In In der folgenden Tabelle werden die einzelnen Felder in DBvShotControl und deren zulässige Einstellungen und Standardeinstellungen beschrieben. Um diese Felder mit deren Standardwerten zu initialisieren, verwenden Sie die API DBvInitShotControl, wie im Abschnitt Werte in Datenstrukturen bei der Aufnahmeermittlung initialisieren beschrieben.

DBvShotControl-Einstellungen hängen vom Videotyp ab: Szenenwechsel in digitalisierten Videos variieren je nach Inhalt und Format des Videos sehr. Außerdem variiert die Genauigkeit des Algorithmus für Szenenwechsel je nach Video. Klar definierte Szenenwechsel mit offensichtlichen Unterschieden in der allgemeinen Vollbildarstellung werden akkurater ermittelt als weniger klar definierte Arten von Szenenwechseln oder Änderungen, bei denen der allgemeine Farbinhalt der gleiche bleibt. Obwohl die Standardeinstellungen für das DBvShotControl-Feld für die meisten Anwendungen gut funktionieren, müssen Sie diese Einstellungen möglicherweise verkleinern, um die Ermittlung falscher oder fehlender Aufnahmen zu verhindern.

Tabelle 10. DBvShotControl-Felder
Feld Bedeutung
method Gibt die Methode an, die der Video Extender zur Ermittlung von Szenenwechseln verwendet. Sie können eine der folgenden Methoden auswählen:

DETECT_CORRELATION. Vergleicht die Pixel in zwei aufeinanderfolgenden Vollbildern. Überschreitet die Differenz die Korrelationsschwelle, wird ein Szenenwechsel errmittelt.

DETECT_HISTOGRAM. Vergleicht die Histogrammwerte von zwei aufeinanderfolgenden Vollbildern. Der Histogrammwert mißt die Verteilung von Farben im Vollbild. Überschreitet die Differenz die Histogrammschwelle, wird ein Szenenwechsel ermittelt.

DETECT_CORRHIST. Verwendet die Korrelationsmethode, um mögliche Szenenwechsel zu identifizieren und verwendet dann die Histogrammmethode für die Vollbilder, die als mögliche Szenenwechsel markiert sind. Wird die Histogrammschwelle überschritten, wird ein Szenenwechsel ermittelt.

DETECT_CORRHISTDISS. Arbeitet wie DETECT_CORRHIST, prüft jedoch zusätzliche Vollbilder auf Überblendung.

Die Standardmethode ist DETECT_CORRHIST.

normalCorrValue Ein ganzzahliger Wert von 0 bis 100, der die Korrelationsschwelle angibt. Hierdurch wird der Mindestwert des Korrelationskoeffizienten zwischen den Pixeln in zwei Vollbildern angegeben. Der Wert 0 bedeutet, daß immer ein Szenenwechsel für das nächste Vollbild ermittelt wird. Der Wert 100 bedeutet, daß ein Szenenwechsel nur ermittelt wird, wenn sich alle Pixel von einem Vollbild zum nächsten Vollbild ändern. Der Standardwert ist 60.
sceneCutSkipXY Reserviert.
CorrHistThresh Ein ganzzahliger Wert von 0 bis 100, der die Histogrammschwelle angibt. Hierdurch wird die Differenz zwischen Histogrammwerten von nachfolgenden Vollbildern gemessen. Der Wert 0 bedeutet, daß ein Szenenwechsel nur ermittelt wird, wenn die Histogrammwerte von einem Vollbild zum nächsten gänzlich unterschiedlich sind. Der Wert 100 bedeutet, daß immer ein Szenenwechsel für das nächste Vollbild ermittelt wird. Der Standardwert ist 10.
DissThresh Ein ganzzahliger Wert von 0 bis 100, der die Schwelle für den Überblendungstest angibt. Hierdurch wird der Prozentsatz an Pixel in einem Vollbild gemessen, die einen Überblendungstest bestehen müssen, bevor eine Überblendung ermittelt wird. Der Wert 0 bedeutet, daß immer eine Überblendung für das Vollbild ermittelt wird. Der Wert 100 bedeutet, daß eine Überblendung nur ermittelt wird, wenn alle Pixel in dem Vollbild den Überblendungstest bestehen. Der Standardwert ist 15.
DissCacheSize Ein ganzzahliger Wert, der die Anzahl von Vollbildern angibt, die im Abweichungsanteil des Überblendungstests verwendet werden. Der Standardwert ist 4.
DissNumCaches Ein ganzzahliger Wert, der die Anzahl von Vollbildern angibt, die im Konsistenzanteil des Überblendungstests verwendet wird. Der Standardwert ist 7.
minShotSize Ein ganzzahliger Wert, der die Mindestanzahl von Vollbildern für eine Aufnahme angibt. Damit eine Aufnahme ermittelt wird, muß sie zumindest so viele Vollbilder haben wie die Mindestanzahl. Der Standardwert ist 5.

DBvShotType

Die Datenstruktur DBvShotType enthält Informationen zu einer Aufnahme, wie z. B. Anfang- und Endvollbildnummer, repräsentative Vollbildnummer sowie einen Zeiger auf den Pixelinhalt des repräsentativen Vollbilds. Die Datenstruktur ist wie folgt definiert:

typedef struct {

  unsigned long startFrame;       /* starting frame number */
  unsigned long endFrame;         /* ending frame number */
  unsigned long repFrame;         /* representative frame number */
  DBvFrameData fd;                /* data for representative shot */
  unsigned long dx;               /* frame data width in pixels */
  unsigned long dy;               /* frame data height in pixels */
  char *comment;                  /* shot remark */

} DBvShotType;

DBvFrameData

Die Datenstruktur DBvFrameData enthält den Pixelinhalt eines Vollbilds. Die Datenstruktur ist wie folgt definiert:

typedef struct                     /* video frame data */
{
  /* MPEG 1 pixels */
  unsigned char *luminance;        /* Luminance pixel plane (black and white) */
  unsigned char *Cr;               /* Cr pixel plane */
  unsigned char *Cb;               /* Cb pixel plane */
  unsigned char *reserved;

  } DBvFrameData;

DBvStoryboardCtrl

Die Datenstruktur DBvStoryboardCtrl enthält Werte, mit denen gesteuert wird, wie viele und welche repräsentative Vollbilder für eine Aufnahme in einem Videokatalog gespeichert werden. Eine Beschreibung zur Verwendung dieser Werte befindet sich im Abschnitt Storyboard erstellen. Die Datenstruktur ist wie folgt definiert:

typedef struct {

  int thresh1;                    /* threshold for small to medium scenes */
  int thresh2;                    /* threshold for medium to large scenes */
  int delta;                      /* offset used for representative frames */

} DBvStoryboardCtrl;

In In der folgenden Tabelle werden die einzelnen Felder in DBvStoryboardCtrl und deren Standardeinstellungen beschrieben. Um diese Felder mit ihren Standardwerten zu initialisieren, verwenden Sie die API DBvInitStoryboardCtrl, wie im Abschnitt Werte in Datenstrukturen bei der Aufnahmeermittlung initialisieren beschrieben.

Die Einstellungen für DBvStoryboardCtrl hängen vom Typ des Videos ab: Welche und wie viele repräsentative Vollbilder für ein Storyboard optimal sind, hängt möglicherweise von den unterschiedlichen Typen von Videos ab. Obwohl die Standardeinstellungen für das Feld DBvStoryboardCtrl für die meisten Typen von Video gut funktionieren, möchten Sie möglicherweise diese Einstellungen für eine Testuntergruppe von Videos verwenden. Sie können dann die Einstellung entsprechend verbessern, bevor Sie Storyboards für eine größere Gruppe von Videos erstellen.

Tabelle 11. DBvStoryboardCtrl-Felder
Feld Bedeutung
thresh1 Gibt die Schwelle für kurze Aufnahmen an. Aufnahmen, die weniger Vollbilder enthalten, als der Wert von thresh1 angibt, sind kurze Aufnahmen. Beim Katalogisieren enthalten die Informationen für eine kurze Aufnahme ein repräsentatives Vollbild (das mittlere Vollbild).

Der Standardwert ist 90. Wenn der Wert von thresh1 auf -1 gesetzt ist, wird eine Aufnahme (unabhängig von der tatsächlichen Länge) als kurze Aufnahme betrachtet.

thresh2 Gibt die Schwelle für mittellange bis lange Aufnahmen an. Aufnahmen, die maximal so viele Vollbilder enthalten, wie der Wert thresh2 angibt, aber mindestens so viele Vollbilder, wie der Wert thresh1 angibt, werden als mittellange Aufnahmen betrachtet. Beim Katalogisieren enthalten die Informationen für eine mittellange Aufnahme zwei repräsentative Vollbilder. Die Position der repräsentativen Vollbilder wird durch den Wert des Deltafeldes gesteuert. Aufnahmen, die mehr Vollbilder enthalten, als der Wert von thresh2 angibt, sind lange Aufnahmen. Beim Katalogisieren enthalten die Informationen für eine lange Aufnahme drei repräsentative Vollbilder. Die Position des ersten und des letzten repräsentativen Vollbilds wird durch den Wert des Deltafeldes gesteuert. Das zweite repräsentative Vollbild ist das mittlere Vollbild.

Der Standardwert ist 150. Wenn der Wert von thresh2 auf -1 gesetzt ist, wird eine Aufnahme (unabhängig von der tatsächlichen Länge) als kurze Aufnahme betrachtet.

delta Gibt die relative Position an, die für repräsentative Vollbilder verwendet wird. Bei mittellangen und langen Aufnahmen wird das erste repräsentative Vollbild vom Anfang der Aufnahme die Deltazahl an Vollbildern eingerückt. Das letzte repräsentative Vollbild wird vom Ende der Aufnahme die Deltazahl an Vollbildern eingerückt.

Der Standardwert ist 5.

Werte in Datenstrukturen bei der Aufnahmeermittlung initialisieren

Die Werte in der Datenstruktur DBvShotControl steuern die Aufnahmeermittlung. Die Werte in der Datenstruktur DBvStoryboardCtrl steuern das Erstellen eines Storyboards. Für die Felder in diesen Datenstrukturen können Sie explizit Werte angeben. Darüber hinaus können Sie die Werte in diesen Strukturen mit ihren Standardwerten initialisieren. Tabelle 10 enthält die Standardwerte der Datenstruktur DBvShotControl. Tabelle 11 enthält die Standardwerte der Datenstruktur DBvStoryboardCtrl.

Verwenden Sie die API DBvInitShotControl, um die Werte in der Datenstruktur DBvShotControl zu initialisieren. Wenn Sie die API verwenden, müssen Sie die Steuerstruktur für Aufnahmen angeben. Beispielsweise initialisiert die folgende Anweisung die Felder in der Struktur DBvShotControl mit den Standardwerten:

DBvShotControl    shotCtrl;

rc=DBvInitShotControl(
              shotCtrl);          /* pointer to shot control structure */

Verwenden Sie die API DBvInitStoryboardCtrl, um die Werte in der Datenstruktur DBvStoryboardCtrl zu initialisieren. Wenn Sie die API verwenden, müssen Sie die Steuerstruktur für das Storyboard angeben. Beispielsweise initialisiert die folgende Anweisung die Felder in der Struktur DBvStoryboardCtrl mit den Standardwerten:

DBvStoryboardCtrl    sbCtrl;

rc=DBvInitStoryboardCtrl(
              sbCtrl);          /* pointer to storyboard control structure */

Aufnahme oder Vollbild abrufen

Sie können den Video Extender verwenden, um eine Aufnahme oder ein Vollbild eines Videos abzurufen. Bevor Sie eine Aufnahme oder ein Vollbild abrufen können, müssen Sie das Video für die Aufnahmeermittlung öffnen. Der Video Extender verwendet einen Index, um auf Vollbilder und Aufnahmen zuzugreifen. Bevor Sie eine Aufnahme oder ein Vollbild abrufen können, müssen Sie einen Index für das Video erstellen.

Nachdem das Video geöffnet und ein Index erstellt wurde, können Sie die nächste Aufnahme oder das nächste Vollbild in einem Video abrufen oder ein bestimmtes Vollbild nach Vollbildnummer abrufen. Der Video Extender kann Videoclips im MPEG-1-Format verarbeiten. Wenn Sie planen, ein abgerufenes Vollbild mit einem Programm zu verwenden, für das das RGB-Format erforderlich ist, können Sie das Vollbild mit Hilfe einer Video Extender-API in das gewünschte Format umsetzen.

Video für die Aufnahmeermittlung öffnen

Verwenden Sie die API DBvOpenFile, um ein Video zu öffnen, das in einer Datei gespeichert ist. Auf die Datei muß vom Client aus zugegriffen werden können. Verwenden Sie die API DBvOpenHandle, um ein Video zu öffnen, das in einer Datenbanktabelle gespeichert ist. Die Anwendung muß zunächst mit der Datenbank verbunden sein. Ist das Video in einer Datenbanktabelle gespeichert, kopiert der Video Extender das Video in eine temporäre Datei. Die temporäre Datei befindet sich in einem Verzeichnis, das in der Umgebungsvariablen DB2VIDEOTEMP angegeben ist. Durch das Öffnen wird ein Video für die Aufnahmeermittlung initialisiert. Der Video Extender setzt einen Zeiger an den Anfang des Videos, das heißt auf das Vollbild 0.

Wenn Sie eine der APIs verwenden, müssen Sie auf einen Bereich zeigen, der für den Zeiger auf die Videodatenstruktur (DBvIOType) verwendet wird. Der Video Extender ordnet diese Struktur als Antwort auf den API-Aufruf zu und verwendet die Struktur, um Informationen zum Video zu speichern. Die Struktur zeigt außerdem auf die Vollbilddatenstruktur (DBvFrameData), die den Pixelinhalt des aktuellen Vollbilds enthält. Eine Beschreibung dieser Strukturen befindet sich im Abschnitt Datenstrukturen bei der Aufnahmeermittlung. Für die API DBvOpenFile müssen Sie außerdem den Namen der Videodatei angeben. Für die API DBvOpenHandle müssen Sie die Videokennung angeben.

Beispielsweise öffnet die folgende Anweisung ein Video, das in einer Datei gespeichert ist, für die Aufnahmeermittlung:

DBvIOType    *videoptr;

rc=DBvOpenFile (
       &videoptr,                        /* pointer to video structure pointer */
       "/employee/video/rsmith.mpg");    /* video file */

Die folgende Anweisung öffnet ein Video, das in einer Datenbanktabelle gespeichert ist, für die Aufnahmeermittlung:

EXEC SQL BEGIN DECLARE SECTION;
char Vid_hdl[251];
EXEC SQL END DECLARE SECTION;

DBvIOType    *videoptr;

EXEC SQL SELECT video INTO :Vid_hdl
FROM employee
WHERE name="Anita Jones";

rc=DBvOpenHandle(
       &videoptr,                         /* pointer to video structure pointer */
       vid_hdl);                          /* video handle*/

Video indexieren

Der Video Extender verwendet einen Index, um auf Vollbilder und Aufnahmen in einem Video zuzugreifen. Sie müssen einen Index für ein Video erstellen, bevor Sie eine Aufnahme oder ein Vollbild des Videos abrufen können (das MPEG-Format liefert keinen Index für Vollbilder und Aufnahmen). Der Index ordnet Vollbildnummern den Bitströmen zu, die ein MPEG-1-Video bilden.

Sie können unter Verwendung der API DBvCreateIndexFromVideo oder der API DBvCreateIndex einen Index für ein Video erstellen. Wenn Sie jedoch ein Video unter Verwendung der API DBvOpenFile oder der API DBvOpenHandle für die Aufnahmeermittlung geöffnet haben, brauchen Sie nicht explizit einen Index zu erstellen; der Video Extender wird automatisch einen Index für Sie erstellen. (Informationen zum Öffnen des Videos befinden sich im Abschnitt Video für die Aufnahmeermittlung öffnen.)

Wenn ein Index (entweder explizit oder automatisch) erstellt wurde, versucht der DB2 Video Extender, den Index im selben Pfad zu speichern wie die Videodatei. Er versucht zunächst, die Indexdatei als 'fname.ext.idx' zu speichern, wobei 'fname' der Name der Videodatei und 'ext' die Erweiterung der Videodatei ist. Wenn dieser Versuch fehlschlägt, versucht der Video Extender, die Datei als 'fname.idx' in demselben Verzeichnis zu speichern wie die Videodatei. Wenn auch dieser Versuch fehlschlägt, versucht er, die Indexdatei im lokalen Verzeichnis zu speichern, zunächst als 'fname.ext.idx' und anschließend als 'fname.idx'.

Wenn die Datei geöffnet wird, sucht der Video Extender in der folgenden Reihenfolge nach der Indexdatei:

  1. Eine Version der Indexdatei mit Schreibzugriff, vor einer Version mit Lesezugriff.

  2. Eine Indexdatei im selben Pfad wie die Videodatei, vor einer Indexdatei im aktuellen Verzeichnis.

  3. Ein Index mit dem Namen 'fname.ext.idx', vor einem Index mit dem Namen 'fname.idx', wobei 'fname' der Name der Videodatei und 'ext' die Erweiterung der Videodatei ist.

Beispielsweise sucht der Video Extender, wenn ein Index für die Videodatei 'myvideo.mpg' erstellt ist, zunächst nach einem Index mit Schreibzugriff mit dem Namen 'myvideo.mpg.idx' in dem Pfad, in dem sich die Videodatei befindet.

Wenn Sie die API DBvCreateIndexFromVideo verwenden, geben Sie die Datenstruktur DBvIOType an. Der Video Extender speichert den Namen der Indexdatei in der Struktur. Eine Beschreibung dieser Struktur befindet sich im Abschnitt Datenstrukturen bei der Aufnahmeermittlung. Beispielsweise erstellt die folgende Anweisung einen Index für ein Video, das zuvor für die Aufnahmeermittlung geöffnet wurde:

DBvIOType      *video;

rc=DBvCreateIndexFromVideo(
       video);                  /* pointer to video structure */

Wenn Sie die API DBvCreateIndex verwenden, geben Sie den Namen der Videodatei an. Der Video Extender speichert den Index in einer Datei (im gleichen Verzeichnis, in dem sich das Video befindet). Beispielsweise erstellt die folgende Anweisung einen Index für eine Videodatei (die Datei wurde zuvor nicht für die Aufnahmeermittlung geöffnet):

rc=DBvCreateIndex(
       "/employee/video/rsmith.mpg");    /* video file */

Sie können auch ermitteln, ob ein Index für ein Video existiert. Verwenden Sie die API DBvIsIndex, um nach einem Index zu suchen. Die API setzt die Statusvariable auf 0, wenn kein Index existiert, oder auf 1, wenn ein Index für die Datei existiert. Beispielsweise prüft die folgende Anweisung die Existenz eines Indexes für eine Videodatei:

short  *status

rc=DBvIsIndex(
       "/employee/video/rsmith.mpg",     /* video file */
       &status);                         /* status indicator */

Videoindex sichern: Sichern Sie die Datei mit dem Videoindex für den Fall, daß Sie sie wiederherstellen müssen. Die Datei befindet sich in dem Verzeichnis, in dem der Video Extender installiert ist.

Vollbild abrufen

Sie können das aktuelle Vollbild in einem Video abrufen. Sie können außerdem das aktuelle Vollbild auf eine bestimmte Vollbildnummer setzen. Verwenden Sie die API DBvGetFrame, um das aktuelle Vollbild in einem Video abzurufen. Verwenden Sie die API DBvSetFrameNumber, um das aktuelle Vollbild auf eine bestimmte Vollbildnummer zu setzen.

Wenn Sie die API DBvGetFrame verwenden, geben Sie die Videostruktur an. Beispielsweise ruft die folgende Anweisung das aktuelle Vollbild in einem Video ab:

DBvIOType      *video;

rc=DBvGetFrame(
       video);                  /* pointer to video structure */

Wenn Sie die API DBvSetFrameNumber verwenden, geben Sie die Videostruktur und die Nummer des Vollbilds an, das Sie als aktuelles Vollbild festlegen wollen. Beispielsweise setzen die folgenden Anweisungen das aktuelle Vollbild auf die Vollbildnummer 85 und rufen das Vollbild anschließend ab:

DBvIOType      *video;

rc=DBvSetFrameNumber(
       video,                    /* pointer to video structure */
       85);                     /* frame number */

rc=DBvGetFrame(
       video);                  /* pointer to video structure */

Bei der Ausgabe bringt die API DBvSetFrameNumber das Feld currentFrame in der Struktur DBvIOType in Grundstellung. Die API DBvGetFramestellt den Pixelinhalt des Vollbilds in die Struktur DBvFrameData. Eine Beschreibung dieser Strukturen befindet sich im Abschnitt Datenstrukturen bei der Aufnahmeermittlung.

Aufnahme abrufen

Verwenden Sie die API DBvDetectShot, um die nächste Aufnahme in einem Video abzurufen. Wenn Sie die API DBvDetectShot verwenden, müssen Sie auf die folgenden Datenstrukturen zeigen:

Sie müssen außerdem auf ein Anfangsvollbild für die Suche zeigen. Der Video Extender beginnt an dieser Position des Videos seine Suche nach der nächsten Aufnahme.

Als Ausgabe der API setzt der Video Extender eine Markierung shotDetected und zeigt auf das Anfangsvollbild der nächsten Aufnahme und dessen Vollbilddaten. Ist die Markierung shotDetected auf 1 gesetzt, wurde eine Aufnahme ermittelt. In diesem Fall führt der Video Extender folgende Aktionen aus:

Ist die Markierung shotDetected auf 0 gesetzt, wurde keine Aufnahme ermittelt. In diesem Fall gibt der Video Extender eine Code zurück, der angibt, daß das Ende des Videos erreicht wurde.

Eine Beschreibung dieser Strukturen befindet sich im Abschnitt Datenstrukturen bei der Aufnahmeermittlung.

Beispielsweise fordern die folgenden Anweisungen die nächste Aufnahme in einem Video an:

DBvIOType      *video;
long start_frame = 1;
char shotDetected = 0;
DBvShotControl    shotCtrl;
DBvShotType    shot;

shotCtrl>method=DETECT_CORRHIST
shotCtrl>normalCorrValue=60;
shotCtrl>sceneCutSkipXY=1;
shotCtrl>CorrHistThresh=10;
shotCtrl>DissThresh=10;
shotCtrl>DissCacheSize=4;
shotCtrl>DissNumCaches=7;
shotCtrl>minShotSize=0;

rc=DBvDetectShot(
       video,                    /* pointer to video structure */
       start_frame,        /* starting frame for search */
       &shotDetected,      /* shot detected flag */
                           /* 1=detected, 0=not detected */
       shotCtrl,           /* pointer to shot control structure */
       &shot);             /* pointer to shot type structure */

Format eines abgerufenen Vollbilds umsetzen

Der Inhalt eines MPEG-1-Vollbilds ist im YUV-Format, ein Format, das Informationen zur Luminanzpixelebene, Cr-Pixelebene und Cb-Pixelebene eines Vollbilds enthält.

Wenn Sie ein Videovollbild editieren wollen, ist es möglicherweise sinnvoll, das Vollbild vom YUV-Format in das RGB-Format umzusetzen. Der Video Extender stellt die API DBvFrameDatato24BitRGB zur Verfügung, um ein abgerufenes MPEG-1-Vollbild vom YUV-Format in das 24-Bit-RGB-Format umzusetzen. Um die API zu verwenden, müssen Sie zunächst einen Zielpuffer anlegen.

Wenn Sie die API verwenden, müssen Sie auf den Zielpuffer und die Vollbilddaten, die Sie umsetzen wollen, zeigen. Außerdem müssen Sie die Höhe und die Breite des Vollbilds angeben. (Sie können die Daten, die Höhe und die Breite des Vollbilds aus der Struktur DBvIOType für das Vollbild abrufen.) Beispielsweise setzen die folgenden Beispiele ein MPEG-1-Vollbild in ein 24-Bit-RGB-Format um:

char RGB[18000];
DBvIOType      *video;
DBvFrameData   fd;

rc=DBvGetNextFrame(
       video);                  /* pointer to video structure */

fd=video.fd
dx=video.dx
dy=video.dy

rc=DBvFrameDataTo24BitRGB (
       RGB,                      /* pointer to target buffer */
       &fd,                      /* pointer to frame data */
       dx,                                /* frame width */
       dy);                               /* frame height */

Videodatei schließen

Verwenden Sie die API DBvClose, um eine Videodatei zu schließen, die für die Aufnahmeermittlung geöffnet wurde. Wenn Sie die API verwenden, geben Sie einen Zeiger auf die Videostruktur für die Datei an.

Beispielsweise schließt die folgende Anweisung eine Videodatei, die für die Aufnahmeermittlung geöffnet wurde:

DBvIOType      *video;

rc=DBvClose (video);

Abgerufenes Vollbild anzeigen

Der Inhalt eines abgerufenen MPEG-1-Vollbild ist im YUV-Format. Dabei handelt es um ein Format, das von den meisten Programmen zur Abbildanzeige nicht angezeigt werden kann. Um ein abgerufenes Videovollbild anzeigen zu können, müssen Sie es in ein Format umsetzen, das von einem Programm zur Abbildanzeige verstanden wird, z. B. in das BMP-Format. Führen Sie beispielsweise folgende Schritte aus, um ein MPEG-1-Vollbild anzuzeigen:

  1. Verwenden Sie die API DBvFrameDatato24BitRGB, um das Format eines abgerufenen MPEG-1-Vollbilds vom YUV-Format in das 24-Bit-RGB-Format umzusetzen. Informationen zur Verwendung der API DBvFrameDatato24BitRGB befinden sich im Abschnitt Format eines abgerufenen Vollbilds umsetzen.

  2. Hängen Sie die entsprechende Kopfzeile an das umgesetzte Vollbild an. Beispielsweise ist für das BMP-Format eine Kopfzeile erforderlich, die Informationen z. B. zur Höhe und Breite des Abbilds enthält.

  3. Kopieren Sie den Vollbildinhalt (mit Kopfzeile) in eine Datei.

  4. Verwenden Sie die API DBiBrowse, um die Datei anzuzeigen. Informationen zur Verwendung der API DBiBrowse befinden sich im Abschnitt Anzeige- oder Wiedergabe-APIs verwenden.

Aufnahmen katalogisieren

Sie können die Informationen zu einer Aufnahme in einem Aufnahmekatalog speichern. Der Video Extender stellt APIs für folgende Funktionen zur Verfügung:

Katalogisierte Aufnahmen liefern die Eingabe für Storyboards: Nachdem Sie Aufnahmeinformationen in einem Aufnahmekatalog (in einer Datenbank oder Datei) gespeichert haben, können Sie diese Informationen in einer aufnahmebezogenen Anwendung verwenden. Beispielsweise können Sie eine Anwendung erstellen, die die repräsentativen Vollbilder für alle Aufnahmen in einem Video abruft und sie in einem Storyboard anzeigt.

Sie brauchen nur einen Aufnahmekatalog für eine Datenbank zu erstellen: Sie brauchen nur einen Aufnahmekatalog zu erstellen, wenn Sie wollen, daß der Katalog in einer Datenbank gespeichert wird. Der Video Extender erstellt automatisch eine Aufnahmekatalogdatei, wenn Sie Daten für die Aufnahmen in einem Video speichern und angeben, daß die Ausgabe in einer Datei erfolgen soll.

Vor dem Erstellen eines Katalogs (nur Datenbank)

Bevor Sie einen Katalog in einer Datenbank erstellen und verwenden, müssen Sie

Aufnahmekatalog erstellen (nur Datenbank)

Verwenden Sie die API DBvCreateShotCatalog, um einen Aufnahmekatalog in einer Datenbank zu erstellen. (Der Video Extender erstellt automatisch eine Aufnahmekatalogdatei, wenn Sie Daten für die Aufnahmen speichern und angeben, daß die Ausgabe in einer Datei erfolgen soll.) Der Katalog besteht aus Tabellen, die die aufnahmebezogenen Informationen speichern. Sie können eine Sicht der Tabellen unter Verwendung von SQL abfragen. In In der folgenden Tabelle werden die Spalten in der Sicht gezeigt.

Tabelle 12. Spalten in der Sicht eines Aufnahmekatalogs
Spaltenname Datentyp Beschreibung
SHOTHANDLE CHAR(36) Aufnahmekennung
VIDEOHANDLE VARCHAR(254) Videokennung. Die Spalte enthält nur einen Wert, wenn das Video mit der API DBvOpenHandle geöffnet wurde.
VIDEOTABLE VARCHAR(254) Die Tabelle, die das Video enthält. Die Spalte enthält nur einen Wert, wenn das Video mit der API DBvOpenHandle geöffnet wurde.
VIDEOCOLUMN VARCHAR(254) Die Tabellenspalte, die das Video enthält. Die Spalte enthält nur einen Wert, wenn das Video mit der API DBvOpenHandle geöffnet wurde.
VIDEOFILE VARCHAR(254) Videodateiname. Die Spalte enthält nur einen Wert, wenn das Video mit der API DBvOpenFile geöffnet wurde.
STARTFRAME INTEGER Nummer des ersten Vollbilds
ENDFRAME INTEGER Nummer des letzten Vollbilds
REPFRAME INTEGER Repräsentative Vollbildnummer
REPFRAMEDATA DB2IMAGE Repräsentative Vollbilddaten
COMMENTS LONG VARCHAR Kommentar

Sie sind flexibel, wie viele Aufnahmekataloge Sie in einer Datenbank erstellen wollen und für welche Aufnahmen Sie Informationen in den einzelnen Aufnahmekatalogen speichern wollen. Sie können einen Katalog erstellen, um Aufnahmeinformationen für viele Videos zu speichern, können Aufnahmeinformationen für jedes Video in einem separaten Katalog speichern oder Informationen für mehrere Aufnahmen innerhalb eines Videos in mehreren Katalogen speichern.

Wenn Sie die API verwenden, müssen Sie einen Namen für den Katalog angeben. Namen, die länger als 16 Zeichen sind, werden abgeschnitten. Außerdem müssen Sie die Kennung für die Datenbankverbindung angeben, die durch den SQLConnect-Aufruf zur Datenbank zurückgegeben wird. Beispielsweise erstellen die folgenden Anweisungen einen Aufnahmekatalog 'hotshots':

SQLHDBC      hdbc;

rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);

rc=DBvCreateShotCatalog(
                "hotshots",           /* shot catalog name */
       hdbc);                    /* database connection handle */

Sichten von Aufnahmekatalogen werden MMDBSYS.SVkatname genannt, wobei katname der Name des Aufnahmekatalogs ist. Beispielsweise hat eine Sicht des Katalogs 'hotshots' den Namen MMDBSYS.SVHOTSHOTS.

Informationen zu einer einzelnen Aufnahme speichern (nur Datenbank)

Verwenden Sie die API DBvInsertShot, um Informationen zu einer einzelnen Aufnahme in einem Aufnahmekatalog zu speichern. Sie können Informationen zu einer einzelnen Aufnahme in einem Video nur speichern, wenn sich der Aufnahmekatalog in einer Datenbank befindet. Zu den Informationen, die im Katalog gespeichert werden, gehören:

Ein Kommentar für die Aufnahme wird jedoch nicht gespeichert. Eine Beschreibung, wie Sie einen Kommentar zu den für eine Aufnahme gespeicherten Informationen hinzufügen können, befinden sich im Abschnitt Kommentar für eine Aufnahme angeben (nur Datenbank).

Wenn Sie die API DBvInsertShot verwenden, müssen Sie den Namen des Aufnahmekatalogs und einen Zeiger auf die Aufnahme angeben. Eine Möglichkeit, den Zeiger auf die Aufnahme zu setzen, besteht darin, die nächste Aufnahme abzurufen, wie im Abschnitt Aufnahme abrufen beschrieben. Außerdem müssen Sie die Kennung für die Datenbankverbindung angeben, die durch den SQLConnect-Aufruf zur Datenbank zurückgegeben wird. Beispielsweise rufen die folgenden Anweisungen die nächste Aufnahme nach dem Vollbild 1 auf und speichern anschließend die Informationen zur Aufnahme im Aufnahmekatalog 'hotshots':

SQLHDBC      hdbc;
SQLHENV      henv;
DBvIOType      *video;
long start_frame = 1;
char shotDetected = 0;
DBvShotControl    shotCtrl;
DBvShotType    shot;

shotCtrl>method=DETECT_CORRHIST
shotCtrl>normalCorrValue=60;
shotCtrl>sceneCutSkipXY=1;
shotCtrl>CorrHistThresh=10;
shotCtrl>DissThresh=10;
shotCtrl>DissCacheSize=4;
shotCtrl>DissNumCaches=7;
shotCtrl>minShotSize=0;

SQLAllocConnect(henv,&hdbc)

rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);

rc=DBvDetectShot(
       video,
       start_frame,
       &shotDetected,
       &shotCtrl,
       &shot)

rc=DBvInsertShot (
       "hotshots",              /*shot catalog name*/
       shot,                      /*pointer to shot*/
       hdbc);                     /*database connection handle*/

Informationen zu allen Aufnahmen in einem Video speichern

Verwenden Sie die API DBvBuildStoryboardTable oder DBvBuildStoryboardFile, um Informationen zu allen Aufnahmen eines Videos in einem Aufnahmekatalog zu speichern. Die API DBvBuildStoryboardTable speichert die Informationen in einem Aufnahmekatalog, der sich in einer Datenbank befindet. Die API DBvBuildStoryboardFile erstellt eine Aufnahmekatalogdatei und speichert die Informationen in dieser Datei.

Für jede der APIs kann das Quellenvideo in einer Datenbank oder einer Datei sein.

Wenn Sie eine der APIs verwenden, müssen Sie

Nur bei der API DBvBuildStoryboardTable müssen Sie außerdem die Kennung für die Datenbankverbindung angeben, die durch den SQLConnect-Aufruf zur Datenbank zurückgegeben wird.

Beispielsweise speichern die folgenden Anweisungen Informationen zu allen Aufnahmen eines Videos in einem Aufnahmekatalog. Der Aufnahmekatalog befindet sich in einer Datenbank.

SQLHDBC      hdbc;
SQLHENV      henv;
DBvIOType      *video;
DBvShotControl    shotCtrl;
DBvStoryBoardCtrl    sbCtrl;

sbCtrl>thresh1=50
sbCtrl>thresh2=500;
sbCtrl>delta=20;

SQLAllocConnect(henv,&hdbc)

rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);

rc=DBvBuildStoryboardTable (
       "hotshots",                /*shot catalog name*/
       video,                     /*pointer to video structure*/
       shotCtrl,                  /*pointer to shot control structure*/
       sbctrl,                    /*pointer to storyboard control structure*/
       hdbc);                     /*database connection handle*/

Die folgenden Anweisungen erstellen eine Aufnahmekatalogdatei und speichern in dieser Datei Informationen zu allen Aufnahmen in einem Video.

DBvIOType      *video;
DBvShotControl    shotCtrl;
DBvStoryBoardCtrl    sbCtrl;

sbCtrl>thresh1=50
sbCtrl>thresh2=500;
sbCtrl>delta=20;

rc=DBvBuildStoryboardFile (
       "hotshots",                /*shot catalog file name*/
       video,                     /*pointer to video structure*/
       shotCtrl,                  /*pointer to shot control structure*/
       sbctrl);                   /*pointer to storyboard control structure*/

Storyboard erstellen

Wie ihre Namen implizieren, sind die APIs DBvBuildStoryboardTable und DBvBuildStoryboardFile besonders geeignet, Informationen zu speichern, die in einem Storyboard verwendet werden sollen. Ein Storyboard ist eine visuelle Zusammenfassung eines Videos. Sie können ein Storyboard erstellen, indem Sie die repräsentativen Vollbilder anzeigen, die für ein Video in einem Aufnahmekatalog gespeichert wurden.

Die APIs DBvBuildStoryboardTable und DBvBuildStoryboardFile speichern ein oder mehrere repräsentative Vollbilder für eine Aufnahme. Die Werte, die Sie in der Struktur DBvStoryboardCtrl angeben, steuern die Anzahl der repräsentativen Vollbilder, die für eine Aufnahme speichert werden, und steuern, welche Vollbilder verwendet werden. Die Definition der Struktur DBvStoryboardCtrl befindet sich im Abschnitt Datenstrukturen bei der Aufnahmeermittlung. Die folgende Abbildung zeigt, wie die Werte in den DBvStoryboardCtrl-Feldern verwendet werden.

Abbildung 23. Verwendungsweise der Werte in der Struktur DBvStoryboardCtrl


REQTEXT


Die Die Abbildung zeigt folgendes:

Jede Aufnahme kann als kurze Aufnahme verarbeitet werden, wenn der Wert Schwelle1 oder Schwelle2 auf -1 gesetzt wird. In diesem Fall wird nur ein repräsentatives Vollbild, das mittlere Vollbild, für die Aufnahme im Aufnahmekatalog gespeichert.

Neben den Werten in der Datenstruktur DBvStoryboardCtrl hat eine Reihe von Feldern in der Datenstruktur DBvShotControl Auswirkungen darauf, welche repräsentativen Vollbilder für eine nachfolgende Anzeige in einem Storyboard gespeichert werden. Beispielsweise geben die Felder CorrHistThresh, normalcorrValue und minShotSize in der Datenstruktur DBvShotControl Schwellen für die Aufnahmeermittlung an und beeinflussen somit, welche Vollbilder in einem Storyboard eines Videos angezeigt werden. Wenn Sie die API DBvBuildStoryBoardTable und die API DBvBuildStoryBoardFile verwenden, um Aufnahmeinformationen zur Verwendung in einem Storyboard zu speichern, müssen Sie zunächst einen Testlauf mit den Anfangswerten für die Datenstrukturen DBvStoryBoardCtrl und DBvShotControl ausführen. Sie können dann Ihre Ergebnisse optimieren, indem Sie die Werte in den verschiedenen Feldern dieser Datenstrukturen ändern.

Storyboard anzeigen

Sie können ein Programm erstellen, mit dem ein Storyboard angezeigt wird. Sie greifen dazu auf die repräsentativen Vollbilder zu, die in einem Aufnahmekatalog für ein Video gespeichert sind. Wenn die API DBvBuildStoryboardFile zum Speichern der Aufnahmen für das Video verwendet wurde, zeigt die Aufnahmekatalogdatei auf GIF-Dateien für die repräsentativen Vollbilder. Sie können diese GIF-Dateien mit Hilfe eines geeigneten Browsers oder Anzeigeprogramms anzeigen.

Wenn die API DBvBuildStorybBoardTable zum Speichern der Aufnahmen für das Video verwendet wurde, enthält der Aufnahmekatalog (der in einer Datenbank gespeichert ist) die Daten für die repräsentativen Vollbilder. Sie können auf die Daten von repräsentativen Vollbildern in der Aufnahmekatalogsicht zugreifen (eine Beschreibung der Sicht befindet sich in Tabelle 12). Die Daten von repräsentativen Vollbildern sind im YUV-Format. Dabei handelt es um ein Format, das von den meisten Programmen zur Abbildanzeige nicht angezeigt werden kann. Um die repräsentativen Vollbilder anzuzeigen, können Sie die Vollbilddaten mit Hilfe der API DBvFrameDatato24BitRGB (wie in Abgerufenes Vollbild anzeigen beschrieben) umsetzen. Sie können anschließend die repräsentativen Vollbilder mit Hilfe eines geeigneten Browsers oder Anzeigeprogramms anzeigen.

Storyboard-Beispielprogramme

Das Unterverzeichnis SAMPLES enthält zwei Beispielprogramme, die das Erstellen und Anzeigen eines Storyboards für ein Video demonstrieren. Ein Beispielprogramm, in der Datei MAKESF.EXE, verwendet die API DBvBuildStoryBoardFile, um eine Aufnahmekatalogdatei zu erstellen und Aufnahmedaten in der Datei zu speichern. Das andere Beispielprogramm, MAKEHTML.EXE, greift auf die Aufnahmekatalogdatei zu und erstellt HTML-Seiten für die Anzeige durch einen Web-Browser.

Kommentar für eine Aufnahme angeben (nur Datenbank)

Sie können einen Kommentar angeben, der mit den anderen Informationen für eine Aufnahme in einem Aufnahmekatalog gespeichert werden soll. Verwenden Sie die API DBvSetShotComment, um den Kommentar anzugeben.

Wenn Sie die API verwenden, müssen Sie den Namen des Aufnahmekatalog angeben, in dem der Kommentar gespeichert werden soll, die Kennung der Aufnahme, zu der der Kommentar hinzugefügt werden soll, sowie den Kommentar. Außerdem müssen Sie die Kennung für die Datenbankverbindung angeben, die durch den SQLConnect-Aufruf zur Datenbank zurückgegeben wird. Beispielsweise fügen die folgenden Anweisungen einen Kommentar für eine Aufnahme (die mit der Vollbildnummer 85 beginnt) zum Aufnahmekatalog 'hotshots' hinzu:

SQLHDBC      hdbc;
SQLHENV      henv;
char shothandle[37];

SQLAllocConnect(henv,&hdbc)

rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);

EXEC SQL SELECT shothandle INTO :shothandle
  FROM mmdbsys.svhotshots
  WHERE startframe=85;

rc=DBvSetShotComment (
        "hotshots",                      /*shot catalog name*/
        shothandle,                    /*shot handle*/
        "shot of beach at sunset",       /*comment*/
        hdbc);                  /*database connection handle*/

Gespeicherte Informationen für eine Aufnahme ändern (nur Datenbank)

Sie können die Information, die für eine Aufnahme in einem Aufnahmekatalog gespeichert sind, ändern. Verwenden Sie dazu die API DBvUpdateShot. Stellen Sie die Ersetzungsinformationen in eine Struktur DBvShotType. Sie müssen außerdem Informationen für die übrigen Felder angeben, auch wenn diese unverändert bleiben. Wenn Sie die API DBvUpdateShot verwenden, geben Sie den Namen des Katalogs und einen Zeiger auf die Struktur DBvShotType an. Außerdem müssen Sie die Kennung für die Datenbankverbindung angeben, die durch den SQLConnect-Aufruf zur Datenbank zurückgegeben wird.

Wenn Sie die Informationen für die Aufnahme ändern, haben Sie die Möglichkeit, den Kommentar, der (falls vorhanden) mit den Informationen gespeichert ist, zu ändern. Wenn Sie den Kommentar ändern wollen, geben Sie ihn in der Struktur DBvShotType an. Wenn Sie den alten Kommentar beibehalten wollen, geben Sie einen Nullwert in der Struktur DBvShotType an.

Beispielsweise ändern die folgenden Anweisungen die Informationen, die für eine Aufnahme im Katalog 'hotshots' gespeichert sind; die Aufnahme beginnt bei Vollbildnummer 85:

SQLHDBC      hdbc;
SQLHENV      henv;
char shothandle[37];
DBvShotType    shot;
DBvFrameData  fd110;

/* get shot handle */

EXEC SQL SELECT shothandle INTO :shothandle
  FROM mmdbsys.svhotshots
  WHERE startframe=85;

/* change shot attribute */

shot.startFrame=110;
shot.endFrame=200;
shot.repframe=110;
shot.fd=fd110;
shot.comment=NULL;

/* update shot information */

SQLAllocConnect(henv,&hdbc)

rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);

rc=DBvUpdateShot (
        "hotshots",                     /*shot catalog name*/
        shot,                           /*shot information*/
        hdbc);                  /*database connection handle*/

Mischen von Aufnahmeinformationen in einem Aufnahmekatalog (nur Datenbank)

Sie können die Informationen, die für zwei Aufnahmen in einem Aufnahmekatalog gespeichert sind, mischen. Wenn Sie Aufnahmeinformationen mischen, geben Sie eine Reihenfolge an, indem Sie eine erste und eine zweite Aufnahme kennzeichnen. Die Anfangsvollbildnummer der ersten Aufnahme wird als Anfangsvollbildnummer der gemischten Aufnahme gespeichert. Die Nummer des größten Vollbilds zwischen der ersten und zweiten Aufnahme wird als Endvollbildnummer der gemischten Aufnahme gespeichert. Beim Mischen werden die Informationen, die für die erste Aufnahme gespeichert sind, durch die Informationen für die gemischte Aufnahme ersetzt. Die Informationen, die für die zweite Aufnahme gespeichert sind, werden aus dem Aufnahmekatalog gelöscht.

Verwenden Sie die API DBvMergeShots, um die Informationen für zwei Aufnahmen in einem Aufnahmekatalog zu mischen. Wenn Sie die API verwenden, geben Sie den Namen des Aufnahmekatalogs, gefolgt von den Kennungen der ersten und zweiten Aufnahme an, die gemischt werden sollen. Außerdem müssen Sie die Kennung für die Datenbankverbindung angeben, die durch den SQLConnect-Aufruf zur Datenbank zurückgegeben wird. Beispielsweise mischen die folgenden Anweisungen die Informationen, die für zwei Aufnahmen im Katalog 'hotshots' gespeichert sind; die erste Aufnahme beginnt bei Vollbildnummer 85, und die zweite Aufnahme beginnt bei Vollbildnummer 210:

SQLHDBC      hdbc;
SQLHENV      henv;
char shothandle1[37];
char shothandle2[37];

EXEC SQL SELECT shothandle INTO :shothandle1
  FROM mmdbsys.svhotshots1
  WHERE startframe=85;

EXEC SQL SELECT shothandle INTO :shothandle2
  FROM mmdbsys.svhotshots2
  WHERE startframe=210;

SQLAllocConnect(henv,&hdbc)

rc = SQLConnect(hdbc,"hotshots",SQL_NTS,id,SQL_NTS,password,SQL_NTS);

rc=DBvMergeShots (
        "hotshots",                    /*shot catalog name*/
        shothandle1,                   /*shot handle for first shot*/
        shothandle2,                   /*shot handle for second shot*/
        hdbc);                  /*database connection handle*/

Aufnahmeinformationen aus einem Aufnahmekatalog löschen (nur Datenbank)

Verwenden Sie die API DBvDeleteShot, um Informationen zu einer Aufnahme aus dem Aufnahmekatalog zu löschen. Wenn Sie die API verwenden, geben Sie den Namen des Aufnahmekatalogs, gefolgt von der Aufnahmekennung an. Außerdem müssen Sie die Kennung für die Datenbankverbindung angeben, die durch den SQLConnect-Aufruf zur Datenbank zurückgegeben wird. Beispielsweise löschen die folgenden Anweisungen die Informationen zu einer Aufnahme (die bei Vollbildnummer 85 beginnt) aus dem Aufnahmekatalog 'hotshots':

SQLHDBC      hdbc;
SQLHENV      henv;
char shothandle[37];

EXEC SQL SELECT shothandle INTO :shothandle
  FROM mmdbsys.svhotshots
  WHERE startframe=85;

rc=DBvDeleteShot (
        "hotshots",                    /*shot catalog name*/
        shothandle,                    /*shot handle*/
        hdbc);                  /*database connection handle*/

Aufnahmekatalog löschen (nur Datenbank)

Verwenden Sie die API DBvDeleteShotCatalog, um einen Aufnahmekatalog zu löschen. Wenn Sie die API verwenden, geben Sie den Namen des zu löschenden Aufnahmekatalogs und die Kennung für die Datenbankverbindung an, die durch den SQLConnect-Aufruf zur Datenbank zurückgegeben wird. Beispielsweise löscht die folgende Anweisung den Aufnahmekatalog 'hotshots':

SQLHDBC      hdbc;
SQLHENV      henv;

rc=DBvDeleteShotCatalog (
        "hotshots",             /*shot catalog name*/
        hdbc);                  /*database connection handle*/


[ Seitenanfang | Vorherige Seite | Nächste Seite | Inhaltsverzeichnis | Index ]

Search the DB2 Extender Books