- for (i_index2 = 0; i_index2 < 256; i_index2++)
- p_vout->p_sys->LUT[i_plane_][i_index2][i_index] = F(i_index2, (length / p_pic->p->i_pixel_pitch, i_index, p_vout->p_sys->f_gamma[i_plane_]));
-#endif
- switch (p_vout->output.i_chroma)
- {
- case VLC_FOURCC('Y','U','Y','2'): // packed by 2
- case VLC_FOURCC('Y','U','N','V'): // packed by 2
- Denom = F2(length / p_pic->p->i_pixel_pitch);
- a_2 = p_vout->p_sys->a_2 * (ACCURACY / 100);
- a_1 = p_vout->p_sys->a_1 * 2 * p_vout->p_sys->i_halfLength * (ACCURACY / 100);
- a_0 = p_vout->p_sys->a_0 * Denom * (ACCURACY / 100);
- for (i_index = 0; i_index < length / p_pic->p->i_pixel_pitch; i_index+=p_pic->p->i_pixel_pitch)
- // for each macropixel
- {
- // first image pixel
- p_vout->p_sys->lambda[i_col][0][i_index] = CLIP_0A(!i_col ? ACCURACY - (F4(a_2, a_1, i_index) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - i_index) + a_0) / Denom);
- p_vout->p_sys->cstYUV[i_col][0][i_index] = ((ACCURACY - p_vout->p_sys->lambda[i_col][0][i_index]) * constantYUV[0]) / ACCURACY;
- p_vout->p_sys->lambda[i_col][1][i_index] = CLIP_0A(!i_col ? ACCURACY - (F4(a_2, a_1, i_index) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - i_index) + a_0) / Denom);
- p_vout->p_sys->cstYUV[i_col][1][i_index] = ((ACCURACY - p_vout->p_sys->lambda[i_col][1][i_index]) * constantYUV[1]) / ACCURACY;
- // second image pixel
- p_vout->p_sys->lambda[i_col][0][i_index + 1] = CLIP_0A(!i_col ? ACCURACY - (F4(a_2, a_1, i_index + 1) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - (i_index + 1)) + a_0) / Denom);
- p_vout->p_sys->cstYUV[i_col][0][i_index + 1] = ((ACCURACY - p_vout->p_sys->lambda[i_col][0][i_index]) * constantYUV[0]) / ACCURACY;
- p_vout->p_sys->lambda[i_col][1][i_index + 1] = p_vout->p_sys->lambda[i_col][1][i_index];
- p_vout->p_sys->cstYUV[i_col][1][i_index + 1] = p_vout->p_sys->cstYUV[i_col][1][i_index];
- }
- break;
- case VLC_FOURCC('U','Y','V','Y'): // packed by 2
- case VLC_FOURCC('U','Y','N','V'): // packed by 2
- case VLC_FOURCC('Y','4','2','2'): // packed by 2
- Denom = F2(length / p_pic->p->i_pixel_pitch);
- a_2 = p_vout->p_sys->a_2 * (ACCURACY / 100);
- a_1 = p_vout->p_sys->a_1 * 2 * p_vout->p_sys->i_halfLength * (ACCURACY / 100);
- a_0 = p_vout->p_sys->a_0 * Denom * (ACCURACY / 100);
- for (i_index = 0; i_index < length / p_pic->p->i_pixel_pitch; i_index+=p_pic->p->i_pixel_pitch)
- // for each macropixel
- {
- // first image pixel
- p_vout->p_sys->lambda[i_col][0][i_index] = CLIP_0A(!i_col ? ACCURACY - (F4(a_2, a_1, i_index) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - i_index) + a_0) / Denom);
- p_vout->p_sys->cstYUV[i_col][0][i_index] = ((ACCURACY - p_vout->p_sys->lambda[i_col][0][i_index]) * constantYUV[1]) / ACCURACY;
- p_vout->p_sys->lambda[i_col][1][i_index] = CLIP_0A(!i_col ? ACCURACY - (F4(a_2, a_1, i_index) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - i_index) + a_0) / Denom);
- p_vout->p_sys->cstYUV[i_col][1][i_index] = ((ACCURACY - p_vout->p_sys->lambda[i_col][1][i_index]) * constantYUV[0]) / ACCURACY;
- // second image pixel
- p_vout->p_sys->lambda[i_col][0][i_index + 1] = CLIP_0A(!i_col ? ACCURACY - (F4(a_2, a_1, i_index + 1) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - (i_index + 1)) + a_0) / Denom);
- p_vout->p_sys->cstYUV[i_col][0][i_index + 1] = ((ACCURACY - p_vout->p_sys->lambda[i_col][0][i_index]) * constantYUV[1]) / ACCURACY;
- p_vout->p_sys->lambda[i_col][1][i_index + 1] = p_vout->p_sys->lambda[i_col][1][i_index];
- p_vout->p_sys->cstYUV[i_col][1][i_index + 1] = p_vout->p_sys->cstYUV[i_col][1][i_index];
- }
- break;
- default :
- break;
- }
- }
-#endif
- while( p_in < p_in_end )
- {
-#ifndef OVERLAP
- p_vout->p_libvlc->pf_memcpy( p_out, p_in, i_copy_pitch);
-#else
- p_vout->p_libvlc->pf_memcpy( p_out + i_col * length, p_in + i_col * length, i_copy_pitch - length);
- p_out += LeftOffset;
- p_in += LeftOffset;
-#ifndef GAMMA
- for (i_index = 0; i_index < length; i_index++)
- *(p_out + i_index) = (p_vout->p_sys->lambda[i_col][i_index % p_pic->p->i_pixel_pitch][i_index / p_pic->p->i_pixel_pitch] *
- (*(p_in + i_index))) / ACCURACY +
- p_vout->p_sys->cstYUV[i_col][i_index % p_pic->p->i_pixel_pitch][i_index / p_pic->p->i_pixel_pitch];
-#else
- for (i_index = 0; i_index < length; i_index++)
- *(p_out + i_index) = p_vout->p_sys->LUT[i_index % p_pic->p->i_pixel_pitch][(p_vout->p_sys->lambda[i_col][i_index % p_pic->p->i_pixel_pitch][i_index / p_pic->p->i_pixel_pitch] *
- (*(p_in + i_index))) / ACCURACY +
- p_vout->p_sys->cstYUV[i_col][i_index % p_pic->p->i_pixel_pitch][i_index / p_pic->p->i_pixel_pitch]][i_index / p_pic->p->i_pixel_pitch];
-#endif
- p_out -= LeftOffset;
- p_in -= LeftOffset;
-#endif
- p_in += i_in_pitch;
- p_out += i_out_pitch;
- }
-#ifdef OVERLAP
- if (p_vout->p_sys->i_row == 2)
- {
- length = 2 * p_vout->p_sys->i_halfHeight * p_pic->p->i_pixel_pitch;
- TopOffset = (i_row ? i_lines : length / p_pic->p->i_pixel_pitch);
- if (p_vout->p_sys->b_has_changed)
- {
-#ifdef GAMMA
- int i_plane_;
- for (i_index = 0; i_index < length / p_pic->p->i_pixel_pitch; i_index++)
- for (i_plane_ = 0; i_plane_ < p_pic->p->i_pixel_pitch; i_plane_++)
- for (i_index2 = 0; i_index2 < 256; i_index2++)
- p_vout->p_sys->LUT2[i_plane_][i_index2][i_index] = F(i_index2, (length / p_pic->p->i_pixel_pitch, i_index, p_vout->p_sys->f_gamma[i_plane_]));
-#endif
- switch (p_vout->output.i_chroma)
- {
- case VLC_FOURCC('Y','U','Y','2'): // packed by 2
- case VLC_FOURCC('Y','U','N','V'): // packed by 2
- Denom = F2(length / p_pic->p->i_pixel_pitch);
- a_2 = p_vout->p_sys->a_2 * (ACCURACY / 100);
- a_1 = p_vout->p_sys->a_1 * 2 * p_vout->p_sys->i_halfHeight * (ACCURACY / 100);
- a_0 = p_vout->p_sys->a_0 * Denom * (ACCURACY / 100);
- for (i_index = 0; i_index < length / p_pic->p->i_pixel_pitch; i_index+=p_pic->p->i_pixel_pitch)
- // for each macropixel
- {
- // first image pixel
- p_vout->p_sys->lambda2[i_row][0][i_index] = CLIP_0A(!i_row ? ACCURACY - (F4(a_2, a_1, i_index) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - i_index) + a_0) / Denom);
- p_vout->p_sys->cstYUV2[i_row][0][i_index] = ((ACCURACY - p_vout->p_sys->lambda2[i_row][0][i_index]) * constantYUV[0]) / ACCURACY;
- p_vout->p_sys->lambda2[i_row][1][i_index] = CLIP_0A(!i_row ? ACCURACY - (F4(a_2, a_1, i_index) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - i_index) + a_0) / Denom);
- p_vout->p_sys->cstYUV2[i_row][1][i_index] = ((ACCURACY - p_vout->p_sys->lambda2[i_row][1][i_index]) * constantYUV[1]) / ACCURACY;
- // second image pixel
- p_vout->p_sys->lambda2[i_row][0][i_index + 1] = CLIP_0A(!i_row ? ACCURACY - (F4(a_2, a_1, i_index + 1) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - (i_index + 1)) + a_0) / Denom);
- p_vout->p_sys->cstYUV2[i_row][0][i_index + 1] = ((ACCURACY - p_vout->p_sys->lambda2[i_row][0][i_index]) * constantYUV[0]) / ACCURACY;
- p_vout->p_sys->lambda2[i_row][1][i_index + 1] = p_vout->p_sys->lambda2[i_row][1][i_index];
- p_vout->p_sys->cstYUV2[i_row][1][i_index + 1] = p_vout->p_sys->cstYUV2[i_row][1][i_index];
- }
- break;
- case VLC_FOURCC('U','Y','V','Y'): // packed by 2
- case VLC_FOURCC('U','Y','N','V'): // packed by 2
- case VLC_FOURCC('Y','4','2','2'): // packed by 2
- Denom = F2(length / p_pic->p->i_pixel_pitch);
- a_2 = p_vout->p_sys->a_2 * (ACCURACY / 100);
- a_1 = p_vout->p_sys->a_1 * 2 * p_vout->p_sys->i_halfHeight * (ACCURACY / 100);
- a_0 = p_vout->p_sys->a_0 * Denom * (ACCURACY / 100);
- for (i_index = 0; i_index < length / p_pic->p->i_pixel_pitch; i_index+=p_pic->p->i_pixel_pitch)
- // for each macropixel
- {
- // first image pixel
- p_vout->p_sys->lambda2[i_row][0][i_index] = CLIP_0A(!i_row ? ACCURACY - (F4(a_2, a_1, i_index) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - i_index) + a_0) / Denom);
- p_vout->p_sys->cstYUV2[i_row][0][i_index] = ((ACCURACY - p_vout->p_sys->lambda2[i_col][0][i_index]) * constantYUV[1]) / ACCURACY;
- p_vout->p_sys->lambda2[i_row][1][i_index] = CLIP_0A(!i_row ? ACCURACY - (F4(a_2, a_1, i_index) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - i_index) + a_0) / Denom);
- p_vout->p_sys->cstYUV2[i_row][1][i_index] = ((ACCURACY - p_vout->p_sys->lambda2[i_row][1][i_index]) * constantYUV[0]) / ACCURACY;
- // second image pixel
- p_vout->p_sys->lambda2[i_row][0][i_index + 1] = CLIP_0A(!i_row ? ACCURACY - (F4(a_2, a_1, i_index + 1) + a_0) / Denom : ACCURACY - (F4(a_2, a_1,(length / p_pic->p->i_pixel_pitch) - (i_index + 1)) + a_0) / Denom);
- p_vout->p_sys->cstYUV2[i_row][0][i_index + 1] = ((ACCURACY - p_vout->p_sys->lambda2[i_row][0][i_index]) * constantYUV[1]) / ACCURACY;
- p_vout->p_sys->lambda2[i_row][1][i_index + 1] = p_vout->p_sys->lambda2[i_row][1][i_index];
- p_vout->p_sys->cstYUV2[i_row][1][i_index + 1] = p_vout->p_sys->cstYUV2[i_row][1][i_index];
- }
- break;
- default :
- break;
- }
- }
- p_out -= TopOffset * p_outpic->p[i_plane].i_pitch;
-#ifndef GAMMA
- for (i_index = 0; i_index < length / p_pic->p->i_pixel_pitch; i_index++)
- for (i_index2 = 0; i_index2 < i_copy_pitch; i_index2++)
- *(p_out + (i_index * p_outpic->p[i_plane].i_pitch) + i_index2) = (p_vout->p_sys->lambda2[i_row][i_index2 % p_pic->p->i_pixel_pitch][i_index] *
- (*(p_out + (i_index * p_outpic->p[i_plane].i_pitch) + i_index2))) / ACCURACY +
- p_vout->p_sys->cstYUV2[i_row][i_index2 % p_pic->p->i_pixel_pitch][i_index];
-#else
- for (i_index = 0; i_index < length / p_pic->p->i_pixel_pitch; i_index++)
- for (i_index2 = 0; i_index2 < i_copy_pitch; i_index2++)
- *(p_out + (i_index * p_outpic->p[i_plane].i_pitch) + i_index2) = p_vout->p_sys->LUT[i_index % p_pic->p->i_pixel_pitch][(p_vout->p_sys->lambda2[i_row][i_index2 % p_pic->p->i_pixel_pitch][i_index] *
- (*(p_out + (i_index * p_outpic->p[i_plane].i_pitch) + i_index2))) / ACCURACY +
- p_vout->p_sys->cstYUV2[i_row][i_index2 % p_pic->p->i_pixel_pitch][i_index]][i_index / p_pic->p->i_pixel_pitch];
-
-#endif
- p_out += TopOffset * p_outpic->p[i_plane].i_pitch;
- }
-#endif
-// bug for wall filter : fix by CC
-// pi_left_skip[i_plane] += i_out_pitch;
- pi_left_skip[i_plane] += i_copy_pitch;
- }
-
- vout_UnlinkPicture( p_vout->p_sys->pp_vout[ i_vout ].p_vout,
- p_outpic );
- vout_DisplayPicture( p_vout->p_sys->pp_vout[ i_vout ].p_vout,
- p_outpic );
- i_vout++;
- }
-
- for( i_plane = 0 ; i_plane < p_pic->i_planes ; i_plane++ )
- {
- pi_top_skip[i_plane] += p_vout->p_sys->pp_vout[ i_vout ].i_height
- * p_pic->p[i_plane].i_lines
- / p_vout->output.i_height
- * p_pic->p[i_plane].i_pitch;
- }