Win32 API 日本語リファレンス
ホームMedia.DirectShow.Tv › IEvalRat

IEvalRat

COMIDispatch (デュアル)
IDispatch を実装(デュアルインターフェース)。HSP では comobj 経由でメソッド名による遅延バインド呼び出しができます(vtableインデックス不要)。
IIDc5c5c5b1-3abc-11d6-b25b-00c04fa0c026継承元IDispatch呼び出し名前(IDispatch) または vtbl自前メソッド開始 vtbl7

公式ドキュメント

IEvalRat インターフェースは、放送ストリームに含まれるコンテンツのレーティングを評価するために使用します。

解説(Remarks)

このインターフェースのインターフェース識別子 (IID) を宣言するには、__uuidof 演算子を使用します: __uuidof(IEvalRat)

メソッド 6

vtbl = vtable インデックス(0始まり)。IDispatch 実装のため HSP ではメソッド名でも呼べます(上記)。低レベルの index 呼び出し用に vtbl も掲載。0〜2 は IUnknown。

vtbl 7 HRESULT get_BlockedRatingAttributes(EnTvRat_System enSystem, EnTvRat_GenericLevel enLevel, INT* plbfAttrs)

get_BlockedRatingAttributes メソッドは、指定されたレーティングシステムおよびレーティングレベルに対してコンテンツがブロックされるかどうかを判定します。

enSystemEnTvRat_Systeminレーティングシステムを EnTvRat_System 列挙型として指定します。
enLevelEnTvRat_GenericLevelinレーティングレベルを EnTvRat_GenericLevel 列挙型として指定します。この値の意味はレーティングシステムによって異なります。
plbfAttrsINT*out[out, retval] BfEnTvRat_GenericAttributes 列挙体のフラグのビット単位の組み合わせを受け取ります。これらのフラグは、レーティング全体がブロックされるか、またはレーティング内の特定の属性がブロックされるかを示します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。

戻り値 説明
E_INVALIDARG
引数が無効です。
E_POINTER
NULL ポインター引数です。
S_OK
メソッドが成功しました。

解説(Remarks)

BfIsBlocked フラグが設定されている場合、指定されたレーティングレベルを持つすべてのコンテンツがブロックされます。BfIsAttr_X フラグのいずれかが設定されている場合、そのレーティングレベルおよび属性を持つコンテンツがブロックされます。

vtbl 8 HRESULT put_BlockedRatingAttributes(EnTvRat_System enSystem, EnTvRat_GenericLevel enLevel, INT lbfAttrs)

put_BlockedRatingAttributes メソッドは、指定されたレーティングを持つコンテンツをブロックするかどうかを指定します。

enSystemEnTvRat_Systeminレーティングシステムを EnTvRat_System 列挙型として指定します。
enLevelEnTvRat_GenericLevelinレーティングレベルを EnTvRat_GenericLevel 列挙型として指定します。この値の意味はレーティングシステムによって異なります。
lbfAttrsINTinBfEnTvRat_GenericAttributes 列挙体の 0 個以上のフラグのビット単位の組み合わせです。これらのフラグは、レーティング全体をブロックするか、またはレーティング内の特定の属性をブロックするかを指定します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。

戻り値 説明
S_OK
メソッドが成功しました。

解説(Remarks)

このメソッドは、レーティングシステム内の各レベルに対する視聴許可を指定するために、レベルごとに 1 回呼び出す必要があります。lbfAttrs パラメーターは、指定されたレーティングレベルに対する許可を示します:

vtbl 9 HRESULT get_BlockUnRated(BOOL* pfBlockUnRatedShows)

get_BlockUnRated メソッドは、レーティング情報を持たない番組がブロックされるかどうかを示します。

pfBlockUnRatedShowsBOOL*outBoolean 値を受け取ります。値が TRUE の場合、レーティングのない番組はブロックされます。それ以外の場合はブロックされません。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。

戻り値 説明
E_POINTER
NULL ポインター引数です。
S_OK
メソッドが成功しました。

解説(Remarks)

Note 既定では、レーティングのない番組は許可される必要があります。put_BlockUnRated メソッドが以前に値 TRUE で呼び出されていない限り、pfBlockUnRatedShowsFALSE を返してください。
vtbl 10 HRESULT put_BlockUnRated(BOOL fBlockUnRatedShows)

put_BlockUnRated メソッドは、レーティング情報が取得されていない番組をブロックするかどうかを指定します。

fBlockUnRatedShowsBOOLinBoolean 値です。レーティングのない番組をブロックするには TRUE を指定し、ブロックしないようにするには FALSE を指定します。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。

戻り値 説明
S_OK
メソッドが成功しました。
vtbl 11 HRESULT MostRestrictiveRating(EnTvRat_System enSystem1, EnTvRat_GenericLevel enEnLevel1, INT lbfEnAttr1, EnTvRat_System enSystem2, EnTvRat_GenericLevel enEnLevel2, INT lbfEnAttr2, EnTvRat_System* penSystem, EnTvRat_GenericLevel* penEnLevel, INT* plbfEnAttr)

MostRestrictiveRating メソッドは、2 つのレーティングを比較し、より制限の厳しい方を返します。

