mirror of
https://github.com/cmosher01/Epple-II.git
synced 2025-01-01 04:29:18 +00:00
refactor: float->double filters; remove obsolete tv code
This commit is contained in:
parent
2f10890b34
commit
0183c5304f
100
src/analogtv.cpp
100
src/analogtv.cpp
@ -275,21 +275,11 @@ void AnalogTV::drawMonitorColor()
|
|||||||
delete [] rgb;
|
delete [] rgb;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnalogTV::drawMonitorWhite()
|
|
||||||
{
|
|
||||||
drawMonitorMonochrome(colors.c()[A2ColorsObserved::WHITE]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AnalogTV::drawMonitorGreen()
|
void AnalogTV::drawMonitorGreen()
|
||||||
{
|
{
|
||||||
drawMonitorMonochrome(colors.c()[A2ColorsObserved::HIRES_GREEN]);
|
drawMonitorMonochrome(colors.c()[A2ColorsObserved::HIRES_GREEN]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnalogTV::drawMonitorOrange()
|
|
||||||
{
|
|
||||||
drawMonitorMonochrome(colors.c()[A2ColorsObserved::HIRES_ORANGE]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AnalogTV::drawMonitorMonochrome(const unsigned int color)
|
void AnalogTV::drawMonitorMonochrome(const unsigned int color)
|
||||||
{
|
{
|
||||||
int ip = 0;
|
int ip = 0;
|
||||||
@ -315,15 +305,8 @@ void AnalogTV::drawTVOld()
|
|||||||
for (int row = 0; row < 192; ++row)
|
for (int row = 0; row < 192; ++row)
|
||||||
{
|
{
|
||||||
IQ iq_factor;
|
IQ iq_factor;
|
||||||
if (this->type == TV_OLD_COLOR)
|
|
||||||
{
|
|
||||||
const CB cb = get_cb(row);
|
const CB cb = get_cb(row);
|
||||||
iq_factor = get_iq_factor(cb);
|
iq_factor = get_iq_factor(cb);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
iq_factor = BLACK_AND_WHITE;
|
|
||||||
}
|
|
||||||
ntsc_to_yiq(row*AppleNTSC::H+350,AppleNTSC::H-350,iq_factor,yiq);
|
ntsc_to_yiq(row*AppleNTSC::H+350,AppleNTSC::H-350,iq_factor,yiq);
|
||||||
for (int col = 350; col < AppleNTSC::H-2; ++col)
|
for (int col = 350; col < AppleNTSC::H-2; ++col)
|
||||||
{
|
{
|
||||||
@ -338,31 +321,6 @@ void AnalogTV::drawTVOld()
|
|||||||
delete [] yiq;
|
delete [] yiq;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnalogTV::drawTVNew()
|
|
||||||
{
|
|
||||||
unsigned int *rgb = new unsigned int[AppleNTSC::H];
|
|
||||||
int ip = 0;
|
|
||||||
for (int row = 0; row < 192; ++row)
|
|
||||||
{
|
|
||||||
const CB cb = get_cb(row);
|
|
||||||
const bool removeColor = false; //(this->type == TV_NEW_BW || !cb.isColor());
|
|
||||||
ntsc_to_rgb_newtv(row*AppleNTSC::H+350,AppleNTSC::H-350,rgb);
|
|
||||||
for (int col = 350; col < AppleNTSC::H-2; ++col)
|
|
||||||
{
|
|
||||||
int rgbv = rgb[col-350];
|
|
||||||
if (removeColor)
|
|
||||||
{
|
|
||||||
rgbv = color2bw(rgbv);
|
|
||||||
}
|
|
||||||
this->image.setElem(ip,rgbv);
|
|
||||||
if (bleed_down)
|
|
||||||
this->image.setElem(ip+D_IP,rgbv);
|
|
||||||
++ip;
|
|
||||||
}
|
|
||||||
ip += D_IP;
|
|
||||||
}
|
|
||||||
delete [] rgb;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AnalogTV::drawBlank()
|
void AnalogTV::drawBlank()
|
||||||
{
|
{
|
||||||
@ -418,64 +376,6 @@ void AnalogTV::ntsc_to_rgb_monitor(const int isignal, const int siglen, unsigned
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnalogTV::ntsc_to_rgb_newtv(const int isignal, const int siglen, unsigned int rgb[])
|
|
||||||
{
|
|
||||||
int sp, s0, s1, se;
|
|
||||||
sp = s0 = s1 = isignal;
|
|
||||||
se = isignal+siglen;
|
|
||||||
unsigned int c = 0;
|
|
||||||
while (s1 < se)
|
|
||||||
{
|
|
||||||
// no signal; black...
|
|
||||||
sp = s0;
|
|
||||||
while (this->signal[s0] < 50 && s0<se) { rgb[s0-isignal] = 0; ++s0; }
|
|
||||||
// unless it's too short, then color it (but not white)
|
|
||||||
if (c != 0xFFFFFF)
|
|
||||||
{
|
|
||||||
if (s0-sp < 4)
|
|
||||||
{
|
|
||||||
for (int i = sp; i < s0; ++i)
|
|
||||||
rgb[i-isignal] = c;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
rgb[sp-isignal] = c;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// signal (white, grey, or color)
|
|
||||||
s1 = s0;
|
|
||||||
while (this->signal[s1] > 50 && s1<se) { ++s1; }
|
|
||||||
const int slen = s1-s0;
|
|
||||||
if (slen >= 4)
|
|
||||||
{
|
|
||||||
c = 0xFFFFFF;
|
|
||||||
}
|
|
||||||
else if (slen == 1)
|
|
||||||
{
|
|
||||||
if (this->signal[s0-2] > 50 && this->signal[s0+2] > 50)
|
|
||||||
c = 0x808080;
|
|
||||||
else
|
|
||||||
c = loresdarkcolor[s0 % 4];
|
|
||||||
}
|
|
||||||
else if (slen == 2)
|
|
||||||
{
|
|
||||||
c = hirescolor[s0 % 4];
|
|
||||||
}
|
|
||||||
else if (slen == 3)
|
|
||||||
{
|
|
||||||
c = loreslightcolor[s0 % 4];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
++s1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (int i = s0; i < s1; ++i)
|
|
||||||
rgb[i-isignal] = c;
|
|
||||||
s0 = s1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ FilterChroma::FilterChroma() {
|
|||||||
FilterChroma::~FilterChroma() {
|
FilterChroma::~FilterChroma() {
|
||||||
}
|
}
|
||||||
|
|
||||||
float FilterChroma::next(const float v) {
|
double FilterChroma::next(const double v) {
|
||||||
xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3];
|
xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3];
|
||||||
xv[3] = v / GAIN;
|
xv[3] = v / GAIN;
|
||||||
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3];
|
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3];
|
||||||
|
@ -20,13 +20,13 @@
|
|||||||
|
|
||||||
class FilterChroma {
|
class FilterChroma {
|
||||||
private:
|
private:
|
||||||
float xv[4];
|
double xv[4];
|
||||||
float yv[4];
|
double yv[4];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FilterChroma();
|
FilterChroma();
|
||||||
~FilterChroma();
|
~FilterChroma();
|
||||||
float next(const float v);
|
double next(const double v);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -33,7 +33,7 @@ FilterLuma::FilterLuma() {
|
|||||||
FilterLuma::~FilterLuma() {
|
FilterLuma::~FilterLuma() {
|
||||||
}
|
}
|
||||||
|
|
||||||
float FilterLuma::next(const float v) {
|
double FilterLuma::next(const double v) {
|
||||||
xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3]; xv[3] = xv[4]; xv[4] = xv[5];
|
xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3]; xv[3] = xv[4]; xv[4] = xv[5];
|
||||||
xv[5] = v / GAIN;
|
xv[5] = v / GAIN;
|
||||||
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3];
|
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3];
|
||||||
|
@ -20,13 +20,13 @@
|
|||||||
|
|
||||||
class FilterLuma {
|
class FilterLuma {
|
||||||
private:
|
private:
|
||||||
float xv[6];
|
double xv[6];
|
||||||
float yv[4];
|
double yv[4];
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FilterLuma();
|
FilterLuma();
|
||||||
~FilterLuma();
|
~FilterLuma();
|
||||||
float next(const float v);
|
double next(const double v);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user