Esempio n. 1
0
SequenceCompressor::SequenceCompressor( StreamPicInput* pin ,
                                        EncoderParams& encp,
                                        DiracByteStream& dirac_byte_stream):
    m_all_done(false),
    m_just_finished(true),
    m_srcparams(pin->GetSourceParams()),
    m_encparams(encp),
    m_predparams(encp.GetPicPredParams()),
    m_L1_sep(encp.L1Sep()),
    m_pparams(m_srcparams.CFormat(),
              m_encparams.Xl(),
              m_encparams.Yl(),
              m_encparams.LumaDepth(),
              m_encparams.ChromaDepth() ),
     m_pic_in(pin),
    m_current_display_pnum(-1),
    m_current_code_pnum(0),
    m_show_pnum(-1),m_last_picture_read(-1),
    m_gop_start_num(0),
    m_delay(1),
    m_qmonitor( m_encparams ),
    m_pcoder( m_encparams ),
    m_dirac_byte_stream(dirac_byte_stream),
    m_eos_signalled(false)
{
    // Set up the compression of the sequence

    //TBD: put into the constructor for EncoderParams
    m_encparams.SetEntropyFactors( new EntropyCorrector(m_encparams.TransformDepth()) );

    // Set up generic picture parameters
    m_pparams.SetUsingAC(m_encparams.UsingAC() );

    // Set up a rate controller if rate control being used
    if (m_encparams.TargetRate() != 0)
        m_ratecontrol = new RateController(m_encparams.TargetRate(),
                                           m_pic_in->GetSourceParams(), encp);

    // Copy in the block parameters in case we want to change them dynamically
    m_basic_olb_params2 = &m_predparams.LumaBParams(2);
    m_basic_olb_params1 = new OLBParams( 2*m_predparams.LumaBParams(2).Xblen(),
                                         2*m_predparams.LumaBParams(2).Yblen(),
                                         2*m_predparams.LumaBParams(2).Xbsep(),
                                         2*m_predparams.LumaBParams(2).Ybsep() );

    m_basic_olb_params0 = new OLBParams( 4*m_predparams.LumaBParams(2).Xblen(),
                                         4*m_predparams.LumaBParams(2).Yblen(),
                                         4*m_predparams.LumaBParams(2).Xbsep(),
                                         4*m_predparams.LumaBParams(2).Ybsep() );


    m_intra_olbp = new OLBParams( 2*m_basic_olb_params2->Xbsep() ,
                                  2*m_basic_olb_params2->Ybsep() ,
                                  m_basic_olb_params2->Xbsep() ,
                                  m_basic_olb_params2->Ybsep() );

    SetMotionParameters();

}
Esempio n. 2
0
void SetDefaultEncoderParameters(EncoderParams& encparams)
{
    encparams.SetLossless(false);
    encparams.SetQf(5.5f);
    encparams.GetPicPredParams().SetMVPrecision(MV_PRECISION_HALF_PIXEL);
    encparams.SetUsingAC(true);

    switch (encparams.GetVideoFormat())
    {
    case VIDEO_FORMAT_4SIF525:
    case VIDEO_FORMAT_4CIF:
    case VIDEO_FORMAT_SD_480I60:
    case VIDEO_FORMAT_SD_576I50:
        encparams.SetL1Sep(3);
        encparams.SetNumL1(7);
        encparams.SetCPD(32.0f);
        break;

    case VIDEO_FORMAT_HD_720P60:
    case VIDEO_FORMAT_HD_720P50:
        encparams.SetL1Sep(3);
        encparams.SetNumL1(15);
        encparams.SetCPD(20.0f);
        break;

    case VIDEO_FORMAT_HD_1080I60:
    case VIDEO_FORMAT_HD_1080I50:
    case VIDEO_FORMAT_HD_1080P60:
    case VIDEO_FORMAT_HD_1080P50:
        encparams.SetL1Sep(3);
        encparams.SetNumL1(7);
        encparams.SetCPD(32.0f);
        break;
    case VIDEO_FORMAT_UHDTV_4K60:
    case VIDEO_FORMAT_UHDTV_4K50:
    case VIDEO_FORMAT_UHDTV_8K60:
    case VIDEO_FORMAT_UHDTV_8K50:
        encparams.SetL1Sep(6);
        encparams.SetNumL1(7);
        encparams.SetCPD(48.0f);
        break;
    case VIDEO_FORMAT_CIF:
    default:
        encparams.SetL1Sep(3);
        encparams.SetNumL1(19);
        encparams.SetCPD(20.0f);
        break;
    }

}