static int vidix_set_video_eq(const vidix_video_eq_t *info) { if(!video_on) return EPERM; return vdlPlaybackSetEq(vidix_handler, info); }
/* ---------------------------------------------------------------------------- */ void cVidixVideoOut::SetParams(int Ystride, int UVstride) { vidix_video_eq_t vidix_video_eq; int err; if (aspect_changed || currentPixelFormat != setupStore->pixelFormat || cutTop != setupStore->cropTopLines || cutBottom != setupStore->cropBottomLines ) { cutTop = setupStore->cropTopLines; cutBottom = setupStore->cropBottomLines; softlog->Log(SOFT_LOG_INFO, 0, "[cVidixVideoOut] Video changed format to %dx%d\n", fwidth, fheight); if((Xres > fwidth || Yres > fheight) && (vidix_cap.flags & FLAG_UPSCALER) != FLAG_UPSCALER) { softlog->Log(SOFT_LOG_ERROR, 0, "[cVidixVideoOut] vidix driver can't " "upscale image (%dx%d -> %dx%d) exiting\n", fwidth, fheight, Xres, Yres); exit(1); } if((Xres < fwidth || Yres < fheight) && (vidix_cap.flags & FLAG_DOWNSCALER) != FLAG_DOWNSCALER) { softlog->Log(SOFT_LOG_ERROR, 0, "[cVidixVideoOut] vidix driver can't " "downscale image (%dx%d -> %dx%d) exiting\n", fwidth, fheight, Xres, Yres); exit(1); } if (currentPixelFormat != setupStore->pixelFormat) { if (setupStore->pixelFormat == 0) vidix_fourcc.fourcc = IMGFMT_I420; else if(setupStore->pixelFormat == 1) vidix_fourcc.fourcc = IMGFMT_YV12; else if(setupStore->pixelFormat == 2) vidix_fourcc.fourcc = IMGFMT_YUY2; currentPixelFormat = setupStore->pixelFormat; if (vdlQueryFourcc(vidix_handler, &vidix_fourcc)) { if (!MatchPixelFormat()) { softlog->Log(SOFT_LOG_ERROR, 0, "[cVidixVideoOut]: no matching pixel " "format found exiting\n"); exit(1); } } } vidix_play.fourcc = vidix_fourcc.fourcc; vidix_play.src.w = swidth; vidix_play.src.h = sheight; vidix_play.dest.x = lxoff; vidix_play.dest.y = lyoff; vidix_play.dest.w = lwidth; vidix_play.dest.h = lheight; vidix_play.src.pitch.y=Ystride; vidix_play.src.pitch.u=UVstride; vidix_play.src.pitch.v=UVstride; AllocLayer(); #if 0 printf("cVidixVideoOut : num_frames=%d \n", vidix_play.num_frames); printf("cVidixVideoOut : frame_size=%d\n", vidix_play.frame_size); printf("cVidixVideoOut : src pitches y=%d\n", vidix_play.src.pitch.y); printf("cVidixVideoOut : src pitches u=%d\n", vidix_play.src.pitch.u); printf("cVidixVideoOut : src pitches v=%d\n", vidix_play.src.pitch.v); printf("cVidixVideoOut : dst pitches y=%d\n", vidix_play.dest.pitch.y); printf("cVidixVideoOut : dst pitches u=%d\n", vidix_play.dest.pitch.u); printf("cVidixVideoOut : dst pitches v=%d\n", vidix_play.dest.pitch.v); printf("cVidixVideoOut : dstrides.y=%d\n", dstrides.y); printf("cVidixVideoOut : dstrides.u=%d\n", dstrides.u); printf("cVidixVideoOut : dstrides.v=%d\n", dstrides.v); #endif } vidix_video_eq=vidix_curr_eq; vidix_video_eq.brightness = (setupStore->vidBrightness - 50)*20; vidix_video_eq.contrast = (setupStore->vidContrast - 50)*20; vidix_video_eq.saturation = (setupStore->vidSaturation - 50)*20; vidix_video_eq.hue = (setupStore->vidHue - 50)*20; if (vidix_curr_eq.brightness != vidix_video_eq.brightness || vidix_curr_eq.contrast != vidix_video_eq.contrast || vidix_curr_eq.saturation != vidix_video_eq.saturation || vidix_curr_eq.hue != vidix_video_eq.hue ) { softlog->Log(SOFT_LOG_INFO, 0, "[cVidixVideoOut] set eq values\n"); vidix_curr_eq = vidix_video_eq; if( (err = vdlPlaybackSetEq(vidix_handler, &vidix_curr_eq)) != 0) { softlog->Log(SOFT_LOG_ERROR, 0, "[cVidixVideoOut] Couldn't set EQ " "capability: %s (FAILED)\n", strerror(err) ); } } if (setupStore->vidDeinterlace > 10) setupStore->vidDeinterlace = 10; if (setupStore->vidDeinterlace != vidix_curr_deinterlace) { vidix_deinterlace_t vidix_deint; vidix_curr_deinterlace = setupStore->vidDeinterlace; switch (vidix_curr_deinterlace) { case 0: // CFG_NON_INTERLACED vidix_deint.flags = CFG_NON_INTERLACED; break; case 1: // CFG_INTERLACED case 2: // CFG_EVEN_ODD_INTERLACING case 3: vidix_deint. flags = CFG_EVEN_ODD_INTERLACING; break; case 4: // CFG_ODD_EVEN_INTERLACING case 5: case 6: case 7: vidix_deint. flags = CFG_ODD_EVEN_INTERLACING; break; case 8: // CFG_UNIQUE_INTERLACING // xorg METHOD_BOB vidix_deint. flags = CFG_UNIQUE_INTERLACING; vidix_deint. deinterlace_pattern = 0xAAAAA; break; case 9: // CFG_UNIQUE_INTERLACING // xorg METHOD_SINGLE vidix_deint. flags = CFG_UNIQUE_INTERLACING; vidix_deint. deinterlace_pattern = 0xEEEEE | (9<<28); break; case 10: // xorg METHOD_WEAVE vidix_deint. flags = CFG_UNIQUE_INTERLACING; vidix_deint. deinterlace_pattern = 0; break; default: vidix_deint.flags = CFG_NON_INTERLACED; break; } vdlPlaybackSetDeint(vidix_handler, &vidix_deint); vdlPlaybackGetDeint(vidix_handler, &vidix_deint); softlog->Log(SOFT_LOG_INFO, 0, "[cVidixVideoOut] Deinterlacer: %x %x\n", vidix_deint.flags, vidix_deint.deinterlace_pattern); } }