diff --git a/src/tv/bas.c b/src/tv/bas.c index aee382c..b7d8381 100644 --- a/src/tv/bas.c +++ b/src/tv/bas.c @@ -49,7 +49,7 @@ #define H_CBURST_STOP 0.0000094 #define COLOR_CARRIER 4433618.75 #define COLOR_OFFSET 0.0000004 -#define BURST_AMPLITUDE 0.15 +#define BURST_AMPLITUDE 0.3 #define COLOR_FILTER_ITER 1 void bas_init(bas_t *bas, double samplerate, enum bas_type type, int fbas, double circle_radius, int color_bar, int grid_only, const char *station_id, int grid_width, unsigned short *img, int width, int height) @@ -88,7 +88,7 @@ int bas_generate(bas_t *bas, sample_t *sample) int have_image; sample_t color_u[(int)(bas->samplerate / 15625.0) + 10]; sample_t color_v[(int)(bas->samplerate / 15625.0) + 10]; - double _sin, _cos; + double _sin, _cos, chroma; double color_step = COLOR_CARRIER / bas->samplerate * 2 * M_PI; /* the offset is specified by delaying Y signal by 0.4 uS. */ // additianlly we compensate the delay caused by the color filter, that is 2 samples per iteration */ @@ -275,9 +275,9 @@ int bas_generate(bas_t *bas, sample_t *sample) bas->color_phase -= 2.0 * M_PI; _sin = sin(bas->color_phase); _cos = cos(bas->color_phase); - sample[c-color_offset] += color_u[c] * _cos - color_v[c] * _sin; - sample[c-color_offset] += color_u[c] * _sin + color_v[c] * _cos; - // puts(debug_amplitude(sample[c-color_offset])); + chroma = color_u[c] * _cos - color_v[c] * _sin; + /* scale level of chroma to range of BAS signal */ + sample[c-color_offset] += chroma * (WHITE_LEVEL - BLACK_LEVEL); } /* filter bas signal */ diff --git a/src/tv/color.c b/src/tv/color.c index 75be71b..0a0e8c7 100644 --- a/src/tv/color.c +++ b/src/tv/color.c @@ -60,8 +60,8 @@ int color_gen_line(sample_t *sample, double x, double samplerate, sample_t *colo colorphase = (360.0 - color_bar[b].phase) / 180.0 * M_PI; else colorphase = color_bar[b].phase / 180.0 * M_PI; - U = cos(colorphase) * amplitude / 2.0; - V = sin(colorphase) * amplitude / 2.0; + U = cos(colorphase) * amplitude; + V = sin(colorphase) * amplitude; while (x < line_end) { color_u[i] = U; color_v[i] = V; diff --git a/src/tv/ebu.c b/src/tv/ebu.c index 4352953..d3afa74 100644 --- a/src/tv/ebu.c +++ b/src/tv/ebu.c @@ -61,8 +61,8 @@ int ebu_gen_line(sample_t *sample, double x, double samplerate, sample_t *color_ colorphase = (360.0 - color_bar[b].phase) / 180.0 * M_PI; else colorphase = color_bar[b].phase / 180.0 * M_PI; - U = cos(colorphase) * amplitude / 2.0; - V = sin(colorphase) * amplitude / 2.0; + U = cos(colorphase) * amplitude; + V = sin(colorphase) * amplitude; render_end = (line_end - line_start) / 8 * (b + 1) + line_start; while (x < render_end) { color_u[i] = U; diff --git a/src/tv/fubk.c b/src/tv/fubk.c index f197891..f85a01b 100644 --- a/src/tv/fubk.c +++ b/src/tv/fubk.c @@ -101,8 +101,8 @@ static double mittelfeld(sample_t *sample, double samplerate, int *_i, double *_ colorphase = (360.0 - color_bar[b].phase) / 180.0 * M_PI; else colorphase = color_bar[b].phase / 180.0 * M_PI; - U = cos(colorphase) * amplitude / 2.0; - V = sin(colorphase) * amplitude / 2.0; + U = cos(colorphase) * amplitude; + V = sin(colorphase) * amplitude; render_end = render_start + GRID_WIDTH * 1.5; while (x < render_end) { color_u[i] = U; @@ -223,8 +223,8 @@ static double mittelfeld(sample_t *sample, double samplerate, int *_i, double *_ colorphase = (360.0 - 145.9) / 180.0 * M_PI; else colorphase = 145.9 / 180.0 * M_PI; - color_u[i] = cos(colorphase) * V / 2.0; - color_v[i] = sin(colorphase) * V / 2.0; + color_u[i] = cos(colorphase) * V; + color_v[i] = sin(colorphase) * V; sample[i++] = Y + sin(phase) / 2.0; phase += phase_step; x += step;