Warning, file /include/opencascade/Media_PlayerContext.hxx was not indexed
or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef _Media_PlayerContext_HeaderFile
0016 #define _Media_PlayerContext_HeaderFile
0017
0018 #include <Media_IFrameQueue.hxx>
0019 #include <Media_Timer.hxx>
0020 #include <OSD_Thread.hxx>
0021 #include <Standard_Condition.hxx>
0022 #include <Standard_Mutex.hxx>
0023 #include <Standard_Transient.hxx>
0024 #include <Standard_Type.hxx>
0025 #include <TCollection_AsciiString.hxx>
0026
0027 class Media_BufferPool;
0028 class Media_CodecContext;
0029 class Media_FormatContext;
0030 class Media_Scaler;
0031
0032
0033 class Media_PlayerContext : public Standard_Transient
0034 {
0035 DEFINE_STANDARD_RTTIEXT(Media_PlayerContext, Standard_Transient)
0036 public:
0037
0038
0039
0040 Standard_EXPORT static Handle(Media_Frame) DumpFirstFrame(
0041 const TCollection_AsciiString& theSrcVideo,
0042 TCollection_AsciiString& theMediaInfo);
0043
0044
0045
0046
0047
0048
0049 Standard_EXPORT static bool DumpFirstFrame(const TCollection_AsciiString& theSrcVideo,
0050 const TCollection_AsciiString& theOutImage,
0051 TCollection_AsciiString& theMediaInfo,
0052 int theMaxSize = 0);
0053
0054 public:
0055
0056
0057
0058 Standard_EXPORT Media_PlayerContext(Media_IFrameQueue* theFrameQueue);
0059
0060
0061 Standard_EXPORT virtual ~Media_PlayerContext();
0062
0063 public:
0064
0065 Standard_EXPORT void SetInput(const TCollection_AsciiString& theInputPath,
0066 Standard_Boolean theToWait);
0067
0068
0069 Standard_EXPORT void PlaybackState(Standard_Boolean& theIsPaused,
0070 Standard_Real& theProgress,
0071 Standard_Real& theDuration);
0072
0073
0074 Standard_EXPORT void PlayPause(Standard_Boolean& theIsPaused,
0075 Standard_Real& theProgress,
0076 Standard_Real& theDuration);
0077
0078
0079 Standard_EXPORT void Seek(Standard_Real thePosSec);
0080
0081
0082 void Pause() { pushPlayEvent(Media_PlayerEvent_PAUSE); }
0083
0084
0085 void Resume() { pushPlayEvent(Media_PlayerEvent_RESUME); }
0086
0087
0088
0089 bool ToForceRgb() const { return myToForceRgb; }
0090
0091
0092 void SetForceRgb(bool theToForce) { myToForceRgb = theToForce; }
0093
0094 private:
0095
0096 enum Media_PlayerEvent
0097 {
0098 Media_PlayerEvent_NONE = 0,
0099 Media_PlayerEvent_PAUSE,
0100 Media_PlayerEvent_RESUME,
0101 Media_PlayerEvent_SEEK,
0102 Media_PlayerEvent_NEXT,
0103 };
0104
0105 private:
0106
0107 Standard_EXPORT void doThreadLoop();
0108
0109
0110 Standard_EXPORT void pushPlayEvent(Media_PlayerEvent thePlayEvent);
0111
0112
0113 Standard_EXPORT bool popPlayEvent(Media_PlayerEvent& thePlayEvent,
0114 const Handle(Media_FormatContext)& theFormatCtx,
0115 const Handle(Media_CodecContext)& theVideoCtx,
0116 const Handle(Media_Frame)& theFrame);
0117
0118
0119 bool receiveFrame(const Handle(Media_Frame)& theFrame,
0120 const Handle(Media_CodecContext)& theVideoCtx);
0121
0122
0123 static Standard_Address doThreadWrapper(Standard_Address theData)
0124 {
0125 Media_PlayerContext* aThis = (Media_PlayerContext*)theData;
0126 aThis->doThreadLoop();
0127 return 0;
0128 }
0129
0130 private:
0131 Media_IFrameQueue* myFrameQueue;
0132 OSD_Thread myThread;
0133 Standard_Mutex myMutex;
0134
0135 Standard_Condition myWakeEvent;
0136 Standard_Condition myNextEvent;
0137 Media_Timer myTimer;
0138 Standard_Real myDuration;
0139
0140 Handle(Media_BufferPool) myBufferPools[4];
0141 Handle(Media_Frame) myFrameTmp;
0142 Handle(Media_Scaler) myScaler;
0143 bool myToForceRgb;
0144
0145
0146 volatile bool myToShutDown;
0147 TCollection_AsciiString myInputPath;
0148 volatile Standard_Real mySeekTo;
0149 volatile Media_PlayerEvent myPlayEvent;
0150 };
0151
0152 #endif