QWidget* MovieExporter::getExportOptionsWidget(const PlugInArgList* pInArgList) { if (mpOptionWidget.get() == NULL) { // Create the options widget MovieExportOptionsWidget* pOptionWidget = new MovieExportOptionsWidget(); mpOptionWidget = auto_ptr<MovieExportOptionsWidget>(pOptionWidget); VERIFYRV(mpOptionWidget.get() != NULL, NULL); // Resolution ViewResolutionWidget* pResolutionWidget = mpOptionWidget->getResolutionWidget(); VERIFYRV(pResolutionWidget != NULL, NULL); QSize resolution(OptionsMovieExporter::getSettingWidth(), OptionsMovieExporter::getSettingHeight()); pResolutionWidget->setResolution(resolution, StringUtilities::fromXmlString<OptionsMovieExporter::ResolutionType>( OptionsMovieExporter::getSettingResolutionType())); // Bitrate BitrateWidget* pBitrateWidget = mpOptionWidget->getBitrateWidget(); VERIFYRV(pBitrateWidget != NULL, NULL); pBitrateWidget->setBitrate(OptionsMovieExporter::getSettingBitrate()); // Framerates AVOutputFormat* pOutFormat = getOutputFormat(); VERIFYRV(pOutFormat, NULL); AVCodec* pCodec = avcodec_find_encoder(pOutFormat->video_codec); VERIFYRV(pCodec, NULL); if (pCodec->supported_framerates != NULL) { vector<boost::rational<int> > frameRates; try { for (int idx = 0; ; ++idx) { boost::rational<int> frameRate(pCodec->supported_framerates[idx].num, pCodec->supported_framerates[idx].den); if (frameRate == 0) { break; } frameRates.push_back(frameRate); } } catch (const boost::bad_rational&) { // intentionally left blank } FramerateWidget* pFramerateWidget = mpOptionWidget->getFramerateWidget(); VERIFYRV(pFramerateWidget != NULL, NULL); pFramerateWidget->setFramerates(frameRates); } View* pView = pInArgList->getPlugInArgValue<View>(Exporter::ExportItemArg()); if (pView != NULL) { AnimationController* pController = pView->getAnimationController(); if (pController != NULL) { // Subset AnimationFrameSubsetWidget* pSubsetWidget = mpOptionWidget->getSubsetWidget(); VERIFYRV(pSubsetWidget != NULL, NULL); pSubsetWidget->setFrames(pController); double start = pController->getStartFrame(); double stop = pController->getStopFrame(); if (pController->getBumpersEnabled()) { // Need to change start and stop to playback bumpers start = pController->getStartBumper(); stop = pController->getStopBumper(); } pSubsetWidget->setStartFrame(start); pSubsetWidget->setStopFrame(stop); // Framerate rational<int> frameRate = getFrameRate(pController); frameRate = convertToValidFrameRate(frameRate); FramerateWidget* pFramerateWidget = mpOptionWidget->getFramerateWidget(); VERIFYRV(pFramerateWidget != NULL, NULL); pFramerateWidget->setFramerate(frameRate); } } // Advanced options AdvancedOptionsWidget* pAdvancedWidget = mpOptionWidget->getAdvancedWidget(); VERIFYRV(pAdvancedWidget != NULL, NULL); pAdvancedWidget->setMeMethod(OptionsMovieExporter::getSettingMeMethod()); pAdvancedWidget->setGopSize(OptionsMovieExporter::getSettingGopSize()); pAdvancedWidget->setQCompress(OptionsMovieExporter::getSettingQCompress()); pAdvancedWidget->setQBlur(OptionsMovieExporter::getSettingQBlur()); pAdvancedWidget->setQMinimum(OptionsMovieExporter::getSettingQMinimum()); pAdvancedWidget->setQMaximum(OptionsMovieExporter::getSettingQMaximum()); pAdvancedWidget->setQDiffMaximum(OptionsMovieExporter::getSettingQDiffMaximum()); pAdvancedWidget->setMaxBFrames(OptionsMovieExporter::getSettingMaxBFrames()); pAdvancedWidget->setBQuantFactor(OptionsMovieExporter::getSettingBQuantFactor()); pAdvancedWidget->setBQuantOffset(OptionsMovieExporter::getSettingBQuantOffset()); pAdvancedWidget->setDiaSize(OptionsMovieExporter::getSettingDiaSize()); pAdvancedWidget->setOutputBufferSize(OptionsMovieExporter::getSettingOutputBufferSize()); pAdvancedWidget->setFlags(OptionsMovieExporter::getSettingFlags()); } return mpOptionWidget.get(); }