enSystem1EnTvRat_Systemin比較する 1 つ目のレーティングのレーティングシステムです。EnTvRat_System 列挙体のメンバーとして指定します。
enEnLevel1EnTvRat_GenericLevelin1 つ目のレーティングのレーティングレベルです。EnTvRat_GenericLevel 列挙体のメンバーとして指定します。
lbfEnAttr1INTin1 つ目のレーティングのコンテンツ属性を、BfEnTvRat_GenericAttributes 列挙体のフラグのビット単位の組み合わせとして指定します。
enSystem2EnTvRat_Systemin比較する 2 つ目のレーティングのレーティングシステムです。EnTvRat_System 列挙体のメンバーとして指定します。
enEnLevel2EnTvRat_GenericLevelin2 つ目のレーティングのレーティングレベルです。EnTvRat_GenericLevel 列挙体のメンバーとして指定します。
lbfEnAttr2INTin2 つ目のレーティングのコンテンツ属性を、BfEnTvRat_GenericAttributes 列挙体のフラグのビット単位の組み合わせとして指定します。
penSystemEnTvRat_System*outより制限の厳しいレーティングのレーティングシステムを受け取ります。
penEnLevelEnTvRat_GenericLevel*outより制限の厳しいレーティングのレーティングレベルを受け取ります。
plbfEnAttrINT*outBfEnTvRat_GenericAttributes 列挙体のフラグのビット単位の組み合わせを受け取ります。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。

戻り値 説明
E_POINTER
NULL ポインター引数です。
S_FALSE
2 つのレーティングは異なるレーティングシステムのものです。
S_OK
メソッドが成功しました。

解説(Remarks)

このメソッドを使用すると、クライアントは 2 つのレーティングのうちどちらがより制限が厳しいかを判定できます。たとえば、MPAA システムでは PG は R よりも制限が厳しくなります。より制限の厳しいレーティングは、penSystempenEnLevelplbfEnAttr の各パラメーターで返されます。

このメソッドが 2 つの異なるレーティングシステムのレーティングを比較する場合、1 つ目のシステムが不明 (TvRat_SystemDontKnow) でない限り、1 つ目のシステムで表現されたレーティングを返します。その場合は、2 つ目のシステムを使用したレーティングを返します。

レーティングシステムが同一でない場合、このメソッドは S_FALSE を返します。2 つのシステム間には正確な対応関係が存在しない場合があります。

vtbl 12 HRESULT TestRating(EnTvRat_System enShowSystem, EnTvRat_GenericLevel enShowLevel, INT lbfEnShowAttributes)

TestRating メソッドは、指定されたレーティングを持つ番組をブロックすべきかどうかを判定します。

enShowSystemEnTvRat_Systeminレーティングシステムを EnTvRat_System 列挙型として指定します。
enShowLevelEnTvRat_GenericLevelinレーティングレベルを EnTvRat_GenericLevel 列挙型として指定します。この値の意味はレーティングシステムによって異なります。
lbfEnShowAttributesINTinBfEnTvRat_GenericAttributes 列挙体の 0 個以上のフラグのビット単位の組み合わせです。これらのフラグは、暴力や成人向けの言葉などのコンテンツ属性を指定します。コンテンツ属性はすべてのレーティングシステムに適用されるわけではありません。

戻り値

このメソッドは HRESULT を返します。取り得る値には次の表に示すものがあります。

戻り値 説明
E_INVALIDARG
引数が無効です。
S_FALSE
この番組は制限されており、ブロックすべきです。
S_OK
この番組は許可されており、ブロックすべきではありません。

解説(Remarks)

アプリケーションは、IEvalRat::put_BlockedRatingAttributes メソッドを通じて視聴許可を設定します。Decrypter/Detagger フィルターは、番組内で新しいレーティングを受け取るたびに TestRating を呼び出して、その番組をブロックするかどうかを判定します。TestRatingS_OK を返す場合、そのレーティングは現在の視聴許可のセットの下で制限されており、Decrypter/Tagger フィルターはその番組をブロックします。

実装に関する注意:

サポートする各レーティングシステムについて、そのシステム内の各レベルに対応するビットマスクを含むテーブルを保持します。オブジェクトの作成時に、各ビットマスクを 0 に初期化します。ビットマスクは put_BlockedRatingAttributes メソッドで更新します。

TestRating メソッドでは、enShowSystem および enShowLevel パラメーターを使用してテーブルルックアップを実行し、対応するビットマスクを取得します。次のいずれかの条件が真である場合は S_FALSE を返します:

ビットマスクのテストにはビット単位の AND を使用します。どちらの条件も真でない場合は S_OK を返します。

次のコードは実装の一例を示しています。オブジェクトが Mask という名前の 2 次元配列にビットマスクを格納していることを前提としています:


if ((0 != Mask[system][level] & BfIsBlocked) || 
    (0 != Mask[system][level] & attributes))
{
    return S_FALSE; // ブロックされます。
}
else
{
    return S_OK; // ブロックされません。
}
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IEvalRat "{C5C5C5B1-3ABC-11D6-B25B-00C04FA0C026}"
#usecom global IEvalRat IID_IEvalRat "{C5C5C5F1-3ABC-11D6-B25B-00C04FA0C026}"
#comfunc global IEvalRat_get_BlockedRatingAttributes  7 int,int,var
#comfunc global IEvalRat_put_BlockedRatingAttributes  8 int,int,int
#comfunc global IEvalRat_get_BlockUnRated             9 var
#comfunc global IEvalRat_put_BlockUnRated             10 int
#comfunc global IEvalRat_MostRestrictiveRating        11 int,int,int,int,int,int,var,var,var
#comfunc global IEvalRat_TestRating                   12 int,int,int
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※#usecom 末尾は CoCreateInstance 用のクラスID(コクラスCLSID, SDKから自動取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※IDispatch 実装。HSP では comobj 経由でメソッド名による呼び出しも可能(vtbl 不要)。