いつも便利に使わせていただいているkylemcdonaldさん作のofxBlackmagicですが、
DeckLinkを使いHD-SDI 1080iにてキャプチャした画面の色が、どうもおかしい、、、(全体的に輝度が低い感じ)
確認すべくMacからHDMIにて出力(モニター設定のカラーはsRGBを選択)
それをBarco ImagePro2にてHD-SDIに変換後、
BlackMagic UltraScopeに入れてみたら、やはり色があっていない。
波形モニタを見ながら、KyleさんのofxBlackMagic内 ColorConversionDeinterlace.cppを
調整しました。
(github わからんので、folkとかなんやら してません、、、あしからず)
```lang:ColorConversionDeinterlace.cpp
unsigned char map1(float value) {
include "ColorConversionDeinterlace.h"
include
unsigned char clamp(int value) {
if(value > 255) return 255;
if(value < 0) return 0;
return value;
}
unsigned char map(float value) {
float outVal = ((value - 16) / (219) * (255));
/*もともとはfloat outVal = ((value - inputMin) / (inputMax - inputMin) * (outputMax - outputMin) + outputMin); これを簡略
(value - 16)の16はBlackmagicから入ってくる最低値*/
if( outVal > 255 )return 255;
else if( outVal < 0 )return 0;
return outVal;
}
bool yuvReady = false;
unsigned char yuvRed[256][256];
unsigned char yuvGreen[256][256][256];
unsigned char yuvBlue[256][256];
void createYuvLookupTables(){
if(yuvReady) {
return;
}
int yy, uu, vv, ug_plus_vg, ub, vr, val;
for (int y = 0; y < 256; y++) {
for (int v = 0; v < 256; v++) {
yy = y << 8;
vv = v - 128;
vr = vv * 397;
val = (yy + vr) >> 8;
yuvRed[v][y] = map(val);
}
}
for (int y = 0; y < 256; y++) {
for (int u = 0; u < 256; u++) {
for (int v = 0; v < 256; v++) {
yy = y << 8;
uu = u - 128;
vv = v - 128;
ug_plus_vg = uu * 44 + vv * 128;
val = (yy - ug_plus_vg) >> 8;
yuvGreen[u][v][y] = map(val);
}
}
}
for (int y = 0; y < 256; y++) {
for (int u = 0; u < 256; u++) {
yy = y << 8;
uu = u - 128;
ub = uu * 470;
val = (yy + ub) >> 8;
yuvBlue[u][y] = map(val);
}
}
yuvReady = true;
}
//以下は一緒
```
やっていることは、もともと使われていたClampに変わり、mapを制作。
DeckLinkから入って来る色がRGBの255段階で表現すると16から236くらいでした。
これを0-255へマップしています。
またcreateYuvLookupTables()内を波形を見ながら調整しました。
ので、波形合わせにっているので
YUVからRGB変換しているところの数値は、何の後ろ盾もありません。
とにかく波形モニタを見ながら数値調整して行った感じです。
これでDeckLinkでカラーバーをキャプチャした時にほぼしっかり色が出ました。
若干 255段階のローレベルで色のふらつきは出ていますが、概ね 大丈夫そう。
DeckLink付属のソフトウェアでキャプチャすると、色は綺麗に出るので、
きっと、もっとスマートな方法があると思うのですが、、、
ご存知の方いらっしゃいましたら 教えてください。。。。。