Genre Filterの考察っぽいもの Part2 [PC関連]
先のエントリで頂いた,コメントで…
ジャンルデータを少し変更しようかと考えています。
・ジャンルを6個まで取得
・拡張ジャンルを取得
"おぉ,そんなことが出来るんだ!" って,事で,まねごとをしてみました。
まぁ,当然,にわか野郎がやる事,タダでは済まない… ですね。。。
2018/04/14 追記
なんか内容があんまりな感じなので,ちょっと加筆調整しました。
2018/04/15 13:25 追記
Tvmaid『中の人』様へ
遅ればせながら,差分のブツはこちら。 パスはいつものです。
ブツを解凍後,今までのソースに被せてください。
詳しくは,添付の"mod履歴.md"をご覧ください。
新しい genre*.def
は ¥default
以下に入っています。
で,まぁ,今回も色々と,ポンコツっぷりを発揮しました。
- ジャンルのマッピングをどうしましょ
コメントを頂いた通り,CS拡張ジャンルは,3種類(スポーツ/洋画/邦画)有って,映画は1つにまとめられるかなぁ〜と思ったのですが,確かに微妙な違いが… - int64でビットシフトに失敗
data += 0xff << (i * 8);
な時って,右辺も0xffLLって付けないとダメなのね… - プラグインのデバック方法がよくわかんない orz
方法 : DLL プロジェクトからデバッグする を見て適当にやっつけた(笑
もう,説明するより,見てもらったほうが早いですね。
# 多分… そうなら良いな… どうか察してください(爆
まずは,TVTestのプラグイン側の,ジャンルを取得する部分に,細工を施します。
ここで,拡張ジャンルをマッピングし直します。
void GetEvents()
{
:
// 7つ目の引数を'I64d'へ
sharedOut->Write(L"%d\x2" L"%s\x2" L"%d\x2" L"%s\x2" L"%s\x2" L"%s\x2" L"%I64d\x2" L"%d\x1",
:
}
int64 GetGenre(EpgEventInfo* event)
{
// 戻り値をuintからint64へ
int64 data = 0;
for (int i = 0; i < 6; i++)
{
if (i < event->ContentListLength)
{
EpgEventContentInfo* info = event->ContentList + i;
uint level1 = info->ContentNibbleLevel1;
uint level2 = info->ContentNibbleLevel2;
if (level1 == 0xE && level2 == 0x0) {
// BS デジタル放送用番組付属情報
// 0xE(拡張)に,ARIB-TR-B14 Vol.4 Sec.4 Appendix Bをマッピング
level2 = info->UserNibble2; // 流動編成関連付属情報(0x0)
level2 += info->UserNibble1 == 0x1 ? 0x8 : 0; // デジタル番組特性情報の時(0x1)
}
else if (level1 == 0xE && level2 == 0x1)
{
// 広帯域 CS デジタル放送拡張用情報
// 0xC/0xD(予備)に,ARIB-TR-B15 Part 2 Vol.4 Appendix Aをマッピング
level1 = info->UserNibble1 == 0x0 ? 0xC : 0xD; // "拡張"のスポーツ,映画を"予備"へマッピング
level2 = info->UserNibble2;
// 洋画/邦画の差分を再マップ("青春/学園/アイドル"と"任侠/時代劇"を0xDD,0xDEへ)
if (info->UserNibble1 == 0x2) {
if (level2 == 0x6 || level2 == 0x7)
level2 += 0x7;
}
}
int64 genre = (level1 << 4) + level2;
data += genre << (i * 8);
}
else
data += 0xffLL << (i * 8);
}
return data;
}
maid側もジャンルを6個,取得する様にします。
AppDefine.cs public string GetText(long data)
{
var text = "";
for (var i = 0; i < 6; i++) // 4 -> 6
:
:
WebUIの方も調整…
util.js getFirstClass: function (genres)
{
// オリジナルに戻しました。
var id = (genres & 0xf0) >> 4
return this.getClass(id)
},
getClass: function (id)
{
var arr =
{
0xC: "sports", // genre-etc
0xD: "movie", // genre-etc
:
:
},
getText: function (id)
{
var arr =
{
0xC: "スポーツ(CS)", // 予備
0xD: "映画(CS)", // 予備
:
:
},
genre1.defの"予備"に拡張ジャンル名を付けておきます。
上記,util.jsと合わせておきます。
0xC=スポーツ(CS)
0xD=映画(CS)
genre2.defの"予備"に拡張ジャンルを押し込みます。
洋画と邦画の差分を,空いているコード(0xDD,0xDE)へ再マッピング。
0xC0=テニス
0xC1=バスケットボール
0xC2=ラグビー
0xC3=アメリカンフットボール
0xC4=ボクシング
0xC5=プロレス
0xCF=その他
0xD0=アクション
0xD1=SF/ファンタジー
0xD2=コメディー
0xD3=サスペンス/ミステリー
0xD4=恋愛/ロマンス
0xD5=ホラー/スリラー
0xD6=ウエスタン
0xD7=ドラマ/社会派ドラマ
0xD8=アニメーション
0xD9=ドキュメンタリー
0xDA=アドベンチャー/冒険
0xDB=ミュージカル/音楽映画
0xDC=ホームドラマ
0xDD=青春/学園/アイドル
0xDE=任侠/時代劇
0xDF=その他
0xE0=中止の可能性あり
0xE1=延長の可能性あり
0xE2=中断の可能性あり
0xE3=同一シリーズの別話数放送の可能性あり
0xE4=編成未定枠
0xE5=繰り上げの可能性あり
0xE8=中断ニュースあり
0xE9=当該イベントに関連する臨時サービスあり
0xEF=
これで,event-panelなどで
映画(CS)/アクション
映画/洋画
な,感じの表示になります。
同様に,ジャンルカラーも,うまく動作している様です。
コメント 0