Open Search

    About

    A BaseVideoPost object represents a video post effect in the render settings. Such a video post can be a simple filter or a complete render engine. Custom video posts can be created using the VideoPostData class.

    BaseVideoPost objects are an instance of VPbase.

    // This example searches for the "Watermark" post effect and enables it.
    // If it does not exist, it is added.
    const Int watermarkID = 1025462;
    RenderData* const renderData = doc->GetActiveRenderData();
    BaseVideoPost* videoPost = renderData->GetFirstVideoPost();
    BaseVideoPost* watermark = nullptr;
    // search for the "Watermark" video post
    while (videoPost != nullptr)
    {
    // check if this is a "Watermark"
    if (videoPost->GetType() == watermarkID)
    {
    watermark = videoPost;
    break;
    }
    videoPost = videoPost->GetNext();
    }
    // if not found, create the watermark
    if (watermark == nullptr)
    {
    watermark = BaseVideoPost::Alloc(watermarkID);
    if (watermark == nullptr)
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    renderData->InsertVideoPost(watermark);
    }
    // enable
    watermark->DelBit(BIT_VPDISABLED);
    void DelBit(Int32 mask)
    Definition: c4d_baselist.h:2315
    Definition: c4d_videopost.h:24
    static BaseVideoPost * Alloc(Int32 type)
    BaseVideoPost * GetNext() const
    Definition: c4d_videopost.h:56
    Int32 GetType() const
    Definition: c4d_baselist.h:1412
    Definition: c4d_basedocument.h:143
    void InsertVideoPost(BaseVideoPost *pvp, BaseVideoPost *pred=nullptr)
    BaseVideoPost * GetFirstVideoPost()
    maxon::Int Int
    Definition: ge_sys_math.h:64
    #define BIT_VPDISABLED
    Videopost is disabled.
    Definition: ge_prepass.h:923
    #define MAXON_SOURCE_LOCATION
    Definition: memoryallocationbase.h:67
    const char * doc
    Definition: pyerrors.h:226

    Access

    BaseVideoPost elements are stored in an RenderData object:

    See also RenderData Manual.

    Allocation/Deallocation

    BaseVideoPost object are created with the usual tools:

    Newly created BaseVideoPost objects can be added to the render settings by adding them to the RenderData object:

    // This example adds the color correction video post to the current render settings.
    RenderData* const renderData = doc->GetActiveRenderData();
    if (renderData == nullptr)
    return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
    if (colorCorrection == nullptr)
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    renderData->InsertVideoPost(colorCorrection);
    #define VPcolorcorrection
    Color correction.
    Definition: c4d_videopostdata.h:225

    Navigation

    BaseVideoPost objects are organized in a list. This list can be navigated with:

    // This example loops through all video posts and prints their names.
    RenderData* const renderData = doc->GetActiveRenderData();
    BaseVideoPost* videoPost = renderData->GetFirstVideoPost();
    while (videoPost != nullptr)
    {
    ApplicationOutput("Video post name: " + videoPost->GetName());
    videoPost = videoPost->GetNext();
    }
    String GetName() const
    Definition: c4d_baselist.h:2412
    #define ApplicationOutput(formatString,...)
    Definition: debugdiagnostics.h:210

    Properties

    The parameters of a video post can be accessed through C4DAtom::GetParameter() and C4DAtom::SetParameter(). The IDs of these parameters are defined in the header file of the specific video post like vpxmbsampler.h, vppreviewhardware.h, vpwatermark.h etc.

    Read-Only Properties

    Not every video post can be combined with every render engine. It is needed to ask the BaseVideoPost object if it can be used with the given render engine.

    // This example checks if the video post can be added to used render engine
    RenderData* const renderData = doc->GetActiveRenderData();
    // check render engine
    BaseContainer& bc = renderData->GetDataInstanceRef();
    const Int32 renderEngine = bc.GetInt32(RDATA_RENDERENGINE);
    // create new video post
    BaseVideoPost* watermark = BaseVideoPost::Alloc(1025462);
    if (watermark == nullptr)
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    // check if the video post is compatible with the given render engine
    if (watermark->RenderEngineCheck(renderEngine))
    {
    // insert video post
    renderData->InsertVideoPost(watermark);
    }
    else
    {
    // delete video post
    ApplicationOutput("This video post cannot work with the current render engine.");
    BaseVideoPost::Free(watermark);
    }
    Definition: c4d_basecontainer.h:48
    Int32 GetInt32(Int32 id, Int32 preset=0) const
    Definition: c4d_basecontainer.h:340
    const BaseContainer & GetDataInstanceRef() const
    Definition: c4d_baselist.h:2386
    Bool RenderEngineCheck(Int32 id) const
    static void Free(BaseVideoPost *&bl)
    @ RDATA_RENDERENGINE
    Definition: drendersettings.h:39
    maxon::Int32 Int32
    Definition: ge_sys_math.h:60

    Stereo

    A video post could also handle stereoscopic related functionality. By default the only existing video post that does handle stereoscopic images is the stereo video post (ID 450000225). To check if a plugin video post handles stereo images check the flag PLUGINFLAG_VIDEOPOST_STEREO_RENDERING. The source and target bitmap data is stored as a BaseBitmap (see BaseBitmap Manual).

    // This example merges the two given BaseBitmaps in the src array into a single anaglyph bitmap
    AutoAlloc<BaseVideoPost> stereoVP { 450000225 };
    if (stereoVP == nullptr)
    return maxon::OutOfMemoryError(MAXON_SOURCE_LOCATION);
    BaseContainer settings;
    // merge bitmaps
    if (stereoVP->StereoMergeImages(targetBitmap, src, 2, settings, COLORSPACETRANSFORMATION::NONE) == false)
    return maxon::UnknownError(MAXON_SOURCE_LOCATION);
    // show the result image
    ShowBitmap(targetBitmap);
    Bool ShowBitmap(const Filename &fn)
    Definition: ge_autoptr.h:37
    void SetInt32(Int32 id, Int32 l)
    Definition: c4d_basecontainer.h:579
    PyObject * src
    Definition: abstract.h:305
    @ RDATA_STEREO_MODE_ANAGLYPH
    Definition: drendersettings.h:431
    @ RDATA_STEREO_MODE
    Definition: drendersettings.h:430

    See also CameraObject Manual.

    Bits

    If a videopost is enabed or not is controlled with a bit:

    // This example disables the first video post.
    RenderData* const rd = doc->GetActiveRenderData();
    if (rd == nullptr)
    return maxon::UnexpectedError(MAXON_SOURCE_LOCATION);
    BaseVideoPost* const vp = rd->GetFirstVideoPost();
    if (vp != nullptr)
    void SetBit(Int32 mask)
    Definition: c4d_baselist.h:2302

    Further Reading