31 #ifndef OPENSHOT_FFMPEG_READER_H
32 #define OPENSHOT_FFMPEG_READER_H
65 bool is_near(
AudioLocation location,
int samples_per_frame, int64_t amount);
99 AVFormatContext *pFormatCtx;
100 int i, videoStream, audioStream;
101 AVCodecContext *pCodecCtx, *aCodecCtx;
102 AVStream *pStream, *aStream;
106 bool is_duration_known;
107 bool check_interlace;
109 bool has_missing_frames;
113 map<int64_t, int64_t> processing_video_frames;
114 multimap<int64_t, int64_t> processing_audio_frames;
115 map<int64_t, int64_t> processed_video_frames;
116 map<int64_t, int64_t> processed_audio_frames;
117 multimap<int64_t, int64_t> missing_video_frames;
118 multimap<int64_t, int64_t> missing_video_frames_source;
119 multimap<int64_t, int64_t> missing_audio_frames;
120 multimap<int64_t, int64_t> missing_audio_frames_source;
121 map<int64_t, int> checked_frames;
129 int64_t num_packets_since_video_frame;
130 int64_t num_checks_since_final;
131 std::shared_ptr<Frame> last_video_frame;
135 int64_t seeking_frame;
138 int64_t seek_audio_frame_found;
139 int64_t seek_video_frame_found;
141 int64_t audio_pts_offset;
142 int64_t video_pts_offset;
144 int64_t largest_frame_processed;
145 int64_t current_video_frame;
151 bool CheckSeek(
bool is_video);
154 bool CheckMissingFrame(int64_t requested_frame);
157 void CheckWorkingFrames(
bool end_of_stream, int64_t requested_frame);
160 int64_t ConvertFrameToAudioPTS(int64_t frame_number);
163 int64_t ConvertFrameToVideoPTS(int64_t frame_number);
166 int64_t ConvertVideoPTStoFrame(int64_t pts);
169 std::shared_ptr<Frame> CreateFrame(int64_t requested_frame);
181 int64_t GetSmallestVideoFrame();
184 int64_t GetSmallestAudioFrame();
187 int64_t GetVideoPTS();
190 bool IsPartialFrame(int64_t requested_frame);
193 void ProcessVideoPacket(int64_t requested_frame);
196 void ProcessAudioPacket(int64_t requested_frame, int64_t target_frame,
int starting_sample);
199 std::shared_ptr<Frame> ReadStream(int64_t requested_frame);
202 void RemoveAVFrame(AVFrame*);
205 void RemoveAVPacket(AVPacket*);
208 void Seek(int64_t requested_frame);
211 void UpdatePTSOffset(
bool is_video);
214 void UpdateAudioInfo();
217 void UpdateVideoInfo();
249 std::shared_ptr<Frame> GetFrame(int64_t requested_frame);
255 string Name() {
return "FFmpegReader"; };
259 void SetJson(
string value);
260 Json::Value JsonValue();
261 void SetJsonValue(Json::Value root);
Header file for ReaderBase class.
Header file for OpenMPUtilities (set some common macros)
CacheMemory * GetCache()
Get the cache object used by this reader.
This abstract class is the base class, used by all readers in libopenshot.
Header file for CacheMemory class.
bool IsOpen()
Determine if reader is open or closed.
Header file for all Exception classes.
This class uses the FFmpeg libraries, to open video files and audio files, and return openshot::Frame...
Header file for Clip class.
Header file for global Settings class.
This struct holds the associated video frame and starting sample # for an audio packet.
CacheMemory final_cache
Final cache object used to hold final frames.
string Name()
Return the type name of the class.
Header file for FFmpegUtilities.
This class is a memory-based cache manager for Frame objects.