Extensions Image, Audio et Vidéo Administration et programmation

Catalogage des prises de vue

Vous pouvez stocker des informations relatives à une prise de vue dans un catalogue. L'extension Vidéo fournit des API qui permettent de :

Les prises de vue cataloguées fournissent les entrées des storyboards : Une fois que vous avez stocké des informations de prises de vue dans un catalogue (qu'il s'agisse d'une base de données ou d'un fichier), vous pouvez utiliser ces informations dans une application associée aux prises de vue. Par exemple, vous pouvez créer une application qui extrait des images représentatives de toutes les prises de vue d'une séquence vidéo et les affiche dans un storyboard.

Vous ne devez créer un catalogue des prises de vue que pour une base de données : Vous devez créer un catalogue des prises de vue uniquement si vous souhaitez que ce dernier réside dans une base de données. L'extension Vidéo crée automatiquement un fichier catalogue des prises de vue lorsque vous stockez les données des prises de vue d'une séquence vidéo et indiquez que vous souhaitez que la sortie soit placée dans un fichier.

Préalables à la création d'un catalogue (base de données uniquement)

Avant de créer et d'utiliser un catalogue dans une base de données, vous devez effectuer les opérations suivantes :

Création d'un catalogue des prises de vue (base de données uniquement)

Utilisez l'API DBvCreateShotCatalog pour créer un catalogue des prises de vue dans une base de données. L'extension Vidéo crée automatiquement un fichier catalogue des prises de vue lorsque vous stockez les données des prises de vue et indiquez que vous souhaitez que la sortie soit placée dans un fichier. Le catalogue se compose de tables contenant des informations relatives aux prises de vue. Il est possible de faire porter une requête sur une vue des tables à l'aide de SQL. Le Le tableau suivant présente un exemple de colonnes de ce type de vue.

Tableau 12. Colonnes d'une vue de catalogue des prises de vue
Nom de la colonne Type de données Description
SHOTHANDLE CHAR(36) Descripteur de prise de vue
VIDEOHANDLE VARCHAR(254) Descripteur vidéo. Cette colonne ne contient une valeur que si l'objet vidéo est ouvert par l'API DBvOpenHandle.
VIDEOTABLE VARCHAR(254) Table contenant l'objet vidéo. Cette colonne ne contient une valeur que si l'objet vidéo est ouvert par l'API DBvOpenHandle.
VIDEOCOLUMN VARCHAR(254) Colonne de la table contenant l'objet vidéo. Cette colonne ne contient une valeur que si l'objet vidéo est ouvert par l'API DBvOpenHandle.
VIDEOFILE VARCHAR(254) Nom du fichier vidéo. Cette colonne ne contient une valeur que si l'objet vidéo est ouvert par l'API DBvOpenFile.
STARTFRAME INTEGER Numéro de la première image
ENDFRAME INTEGER Numéro de la dernière image
REPFRAME INTEGER Numéro de l'image représentative
REPFRAMEDATA DB2IMAGE Données de l'image représentative
COMMENTS LONG VARCHAR Commentaire

Vous avez le choix du nombre de catalogues des prises de vue créés dans une base de données et des prises de vue pour lesquelles vous stockez des informations dans chaque catalogue. Vous pouvez créer un catalogue pour les informations concernant plusieurs séquences vidéos, stocker les informations relatives à chaque séquence vidéo dans des catalogues séparés ou stocker les informations concernant plusieurs prises de vue d'une même séquence vidéo dans plusieurs catalogues.

Lorsque vous utilisez l'API, vous devez indiquer le nom du catalogue. Les noms comportant plus de 16 caractères sont tronqués. Vous devez également préciser le descripteur de connexion à la base de données renvoyé par l'appel SQLConnect à la base de données. Par exemple, les instructions suivantes permettent de créer un catalogue appelé cinéma :

auto width=110.SQLHDBC      hdbc;
 
