void SetDefaultSourceParameters(const VideoFormat &vf, SourceParams& sparams) { std::ostringstream errstr; sparams.SetVideoFormat(vf); sparams.SetCFormat(format420); sparams.SetSourceSampling(0); sparams.SetTopFieldFirst(true); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_1_1); sparams.SetSignalRange(SIGNAL_RANGE_8BIT_FULL); sparams.SetLeftOffset(0); sparams.SetTopOffset(0); sparams.SetColourSpecification(1); switch (vf) { case VIDEO_FORMAT_CUSTOM: sparams.SetXl(640); sparams.SetYl(480); sparams.SetTopFieldFirst(false); sparams.SetFrameRate(FRAMERATE_23p97_FPS); sparams.SetCleanWidth(640); sparams.SetCleanHeight(480); sparams.SetColourSpecification(0); break; case VIDEO_FORMAT_QSIF525: sparams.SetXl(176); sparams.SetYl(120); sparams.SetTopFieldFirst(false); sparams.SetFrameRate(FRAMERATE_14p98_FPS); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_10_11); sparams.SetCleanWidth(176); sparams.SetCleanHeight(120); sparams.SetColourSpecification(1); break; case VIDEO_FORMAT_QCIF: sparams.SetXl(176); sparams.SetYl(144); sparams.SetFrameRate(FRAMERATE_12p5_FPS); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_12_11); sparams.SetCleanWidth(176); sparams.SetCleanHeight(144); sparams.SetColourSpecification(2); break; case VIDEO_FORMAT_SIF525: sparams.SetXl(352); sparams.SetYl(240); sparams.SetTopFieldFirst(false); sparams.SetFrameRate(FRAMERATE_14p98_FPS); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_10_11); sparams.SetCleanWidth(352); sparams.SetCleanHeight(240); sparams.SetColourSpecification(1); break; case VIDEO_FORMAT_CIF: sparams.SetXl(352); sparams.SetYl(288); sparams.SetFrameRate(FRAMERATE_12p5_FPS); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_12_11); sparams.SetCleanWidth(352); sparams.SetCleanHeight(288); sparams.SetColourSpecification(2); break; case VIDEO_FORMAT_4SIF525: sparams.SetXl(704); sparams.SetYl(480); sparams.SetTopFieldFirst(false); sparams.SetFrameRate(FRAMERATE_14p98_FPS); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_10_11); sparams.SetCleanWidth(704); sparams.SetCleanHeight(480); sparams.SetColourSpecification(1); break; case VIDEO_FORMAT_4CIF: sparams.SetXl(704); sparams.SetYl(576); sparams.SetFrameRate(FRAMERATE_12p5_FPS); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_12_11); sparams.SetCleanWidth(704); sparams.SetCleanHeight(576); sparams.SetColourSpecification(2); break; case VIDEO_FORMAT_SD_480I60: sparams.SetXl(720); sparams.SetYl(480); sparams.SetCFormat(format422); sparams.SetSourceSampling(1); sparams.SetTopFieldFirst(false); sparams.SetFrameRate(FRAMERATE_29p97_FPS); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_10_11); sparams.SetCleanWidth(704); sparams.SetCleanHeight(480); sparams.SetLeftOffset(8); sparams.SetSignalRange(SIGNAL_RANGE_10BIT_VIDEO); sparams.SetColourSpecification(1); break; case VIDEO_FORMAT_SD_576I50: sparams.SetXl(720); sparams.SetYl(576); sparams.SetCFormat(format422); sparams.SetSourceSampling(1); sparams.SetFrameRate(FRAMERATE_25_FPS); sparams.SetPixelAspectRatio(PIXEL_ASPECT_RATIO_12_11); sparams.SetCleanWidth(704); sparams.SetCleanHeight(576); sparams.SetLeftOffset(8); sparams.SetSignalRange(SIGNAL_RANGE_10BIT_VIDEO); sparams.SetColourSpecification(2); break; case VIDEO_FORMAT_HD_720P50: case VIDEO_FORMAT_HD_720P60: sparams.SetXl(1280); sparams.SetYl(720); sparams.SetCFormat(format422); if (vf == VIDEO_FORMAT_HD_720P50) sparams.SetFrameRate(FRAMERATE_50_FPS); else sparams.SetFrameRate(FRAMERATE_59p94_FPS); sparams.SetCleanWidth(1280); sparams.SetCleanHeight(720); sparams.SetSignalRange(SIGNAL_RANGE_10BIT_VIDEO); sparams.SetColourSpecification(3); break; case VIDEO_FORMAT_HD_1080I60: case VIDEO_FORMAT_HD_1080I50: case VIDEO_FORMAT_HD_1080P60: case VIDEO_FORMAT_HD_1080P50: sparams.SetXl(1920); sparams.SetYl(1080); sparams.SetCFormat(format422); switch (vf) { case VIDEO_FORMAT_HD_1080I60: sparams.SetSourceSampling(1); sparams.SetFrameRate(FRAMERATE_29p97_FPS); break; case VIDEO_FORMAT_HD_1080I50: sparams.SetSourceSampling(1); sparams.SetFrameRate(FRAMERATE_25_FPS); break; case VIDEO_FORMAT_HD_1080P60: sparams.SetFrameRate(FRAMERATE_59p94_FPS); break; case VIDEO_FORMAT_HD_1080P50: sparams.SetFrameRate(FRAMERATE_50_FPS); break; default: break; } sparams.SetSignalRange(SIGNAL_RANGE_10BIT_VIDEO); sparams.SetCleanWidth(1920); sparams.SetCleanHeight(1080); sparams.SetColourSpecification(3); break; case VIDEO_FORMAT_DIGI_CINEMA_2K24: sparams.SetXl(2048); sparams.SetYl(1080); sparams.SetCFormat(format444); sparams.SetFrameRate(FRAMERATE_24_FPS); sparams.SetCleanWidth(2048); sparams.SetCleanHeight(1080); sparams.SetSignalRange(SIGNAL_RANGE_12BIT_VIDEO); sparams.SetColourSpecification(4); break; case VIDEO_FORMAT_DIGI_CINEMA_4K24: sparams.SetXl(4096); sparams.SetYl(2160); sparams.SetCFormat(format444); sparams.SetFrameRate(FRAMERATE_24_FPS); sparams.SetCleanWidth(4096); sparams.SetCleanHeight(2160); sparams.SetSignalRange(SIGNAL_RANGE_12BIT_VIDEO); sparams.SetColourSpecification(4); break; default: errstr << "Unsupported video format " << sparams.GetVideoFormat() << std::endl; DIRAC_THROW_EXCEPTION( ERR_INVALID_VIDEO_FORMAT, errstr.str(), SEVERITY_FRAME_ERROR); break; } }
void SetDefaultCodecParameters(CodecParams &cparams, PictureType ptype, unsigned int num_refs) { std::ostringstream errstr; // Transform parameters cparams.SetZeroTransform(false); cparams.SetTransformDepth(4); WltFilter wf; SetDefaultTransformFilter(ptype, cparams.GetVideoFormat(), wf); cparams.SetTransformFilter(wf); cparams.SetCodeBlockMode(QUANT_SINGLE); cparams.SetSpatialPartition(false); // Default is set to progressive specified irrespective // of whether the source material is interlaced or progressive. // Overridden from command line of encoder or in bytestream for decoder. cparams.SetPictureCodingMode(0); cparams.SetTopFieldFirst(true); switch (cparams.GetVideoFormat()) { case VIDEO_FORMAT_QSIF525: case VIDEO_FORMAT_QCIF: case VIDEO_FORMAT_CUSTOM: case VIDEO_FORMAT_SIF525: case VIDEO_FORMAT_CIF: case VIDEO_FORMAT_4CIF: case VIDEO_FORMAT_4SIF525: case VIDEO_FORMAT_SD_480I60: case VIDEO_FORMAT_SD_576I50: case VIDEO_FORMAT_HD_720P60: case VIDEO_FORMAT_HD_720P50: case VIDEO_FORMAT_HD_1080I60: case VIDEO_FORMAT_HD_1080I50: case VIDEO_FORMAT_HD_1080P60: case VIDEO_FORMAT_HD_1080P50: case VIDEO_FORMAT_DIGI_CINEMA_2K24: case VIDEO_FORMAT_DIGI_CINEMA_4K24: case VIDEO_FORMAT_UHDTV_4K60: case VIDEO_FORMAT_UHDTV_4K50: case VIDEO_FORMAT_UHDTV_8K60: case VIDEO_FORMAT_UHDTV_8K50: cparams.SetSpatialPartition(true); break; default: errstr << "Unsupported video format " << cparams.GetVideoFormat() << std::endl; DIRAC_THROW_EXCEPTION( ERR_INVALID_VIDEO_FORMAT, errstr.str(), SEVERITY_PICTURE_ERROR); break; } if (ptype == INTER_PICTURE) { ASSERTM (num_refs > 0 && num_refs < 3, "Number of reference frames should be 1 or 2 fo INTER frames" ); OLBParams bparams; PicturePredParams& predparams = cparams.GetPicPredParams(); predparams.SetUsingGlobalMotion(false); SetDefaultBlockParameters(bparams, cparams.GetVideoFormat()); predparams.SetLumaBlockParams(bparams); predparams.SetMVPrecision(MV_PRECISION_HALF_PIXEL); // NOTE: FIXME - need to add global motion params here predparams.SetPictureWeightsPrecision(1); predparams.SetRef1Weight(1); predparams.SetRef2Weight(1); cparams.SetPictureCodingMode(0); } }