31 #ifndef OPENSHOT_FFMPEG_READER_H
32 #define OPENSHOT_FFMPEG_READER_H
63 bool is_near(
AudioLocation location,
int samples_per_frame, int64_t amount);
97 AVFormatContext *pFormatCtx;
98 int i, videoStream, audioStream;
99 AVCodecContext *pCodecCtx, *aCodecCtx;
100 AVStream *pStream, *aStream;
104 bool is_duration_known;
105 bool check_interlace;
107 bool has_missing_frames;
108 bool use_omp_threads;
112 map<int64_t, int64_t> processing_video_frames;
113 multimap<int64_t, int64_t> processing_audio_frames;
114 map<int64_t, int64_t> processed_video_frames;
115 map<int64_t, int64_t> processed_audio_frames;
116 multimap<int64_t, int64_t> missing_video_frames;
117 multimap<int64_t, int64_t> missing_video_frames_source;
118 multimap<int64_t, int64_t> missing_audio_frames;
119 multimap<int64_t, int64_t> missing_audio_frames_source;
120 map<int64_t, int> checked_frames;
128 int64_t num_packets_since_video_frame;
129 int64_t num_checks_since_final;
130 std::shared_ptr<Frame> last_video_frame;
134 int64_t seeking_frame;
137 int64_t seek_audio_frame_found;
138 int64_t seek_video_frame_found;
140 int64_t audio_pts_offset;
141 int64_t video_pts_offset;
143 int64_t largest_frame_processed;
144 int64_t current_video_frame;
150 bool CheckSeek(
bool is_video);
153 bool CheckMissingFrame(int64_t requested_frame);
156 void CheckWorkingFrames(
bool end_of_stream, int64_t requested_frame);
159 int64_t ConvertFrameToAudioPTS(int64_t frame_number);
162 int64_t ConvertFrameToVideoPTS(int64_t frame_number);
165 int64_t ConvertVideoPTStoFrame(int64_t pts);
168 std::shared_ptr<Frame> CreateFrame(int64_t requested_frame);
180 int64_t GetSmallestVideoFrame();
183 int64_t GetSmallestAudioFrame();
186 int64_t GetVideoPTS();
189 bool IsPartialFrame(int64_t requested_frame);
192 void ProcessVideoPacket(int64_t requested_frame);
195 void ProcessAudioPacket(int64_t requested_frame, int64_t target_frame,
int starting_sample);
198 std::shared_ptr<Frame> ReadStream(int64_t requested_frame);
201 void RemoveAVFrame(AVFrame*);
204 void RemoveAVPacket(AVPacket*);
207 void Seek(int64_t requested_frame);
210 void UpdatePTSOffset(
bool is_video);
213 void UpdateAudioInfo();
216 void UpdateVideoInfo();
248 std::shared_ptr<Frame> GetFrame(int64_t requested_frame);
254 string Name() {
return "FFmpegReader"; };
258 void SetJson(
string value);
259 Json::Value JsonValue();
260 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...
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.