rc = SQLConnect(hdbc,"cinéma",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvCreateShotCatalog(
                "cinéma",        /* nom du catalogue des prises de vue */
       hdbc);                    /* descripteur de connexion à la base de données */

Les vues du catalogue des prises de vue sont appelées MMDBSYS.SVnomcat, (nomcat est le nom du catalogue des prises de vue). Par exemple, une vue du catalogue "cinéma" s'appelle MMDBSYS.SVCINEMA.

Stockage d'informations relatives à une prise de vue unique (base de données uniquement)

L'API DBvInsertShot permet de stocker des informations relatives à une prise de vue unique dans un catalogue. Vous ne pouvez stocker des informations relatives à une prise de vue d'une séquence vidéo que si le catalogue des prises de vue est stocké dans une base de données. Ces informations comprennent les éléments suivants :

Aucun commentaire concernant la prise de vue n'est stocké. Pour savoir comment ajouter un commentaire aux informations de prise de vue stockées, reportez-vous à la section Spécification d'un commentaire relatif à une prise de vue (base de données uniquement).

Lorsque vous utilisez l'API DBvInsertShot, vous devez définir le nom du catalogue des prises de vue et un pointeur sur la prise de vue. Pour positionner le pointeur sur la prise de vue, vous pouvez extraire la prise de vue suivante, comme indiqué à la section Extraction d'une prise de vue. Vous devez également préciser le descripteur de connexion à la base de données renvoyé par l'appel SQLConnect à la base de données. Par exemple, les instructions suivantes permettent d'extraire la prise de vue qui suit l'image 1 et de stocker des informations sur la prise de vue dans un catalogue appelé cinéma :

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,"cinéma",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvDetectShot(
                vidéo,
       start_frame,
       &shotDetected,
       &shotCtrl,
       &shot)
        
rc=DBvInsertShot (
        "cinéma",                      /*nom du catalogue des prises de vue*/
       shot,                      /*pointeur sur la prise de vue*/
        hdbc);                  /*descripteur de connexion à la base*/
                                /*de données*/

Stockage d'informations relatives à toutes les prises de vue d'une séquence vidéo

Les API DBvBuildStoryboardTable ou DBvBuildStoryboardFile permettent de stocker dans un catalogue des informations relatives à toutes les prises de vue d'une séquence vidéo. L'API DBvBuildStoryboardTable stocke les informations dans un catalogue des prises de vue résidant dans une base de données. L'API DBvBuildStoryboardFile crée un fichier catalogue des prises de vue et y stocke les informations associées.

Pour ces deux API, la séquence vidéo source peut se trouver dans une table de base de données ou dans un fichier.

Lorsque vous utilisez l'une de ces API, vous devez :

Pour l'API DBvBuildStoryboardTable uniquement, vous devez aussi préciser le descripteur de connexion à la base de données renvoyé par l'appel SQLConnect à la base de données.

Par exemple, les instructions suivantes permettent de stocker les informations relatives à toutes les prises de vue d'une séquence vidéo dans un catalogue. Ce dernier se trouve dans une base de données.

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,"cinéma",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvBuildStoryboardTable (
        "cinéma",                      /*nom du catalogue des prises de vue*/
       video,                     /*pointeur sur la structure vidéo*/
       shotCtrl,                  /*pointeur sur la structure de contrôle */
                                  /*de prises de vue*/
       sbctrl,                    /*pointeur sur la structure de storyboard*/
        hdbc);                    /*descripteur de connexion à la base*/
                                  /*de données*/

Les instructions suivantes permettent de créer un fichier catalogue des prises de vue et d'y stocker les informations relatives à toutes les prises de vue d'une séquence vidéo :

DBvIOType    *video;
DBvShotControl    shotCtrl;
DBvStoryBoardCtrl    sbCtrl;
 
sbCtrl>thresh1=50
sbCtrl>thresh2=500;
sbCtrl>delta=20;
 
rc=DBvBuildStoryboardFile (
       "cinéma",             /*nom du catalogue des prises de vue*/
       video,                /*pointeur sur la structure vidéo*/
       shotCtrl,             /*pointeur sur la structure de contrôle */
                             /*de prises de vue*/
       sbctrl);              /*pointeur sur la structure de contrôle de storyboard*/

Création d'un storyboard

Comme leur nom l'indique, les API DBvBuildStoryboardTable et DBvBuildStoryboardFile sont particulièrement utiles pour le stockage d'informations qui seront utilisées dans un storyboard. Un storyboard est une synopsis visuelle d'une séquence vidéo. Vous créez un storyboard en affichant les images représentatives stockées pour une séquence vidéo dans un catalogue des prises de vue.

Les API DBvBuildStoryboardTable API et DBvBuildStoryboardFile permettent de stocker une ou plusieurs images représentatives d'une prise de vue. Les valeurs que vous indiquez dans la structure DBvStoryboardCtrl contrôlent le nombre d'images représentatives stockées pour une prise de vue, ainsi que le choix des images qui seront utilisées. Pour connaître la définition de la structure DBvStoryboardCtrl, reportez-vous à la section Structure des données de détection de prises de vue. La La figure suivante indique comment sont utilisées les valeurs des zones DBvStoryboardCtrl.

Figure 23. Utilisation des valeurs de la structure DBvStoryboardCtrl


REQTEXT


Comme l'illustre la par la figure :

Toute prise de vue peut être traitée comme une prise courte si la valeur de thresh1 ou de thresh2 est définie par -1. Dans ce cas, une seule image représentative, l'image médiane, est stockée pour la prise de vue dans le catalogue.

Outre les valeurs contenues dans la structure de données DBvStoryboardCtrl, plusieurs zones de la structure DBvShotControl ont une incidence sur le choix d'images représentatives stockées en vue de leur affichage ultérieur dans un storyboard. Les zones CorrHistThresh, normalcorrValue et minShotSize de la structure de données DBvShotControl, par exemple, indiquent des seuils pour la détection de prises de vue. Elles influent donc sur le choix d'images qui seront affichées dans le storyboard d'une séquence vidéo. Lorsque vous utilisez les API DBvBuildStoryBoardTable et DBvBuildStoryBoardFile pour stocker des informations de prises de vue qui seront utilisées dans un storyboard, vous pouvez lancer un essai en utilisant les valeurs initiales des structures de données DBvStoryBoardCtrl et DBvShotControl. Vous affinerez ensuite les résultats en modifiant les valeurs des diverses zones de ces structures.

Affichage d'un storyboard

Vous pouvez créer un programme permettant d'afficher un storyboard. Pour cela, vous accédez aux images représentatives stockées dans un catalogue des prises de vue pour une séquence vidéo. Si l'API DBvBuildStoryboardFile a été utilisée pour stocker les prises de vue de la séquence vidéo, le fichier catalogue des prises de vue pointe sur les fichiers GIF des images représentatives. Ces fichiers peuvent être visualisés via un afficheur ou un programme d'affichage, selon les cas.

Si l'API DBvBuildStorybBoardTable a été utilisée pour stocker les prises de vue de la séquence vidéo, le catalogue des prises de vue (stocké dans une base de données) contient les données des images représentatives. Vous pouvez accéder à ces dernières dans la vue du catalogue des prises de vue (pour une description de la vue, reportez-vous au Tableau 12). Les données de l'image représentative sont au format YUV que la plupart des programmes d'affichage d'images ne peuvent pas exploiter. Pour afficher les images représentatives, vous pouvez convertir les données de l'image à l'aide de l'API DBvFrameDatato24BitRGB, comme indiqué à la section Affichage d'une image extraite. Ces images peuvent ensuite être visualisées via un afficheur ou un programme d'affichage, selon les cas.

Modèles de programmes de storyboard

Le sous-répertoire SAMPLES contient deux modèles de programmes qui indiquent comment créer et afficher un storyboard pour une vidéo. L'un de ces modèles, qui se trouve dans le fichier makesf.exe, utilise l'API DBvBuildStoryBoardFile pour créer un fichier catalogue des prises de vue et y stocker des données de prises de vue. L'autre modèle de programme, makehtml.exe, accède au fichier catalogue et crée des pages HTML qui pourront être affichées par un afficheur Web.

Spécification d'un commentaire relatif à une prise de vue (base de données uniquement)

Vous pouvez préciser un commentaire relatif à une prise de vue, qui est stocké avec d'autres informations connexes dans un catalogue des prises de vue. Pour cela, utilisez l'API DBvSetShotComment.

Lorsque vous utilisez cette API, vous devez préciser le nom du catalogue des prises de vue dans lequel sera stocké le commentaire, le descripteur de la prise de vue à laquelle correspondent le commentaire et le commentaire lui-même. Vous devez également préciser le descripteur de connexion à la base de données renvoyé par l'appel SQLConnect à la base de données. Par exemple, les instructions suivantes permettent d'ajouter un commentaire relatif à une prise de vue (qui commence à l'image nø85) dans un catalogue appelé cinéma :

SQLHDBC      hdbc;
SQLHENV  henv;
char shothandle[37];
 
SQLAllocConnect(henv,&hdbc)
 
rc = SQLConnect(hdbc,"cinéma",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
EXEC SQL SELECT SHOTHANDLE INTO :shothandle
  FROM MMDBSYS.SVHOTSHOTS
  WHERE STARTFRAME=85;
 
rc=DBvSetShotComment (
        "cinéma",               /*nom du catalogue des prises de vue*/
        shothandle,                    /*descripteur de prise de vue*/
        "plage au coucher du soleil",    /*commentaire*/
        hdbc);                  /*descripteur de connexion à la base*/
                                /*de données*/

Modification des informations stockées relatives à une prise de vue (base de données uniquement)

Il est possible de modifier les informations relatives à une prise de vue stockées dans un catalogue. Pour cela, utilisez l'API DBvUpdateShot. Placez les nouvelles informations dans une structure DBvShotType. Vous devez également compléter les zones restantes, même si elles ne sont pas modifiées. Lorsque vous utilisez l'API DBvUpdateShot, précisez le nom du catalogue et un pointeur sur la structure DBvShotType. Vous devez également préciser le descripteur de connexion à la base de données renvoyé par l'appel SQLConnect à la base de données.

Il est possible de modifier le commentaire (le cas échéant) en même temps que les informations relatives à une prise de vue en l'indiquant dans la structure DBvShotType. Pour conserver l'ancien commentaire, indiquez une valeur nulle dans la structure DBvShotType.

Par exemple, les instructions suivantes permettent de modifier les informations relatives à une prise de vue stockées dans un catalogue appelé cinéma (la prise de vue commence à l'image nø85) :

SQLHDBC      hdbc;
SQLHENV  henv;
char shothandle[37];
DBvShotType    shot;
DBvFrameData  fd110;
 
/* extraction du descripteur de prises de vue */
 
EXEC SQL SELECT SHOTHANDLE INTO :shothandle
  FROM MMDBSYS.SVHOTSHOTS
  WHERE STARTFRAME=85;
 
/* modification des attributs de prise de vue */
 
shot.startFrame=110;
shot.endFrame=200;
shot.repframe=110;
shot.fd=fd110;
shot.comment=NULL;
 
/* mise à jour des informations de prise de vue */
 
SQLAllocConnect(henv,&hdbc)
 
rc = SQLConnect(hdbc,"cinéma",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvUpdateShot (
        "cinéma",               /*nom du catalogue des prises de vue*/
        shot,                           /*informations de prise de vue*/
        hdbc);                  /*descripteur de connexion à la base*/
                                /*de données*/

Fusion d'informations de prises de vue dans un catalogue (base de données uniquement)

Il est possible de fusionner les informations relatives à deux prises de vue dans un catalogue. Lorsque vous effectuez cette opération, vous indiquez un ordre de fusion en identifiant la première et la seconde prises de vue. Le numéro de la première image de la première prise de vue est stocké en tant que numéro de la première image de la prise de vue fusionnée. Le plus grand numéro d'image des deux prises de vue est stocké en tant que numéro de la dernière image de la prise de vue fusionnée. Lors d'une fusion, les informations de la première prise de vue sont remplacées par celles de la prise de vue fusionnée et les informations de la seconde prise de vue sont supprimées du catalogue.

Utilisez l'API DBvMergeShots pour fusionner les informations de deux prises de vue dans un catalogue. Vous devez indiquer le nom du catalogue suivi des descripteurs de la première et de la seconde prises de vue à fusionner. Vous devez également préciser le descripteur de connexion à la base de données renvoyé par l'appel SQLConnect à la base de données. Par exemple, les instructions suivantes permettent de fusionner les informations de deux prises de vue dans un catalogue appelé cinéma (la première prise commence à l'image 85 et la seconde à l'image 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,"cinéma",SQL_NTS,id,SQL_NTS,password,SQL_NTS);
 
rc=DBvMergeShots (
        "cinéma",               /*nom du catalogue des prises de vue*/
        shothandle1,                   /*descripteur de la première prise */
        shothandle2,                   /*descripteur de la seconde prise*/
        hdbc);                  /*descripteur de connexion à la base*/
                                /*de données*/

Suppression d'informations de prises de vue dans un catalogue (base de données uniquement)

Pour supprimer des informations relatives à une prise de vue dans un catalogue, utilisez l'API DBvDeleteShot. Vous devez indiquer le nom du catalogue suivi du descripteur de prise de vue. Vous devez également préciser le descripteur de connexion à la base de données renvoyé par l'appel SQLConnect à la base de données. Par exemple, les instructions suivantes permettent de supprimer des informations relatives à une prise de vue (qui commence à l'image nø 85) dans un catalogue appelé cinéma :

SQLHDBC      hdbc;
SQLHENV  henv;
char shothandle[37];
 
EXEC SQL SELECT shothandle INTO :shothandle
  FROM mmdbsys.svcinéma
  WHERE startframe=85;
 
rc=DBvDeleteShot (
        "cinéma",               /*nom du catalogue des prises de vue*/
        shothandle,                    /*descripteur de prise de vue*/
        hdbc);                  /*descripteur de connexion à la base*/
                                /*de données*/

Suppression d'un catalogue des prises de vue (base de données uniquement)

Pour supprimer un catalogue des prises de vue, utilisez l'API DBvDeleteShotCatalog. Vous devez préciser le nom du catalogue à supprimer et le descripteur de connexion à la base de données renvoyé par l'appel SQLConnect à la base de données. Par exemple, les instructions suivantes permettent de supprimer un catalogue appelé cinéma :

SQLHDBC      hdbc;
SQLHENV  henv;
 
rc=DBvDeleteShotCatalog (
        "cinéma",               /*nom du catalogue des prises de vue*/
        hdbc);                  /*descripteur de connexion à la base*/
                                /*de données*/


[ Début de page | Page précédente | Page suivante | Table des matières | Index ]