Example #1
0
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();
}