static int  vidix_set_video_eq(const vidix_video_eq_t *info)
{
  if(!video_on) return EPERM;
  return vdlPlaybackSetEq(vidix_handler, info);
}
示例#2
0
/* ----------------------------------------------------------------------------
 */
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);
  }
}