예제 #1
0
/**
    \fn processYuv
*/
uint8_t    flyContrast::processYuv(ADMImage* in, ADMImage *out)
{
    buildContrastTable (param.coef, param.offset, tableluma, tablechroma);


    out->copyInfo(in);

    if(param.doLuma)
        doContrast(in,out,tableluma,PLANAR_Y);
    else
        out->copyPlane(in,out,PLANAR_Y);


    if(param.doChromaU)
        doContrast(in,out,tablechroma,PLANAR_U);
    else
        out->copyPlane(in,out,PLANAR_U);

    if(param.doChromaV)
        doContrast(in,out,tablechroma,PLANAR_V);
    else
        out->copyPlane(in,out,PLANAR_V);

    return 1;
}
예제 #2
0
/**
    \fn getNextFrame
*/
bool         ADMVideoContrast::getNextFrame(uint32_t *fn,ADMImage *image)
{
    if(!previousFilter->getNextFrame(fn,image)) return false;    

    if(_param.doLuma)
        doContrast(image,image,_tableFlat,PLANAR_Y);
    

    if(_param.doChromaU)
        doContrast(image,image,_tableNZ,PLANAR_U);
    
    if(_param.doChromaV)
        doContrast(image,image,_tableNZ,PLANAR_V);
    
  return 1;
}
예제 #3
0
/**
    \fn processYuv
*/
uint8_t    flyContrast::processYuv(ADMImage* in, ADMImage *out)
{
    buildContrastTable (param.coef, param.offset, tableluma, tablechroma);


    out->copyInfo(in);
    if(!previewActivated)
    {
        out->copyPlane(in,out,PLANAR_Y);
        out->copyPlane(in,out,PLANAR_U);
        out->copyPlane(in,out,PLANAR_V);
    }
    else
    {
        if(param.doLuma)
            doContrast(in,out,tableluma,PLANAR_Y);
        else
            out->copyPlane(in,out,PLANAR_Y);


        if(param.doChromaU)
            doContrast(in,out,tablechroma,PLANAR_U);
        else
            out->copyPlane(in,out,PLANAR_U);

        if(param.doChromaV)
            doContrast(in,out,tablechroma,PLANAR_V);
        else
            out->copyPlane(in,out,PLANAR_V);
    }
    if(!scene) return true;
    
    // Draw luma histogram
    uint8_t *luma=out->GetReadPtr(PLANAR_Y);
    int     stride=out->GetPitch(PLANAR_Y);
    int     decimate=4;
    double  sumsum[256];    
    for(int i=0;i<256;i++) sumsum[i]=0;
    
    double  totalSum=(double)(out->_width*out->_height)/decimate; // # of sampling points
    for(int y=0;y<in->_height;y+=decimate)
    {
        uint8_t *p=luma;
        for(int x=0;x<in->_width;x++)
        {
            sumsum[*p]++;
            p++;
        }
        luma+=stride*decimate;
    }
    // normalize
    for(int i=0;i<256;i++)
    {
        // zoom factor =10
        sumsum[i]=(10*sumsum[i]*(127))/totalSum;
        if(sumsum[i]>127) sumsum[i]=127;
    }
    int toggle=0;
    
    scene->clear();
    for(int i=0;i<256;i++)
    {
        QLineF qline(i,127,i,127-sumsum[i]);
        scene->addLine(qline);
    }
    // Draw 16 and 235 line
        QLineF qline(16,100,16,126);
        scene->addLine(qline);
        QLineF qline2(235,100,235,126);
        scene->addLine(qline2);
    
    return 1;
}