Définition des propriétés sur les effets et les transitions

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

[Cette API n’est pas prise en charge et peut être modifiée ou indisponible à l’avenir.]

De nombreux effets et transitions directShow Editing Services prennent en charge les propriétés qui contrôlent leur comportement. Une application peut définir la valeur d’une propriété à l’aide de l’interface IPropertySetter . L’effet sous-jacent ou l’objet de transition doit prendre en charge IDispatch pour définir les propriétés. Avec les effets vidéo et les transitions, l’application peut définir une plage de valeurs qui changent au fil du temps. (Par exemple, vous pouvez définir une transition de réinitialisation pour se déplacer dans le cadre.) Avec les effets audio, la valeur de la propriété est statique et ne peut pas changer au fil du temps. La seule exception est l’effet Enveloppe du volume , qui prend en charge une propriété dynamique pour le niveau de volume.

Pour définir une propriété, procédez comme suit.

  1. Créez un instance de la propriété setter (CLSID_PropertySetter).
  2. Remplissez DEXTER_PARAM et DEXTER_VALUE structures avec les données de propriété. Ces structures sont décrites ci-dessous.
  3. Passez les structures DEXTER_PARAM et DEXTER_VALUE à la méthode IPropertySetter::AddProp .
  4. Répétez les étapes 2 et 3 pour chaque propriété que vous souhaitez définir.
  5. Passez le pointeur d’interface IPropertySetter à la méthode IAMTimelineObj::SetPropertySetter .

La structure DEXTER_PARAM spécifie quelle propriété est définie. Il contient les membres suivants.

  • Nom : nom de la propriété
  • dispID : réservé, doit être égal à zéro
  • nValues : nombre de valeurs

La structure DEXTER_VALUE spécifie la valeur d’une propriété à un moment donné. Il contient les membres suivants.

  • v : type VARIANT qui spécifie une nouvelle valeur pour la propriété . Le membre vt de ce VARIANT définit le type de données de la propriété . Pour plus d’informations sur le type VARIANT , consultez le Kit de développement logiciel (SDK) Windows.
  • rt : heure de référence à laquelle la propriété suppose cette valeur, par rapport à l’heure de début de l’effet ou de la transition. L’heure de début de l’effet ou de la transition est relative à l’heure de début de son objet parent.
  • dwInterp : indicateur qui spécifie comment la propriété passe de la valeur précédente à la nouvelle valeur. Avec l’indicateur DEXTERF_JUMP, la propriété passe instantanément à la nouvelle valeur à l’heure spécifiée. Avec l’indicateur DEXTERF_INTERPOLATE, la propriété est interpolée linéairement à partir de la valeur précédente.

Si vous définissez le membre vt sur VT_BSTR, la propriété setter effectue toutes les conversions nécessaires. Pour les valeurs à virgule flottante, incluez le zéro de début avant la décimale. Par exemple, 0.3, et non .3.

Notes

Les applications doivent éviter de s’appuyer sur la conversion de BSTRen valeurs numériques. Si la propriété a une valeur numérique, il est possible d’utiliser le type VARIANT numérique approprié.

 

La valeur d’une propriété peut changer au fil du temps, de sorte que la méthode IPropertySetter::AddProp prend une structure de DEXTER_PARAM unique et un pointeur vers un tableau de structures DEXTER_VALUE . Le tableau définit un ensemble de valeurs temporelles pour la propriété . Les membres du tableau doivent être dans l’ordre temporel croissant, et le membre nValues de la structure DEXTER_PARAM doit être égal à la longueur du tableau.

L’exemple de code suivant crée des données de propriété pour la transition de réinitialisation SMPTE . Il définit le code de réinitialisation sur 120, ce qui crée une réinitialisation ovale. Il définit l’heure de référence sur zéro, indiquant le début de la transition.

IPropertySetter     *pProp;   // Property setter
IAMTimelineObj      *pTransObj;  // Transition object
// Create an SMPTE Wipe transition object. (Not shown)

hr = CoCreateInstance(CLSID_PropertySetter, NULL, CLSCTX_INPROC_SERVER,
    IID_IPropertySetter, (void**) &pProp);

// Error checking is omitted for clarity...

DEXTER_PARAM param;
DEXTER_VALUE *pValue = (DEXTER_VALUE*)CoTaskMemAlloc(sizeof(DEXTER_VALUE));

// Initialize the parameter. 
param.Name = SysAllocString(L"MaskNum");
param.dispID = 0;
param.nValues = 1;

// Initialize the value.
pValue->v.vt = VT_I4;
pValue->v.lVal = 120; // Oval
pValue->rt = 0;
pValue->dwInterp = DEXTERF_JUMP;

pProp->AddProp(param, pValue);

// Free allocated resources.
SysFreeString(param.Name);
VariantClear(&(pValue->v));
CoTaskMemFree(pValue);

// Set the property on the transition.
pTransObj->SetPropertySetter(pProp);
pProp->Release();

Modification dynamique des propriétés

Après avoir rendu un projet d’édition vidéo, il est possible de modifier les propriétés d’un objet d’effet ou de transition pendant l’exécution du graphique. Toutefois, cela n’est possible que si vous définissez des propriétés sur cet objet avant l’application appelée IRenderEngine::ConnectFrontEnd. Dans ce cas, vous pouvez appeler IAMTimelineObj::GetPropertySetter sur l’effet ou la transition, effacer ou modifier les propriétés, et les modifications se produisent dynamiquement pendant l’exécution du graphique. Il peut y avoir des anomalies visuelles pendant que la modification se produit. Cela est donc recommandé uniquement pour la préversion. Ne modifiez pas les propriétés pendant l’écriture du projet dans un fichier.

Si vous n’avez défini aucune propriété sur l’objet d’effet ou de transition avant d’appeler ConnectFrontEnd, vous ne pouvez pas y ajouter de propriétés pendant l’exécution du graphe.

Utilisation des effets et des transitions