File indexing completed on 2026-09-22 08:58:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef _Graphic3d_MediaTextureSet_HeaderFile
0016 #define _Graphic3d_MediaTextureSet_HeaderFile
0017
0018 #include <Media_IFrameQueue.hxx>
0019 #include <Graphic3d_MediaTexture.hxx>
0020 #include <Graphic3d_TextureSet.hxx>
0021
0022 #include <mutex>
0023
0024 class Graphic3d_ShaderProgram;
0025 class Media_PlayerContext;
0026
0027
0028 class Graphic3d_MediaTextureSet : public Graphic3d_TextureSet, public Media_IFrameQueue
0029 {
0030 DEFINE_STANDARD_RTTIEXT(Graphic3d_MediaTextureSet, Graphic3d_TextureSet)
0031 public:
0032
0033 typedef void (*CallbackOnUpdate_t)(void* theUserPtr);
0034
0035 public:
0036
0037 Standard_EXPORT Graphic3d_MediaTextureSet();
0038
0039
0040 Standard_EXPORT void SetCallback(CallbackOnUpdate_t theCallbackFunction,
0041 void* theCallbackUserPtr);
0042
0043
0044 Standard_EXPORT void Notify();
0045
0046
0047 const TCollection_AsciiString& Input() const { return myInput; }
0048
0049
0050
0051 Standard_EXPORT void OpenInput(const TCollection_AsciiString& thePath, bool theToWait);
0052
0053
0054 const occ::handle<Media_PlayerContext>& PlayerContext() const { return myPlayerCtx; }
0055
0056
0057 Standard_EXPORT bool SwapFrames();
0058
0059
0060 NCollection_Vec2<int> FrameSize() const { return myFrameSize; }
0061
0062
0063 occ::handle<Graphic3d_ShaderProgram> ShaderProgram() const
0064 {
0065 if (myIsPlanarYUV)
0066 {
0067 return myIsFullRangeYUV ? myShaderYUVJ : myShaderYUV;
0068 }
0069 return occ::handle<Graphic3d_ShaderProgram>();
0070 }
0071
0072
0073 bool IsPlanarYUV() const { return myIsPlanarYUV; }
0074
0075
0076 bool IsFullRangeYUV() const { return myIsFullRangeYUV; }
0077
0078
0079 double Duration() const { return myDuration; }
0080
0081
0082 double Progress() const { return myProgress; }
0083
0084
0085 private:
0086
0087 Standard_EXPORT occ::handle<Media_Frame> LockFrame() override;
0088
0089
0090 Standard_EXPORT void ReleaseFrame(const occ::handle<Media_Frame>& theFrame) override;
0091
0092 protected:
0093 occ::handle<Media_PlayerContext> myPlayerCtx;
0094 occ::handle<Media_Frame> myFramePair[2];
0095 occ::handle<Graphic3d_ShaderProgram> myShaderYUV;
0096 occ::handle<Graphic3d_ShaderProgram> myShaderYUVJ;
0097 std::mutex myMutex;
0098 TCollection_AsciiString myInput;
0099 CallbackOnUpdate_t myCallbackFunction;
0100 void* myCallbackUserPtr;
0101 NCollection_Vec2<int> myFrameSize;
0102 double myProgress;
0103 double myDuration;
0104 int myFront;
0105 bool myToPresentFrame;
0106
0107 bool myIsPlanarYUV;
0108 bool myIsFullRangeYUV;
0109
0110 };
0111
0112 #endif