7 Replies Latest reply on Apr 22, 2010 10:11 PM by Zac Lam

    Three questions about the CS4 SDK Exporter

    MOGI, Kazuhiro

          Hello. I'm working to make an Exporter Plug-In that supports "Pro CS4" and "Elements 8.0" single binary.

       

          Please give me any advices to complete it. I show you the questions as follows:

       

      1. How can I get the slider screen without checkbox (in parameter GUI)
      2. How to enable an Exporter Plug-In at "Elements 8.0".
      3. What is the difference between ver.4.0 and ver.4.2 in exExpoterInfoRec.

       

      Details below.

       

      1st:

       

          I tried PrSDKExportParamSuite::AddParam() with exParamFlag_slider and exParamFlag_optional.

       

          Both cases parameter GUI shows slider with checkbox. Please teach me a method to use simple slider (no checkbox) in parameter GUI.

       

          BTW, Standard plugins are seem to use "Premiere Export Private Statndar Param Suite". Are you planning to publish it?

       

      2nd:

       

          The Premiere Elements 8.0 never shows any additional Exporter Plug-in, including SDK sample (ExporterSDK.prm).

       

          Please tell me if I need special installation procedures.

       

      3rd:

       

          I found that the exExporterInfoRec is difference between 4.0 and 4.2. The exExporterInfoRec[ver. 4.2] is defined in CS4SDK_r1. But I can't find any definition of exExporterInfoRec[ver. 4.0] in the SDK.

       

          An Exporter Plug-In is build with CS4SDK_r1 never work on the Premiere Pro CS4 (4.0) / Media Encoder CS4 (4.0). I need definition of exExporterInfoRec[ver. 4.0] to support CS4 (ver. 4.0).

       

      Thanks.

        • 1. Re: Three questions about the CS4 SDK Exporter
          Zac Lam Adobe Employee

          Hi Kazuhiro-san,

          1) This particular bug is a known issue (bug 1925419) in CS4 for exporter plug-ins.  Stay tuned for progress on this bug in CS5.

          2) For a CS4-style exporter to show up in the Premiere Elements 8 UI, you’ll need to provide a special preset:

          • Create a folder named "OTHERS" in <Install_Path>/sharingcenter/Presets/pc/
          • Create a sub-folder with your name (e.g. MyCompany) under OTHERS and place the preset file (.epr) in it.

          The final path of the preset file should be something like <Install_Path>/sharingcenter/Presets/pc/OTHERS/MyCompany/MyPreset.epr

           

          The next time you launch Premiere Elements, the preset will be displayed in the Premiere Elements UI.

           

          3) Exporter plug-ins built with the public CS4 SDK will work with 4.0.1 and later.  We recommend for anyone who wants to use 3rd party exporters that they update to 4.0.1 and later.  The 4.0.1 is marked as a critical update.

           

          The main breaking change for exporters between 4.0 and 4.0.1 is that the Sequence Render Suite was incremented from version 1 to version 2.  If you'd like to use version 1 in 4.0, you can use this definition for RenderVideoFrame:

           

          prSuiteError (*RenderVideoFrame)(
              long                                 inVideoRenderID,
              PrTime                               inTime,
              SequenceRender_ParamsRec*            inRenderParams,
              PrRenderCacheType                    inCacheFlags,
              int                                  getNativeCompressedFrame,
              SequenceRender_GetFrameReturnRec*    getFrameReturn
              );

           

          Note that getNativeCompressedFrame was removed because it isn't used.  You can just set it to 0.

          • 2. Re: Three questions about the CS4 SDK Exporter
            Zac Lam Adobe Employee

            Hi Kazuhiro-san,

             

            We currently do not plan to  publicize the Premiere Export Private Standard Param Suite.  Hopefully  the public suite should be sufficient for your needs.

             

            Also,  I can confirm that bug 1925419 has been fixed in CS5.  So slider parameters defined by your exporter should behave as expected in the upcoming CS5 release.

            • 3. Re: Three questions about the CS4 SDK Exporter
              Peter_Neumann

              Hi Kazuhiro-san,

               

              one more hint to get an exporter working under Elements 8.

               

              In the exSelStartup handler you have to return 18 instead of exportReturn_IterateExporter. Unless it has been fixed in an update meanwhile.

               

              Regards from Osaka,

              Peter

              • 4. Re: Three questions about the CS4 SDK Exporter
                Kengo Mikoshiba

                Hi Peter-san

                 

                When I created my plug-in for Elements8, I had noticed the plug-in didn't operate.
                I used returning exportReturn_ErrNone instead of exportReturn_IterateExporter.
                Because I thought that Elements8 did not support exportReturn_IterateExporter.
                Why did you decide to return 18 (exportReturn_InternalErrorSilent ??) ?

                 

                Regards,

                Kengo Mikoshiba.

                • 5. Re: Three questions about the CS4 SDK Exporter
                  Peter_Neumann Level 1

                  Hi Kengo-san,

                  I was struggling with same problem that the exporter was not recognized.
                  The Adobe Elements team told me to change the return value to 18 to  solve the problem. Somehow they had messed it up in their implementation  so that PE is not CS4 API compatible.

                  An exporter should always return exportReturn_IterateExporter (or 18 for  PE) on the first call. Then on the second call, in case it only  represents only one exporter, return exportReturn_IterateExporterDone.

                  Regards,
                  Peter

                  • 6. Re: Three questions about the CS4 SDK Exporter
                    Kengo Mikoshiba Level 1

                    Hi Peter-san

                     

                    > An exporter should always return exportReturn_IterateExporter (or 18 for  PE) on the first call.
                    > Then on the second call, in case it only  represents only one exporter, return exportReturn_IterateExporterDone.

                     

                      I think so, I hope so.

                      The code that I propose is shown below.

                     

                     

                    #define isElements( fourcc ) (( fourcc == kAppPremiereElements ) ? ( true ) : ( false ))
                    #define RETVAL_FOR_ELEMENTS8 (18)

                     

                    /* Function that is called from exSelStartup */
                    static prMALError Startup( exportStdParms *sp, exExporterInfoRec *ip )
                    {
                        SPBasicSuite *basicsuite = sp->getSPBasicSuite();
                        PrSDKAppInfoSuite *AppInfoSuite;
                        long  appfourcc;
                        VersionInfo versioninfo;
                        basicsuite->AcquireSuite( kPrSDKAppInfoSuite, kPrSDKAppInfoSuiteVersion, (const void **)&AppInfoSuite );
                        AppInfoSuite->GetAppInfo( AppInfoSuite->kAppInfo_AppFourCC, (long *)&appfourcc );
                        AppInfoSuite->GetAppInfo( AppInfoSuite->kAppInfo_Version, (long *)&versioninfo );
                        basicsuite->ReleaseSuite( kPrSDKAppInfoSuite, kPrSDKAppInfoSuiteVersion );


                        /* check host version if needed */
                        ...

                        /* decides return value */
                        r = exportReturn_IterateExporter;
                        if ( isElements( appfourcc ) ) {
                            r = RETVAL_FOR_ELEMENTS8;
                        }

                    .
                    .
                    .

                    }

                     

                    Regards,
                    Kengo Mikoshiba

                    • 7. Re: Three questions about the CS4 SDK Exporter
                      Zac Lam Adobe Employee

                      Below is the definition of the return values in Premiere Elements 8. The red values are unique to Premiere Elements 8, and shifted the subsequent return values 2 values higher than their definition in the Premiere Pro SDK.

                       

                      enum

                      {

                            exportReturn_ErrNone = 0,                 // no error

                            exportReturn_Abort,                             // User aborted the compile

                            exportReturn_Done,                              // Export finished normally

                            exportReturn_InternalError,

                            exportReturn_OutputFormatAccept,                // The output format is valid

                            exportReturn_OutputFormatDecline,               // The compile module cannot compile to the output format

                            exportReturn_OutOfDiskSpace,        // Out of disk space error

                            exportReturn_BufferFull,                  // The offset into the audio buffer would overflow it

                            exportReturn_ErrOther,                    //

                            exportReturn_ErrMemory,                   // ran out of memory

                            exportReturn_ErrFileNotFound,       // File not found

                            exportReturn_ErrTooManyOpenFiles,   // Too many open files

                            exportReturn_ErrPermErr,                  // Permission violation

                            exportReturn_ErrOpenErr,                  // Unable to open the file

                            exportReturn_ErrInvalidDrive,       // Drive isn't valid.

                            exportReturn_ErrDupFile,                  // Duplicate Filename

                            exportReturn_ErrIo,                             // File io error

                            exportReturn_ErrInUse,                    // File is in use

                            exportReturn_IterateExporter,       // Return value from exSelStartup to request Exporter iteration

                            exportReturn_IterateExporterDone,   // Return value from exSelStartup to indicate there are no more Exporters

                            exportReturn_InternalErrorSilent,   /*    Silent error code; host application will not display an error message on screen.

                                                                                        Exporters can return this error code from compDoCompile if they wish to

                                                                                        put their own customized error message on screen just before returning

                                                                                        control.  */

                            exportReturn_ErrCodecBadInput,            // a video codec refused the input format

                            exportReturn_ErrLastErrorSet,       // the Exporter had an error and set a display string for it using the PrSDKErrorSuite.

                            exportReturn_ErrLastWarningSet,           // the Exporter had an warning and set a display string for it using the PrSDKErrorSuite.

                            exportReturn_ErrLastInfoSet,        // the Exporter has an info string to display and set it using the PrSDKErrorSuite.

                            exportReturn_ErrExceedsMaxFormatDuration, // the Exporter (or the host) has deemed the duration of the compile to be too large

                            exportReturn_VideoCodecNeedsActivation,         // the current video codec is not activated and cannot be used.

                            exportReturn_AudioCodecNeedsActivation,         // the current audio codec is not activated and cannot be used.

                            exportReturn_IncompatibleAudioChannelType,      // the requested audio channels are not compatible with the source audio

                            exportReturn_Unsupported = -100           // Unsupported selector

                       

                      };

                       

                      Obviously, this wasn't the right way to add these new return values.