fixed PD180 odd/even swap

Everyone seems to have their own interpretation of odd and even.
This commit is contained in:
Ahmet Inan 2015-02-04 16:35:09 +01:00
parent df64602ed3
commit f3cd104895
2 changed files with 11 additions and 11 deletions

View file

@ -165,10 +165,10 @@ static void pd_decoder()
int even_vpos = vpos;
int odd_vpos = (vpos + 1) % freerun_height;
for (int i = 0; i < bitmap_width; ++i) {
uchar odd_y = value_blur(i, y_odd_begin + prev_sync_pos, y_odd_end + prev_sync_pos);
uchar even_y = value_blur(i, y_even_begin + prev_sync_pos, y_even_end + prev_sync_pos);
uchar u = value_blur(i, u_begin + prev_sync_pos, u_end + prev_sync_pos);
uchar v = value_blur(i, v_begin + prev_sync_pos, v_end + prev_sync_pos);
uchar even_y = value_blur(i, y_even_begin + prev_sync_pos, y_even_end + prev_sync_pos);
uchar odd_y = value_blur(i, y_odd_begin + prev_sync_pos, y_odd_end + prev_sync_pos);
pixel_buffer[bitmap_width * even_vpos + i] = yuv(even_y, u, v);
pixel_buffer[bitmap_width * odd_vpos + i] = yuv(odd_y, u, v);
}

View file

@ -140,23 +140,23 @@ void pd180_mode()
const float yuv_scan_ms = 183.04f;
sync_length = tolerance * (sync_ms * sample_rate) / 1000.0f;
float y_odd_begin_ms = porch_ms;
float y_odd_end_ms = y_odd_begin_ms + yuv_scan_ms;
float v_begin_ms = y_odd_end_ms;
float y_even_begin_ms = porch_ms;
float y_even_end_ms = y_even_begin_ms + yuv_scan_ms;
float v_begin_ms = y_even_end_ms;
float v_end_ms = v_begin_ms + yuv_scan_ms;
float u_begin_ms = v_end_ms;
float u_end_ms = u_begin_ms + yuv_scan_ms;
float y_even_begin_ms = u_end_ms;
float y_even_end_ms = y_even_begin_ms + yuv_scan_ms;
float y_odd_begin_ms = u_end_ms;
float y_odd_end_ms = y_odd_begin_ms + yuv_scan_ms;
y_odd_begin = round((y_odd_begin_ms * sample_rate) / 1000.0f);
y_odd_end = round((y_odd_end_ms * sample_rate) / 1000.0f);
y_even_begin = round((y_even_begin_ms * sample_rate) / 1000.0f);
y_even_end = round((y_even_end_ms * sample_rate) / 1000.0f);
v_begin = round((v_begin_ms * sample_rate) / 1000.0f);
v_end = round((v_end_ms * sample_rate) / 1000.0f);
u_begin = round((u_begin_ms * sample_rate) / 1000.0f);
u_end = round((u_end_ms * sample_rate) / 1000.0f);
y_even_begin = round((y_even_begin_ms * sample_rate) / 1000.0f);
y_even_end = round((y_even_end_ms * sample_rate) / 1000.0f);
y_odd_begin = round((y_odd_begin_ms * sample_rate) / 1000.0f);
y_odd_end = round((y_odd_end_ms * sample_rate) / 1000.0f);
scanline_length = pd180_scanline_length;
minimum_length = ((1.0f - scanline_tolerance) * pd180_scanline_ms * sample_rate) / 1000.0f;