41 #ifndef FILMSTRO_FFMPEG_FFMPEGVIDEOREADER_H_INCLUDED
42 #define FILMSTRO_FFMPEG_FFMPEGVIDEOREADER_H_INCLUDED
134 int openCodecContext (AVCodecContext** decoderContext,
135 enum AVMediaType type,
139 int decodeAudioPacket (AVPacket packet);
142 double decodeVideoPacket (AVPacket packet);
151 juce::WaitableEvent waitForPacket;
154 std::vector<std::pair<double, AVFrame*> > videoFrames;
155 std::atomic<int> videoFifoRead;
156 std::atomic<int> videoFifoWrite;
158 AVFormatContext* formatContext;
159 AVCodecContext* videoContext;
160 AVCodecContext* audioContext;
161 AVCodecContext* subtitleContext;
165 int subtitleStreamIdx;
169 std::atomic<double> currentPTS;
171 juce::ListenerList<FFmpegVideoListener> videoListeners;
174 juce::AudioBuffer<float> buffer;
247 void prepareToPlay (
int samplesPerBlockExpected,
double sampleRate)
override;
252 void getNextAudioBlock (
const juce::AudioSourceChannelInfo &bufferToFill)
override;
285 juce::File videoFileName;
287 bool fileReadyToRead;
295 double resampleFactor;
297 double currentTimeStamp;
299 juce::int64 nextReadPos;
306 juce::WeakReference<FFmpegVideoReader>::Master masterReference;
void addVideoListener(FFmpegVideoListener *listener)
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:410
int getVideoSamplingRate() const
returns the sampling rate as specified in the video file.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:119
void releaseResources() override
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:217
juce::int64 getTotalLength() const override
Returns the total length in samples.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:273
bool waitForNextAudioBlockReady(const juce::AudioSourceChannelInfo &bufferToFill, const int msecs) const
Wait until the decoder thread has finished enough data.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:250
double getFramesPerSecond() const
Return the framerate.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:102
void removeVideoListener(FFmpegVideoListener *listener)
remove a video listener
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:143
AVCodecContext * getSubtitleContext() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:302
AVCodecContext * getAudioContext() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:298
DecoderThread(AudioBufferFIFO< float > &fifo, const int videoFifoSize)
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:311
int getVideoHeight() const
get the height of the video images according to decoder
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:662
virtual ~FFmpegVideoReader()
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:65
enum AVSampleFormat getSampleFormat() const
returns the audio sample format in the video file.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:170
void setCurrentPTS(const double pts, bool seek=false)
set the currently played PTS according to the audio stream
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:603
double getVideoDuration() const
returns the duration of the video in seconds according to the container context
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:114
void getNextAudioBlock(const juce::AudioSourceChannelInfo &bufferToFill) override
decodes packets to fill the audioFifo.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:222
Reads a ffmpeg video file
Definition: filmstro_ffmpeg_FFmpegVideoReader.h:55
double getPixelAspect() const
This will return the aspect ratio of each pixel.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:684
FFmpegVideoReader(const int audioFifoSize=192000, const int videoFifoSize=20)
Constructs a FFmpegVideoReader.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:54
AVCodecContext * getVideoContext() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:739
AVFormatContext * getVideoReaderContext()
Give access to the context to set up writers.
void closeMovieFile()
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:391
class for FFmpegReader to decode audio and images asynchronously This is to keep the audio thread as ...
Definition: filmstro_ffmpeg_FFmpegVideoReader.h:73
void setLooping(bool shouldLoop) override
Tells the source whether you'd like it to play in a loop.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:285
int getVideoWidth() const
get the width of the video images according to decoder
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:654
void setNextReadPosition(juce::int64 newPosition) override
Seeks in the stream.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:259
AVCodecContext * getSubtitleContext() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:747
Definition: filmstro_ffmpeg_FFmpegVideoListener.h:44
enum AVPixelFormat getPixelFormat() const
get the pixel format of the video images according to decoder, will be converted to BGR0 to be displa...
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:175
double getVideoAspectRatio() const
returns the aspect ratio video frame
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:158
int getVideoHeight() const
get the height of the video images according to decoder
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:153
AVRational getVideoTimeBase() const
This will return the time_base from the video stream.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:180
void run() override
working loop
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:560
double getCurrentPTS() const
returns the presentation timestamp the video is synchronised to
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:649
AVRational getVideoTimeBase() const
This will return the time_base from the video stream.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:691
bool loadMovieFile(const juce::File &inputFile)
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:76
bool isLooping() const override
Returns true if this source is actually playing in a loop.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:279
static juce::String formatTimeCode(const double tc)
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:185
double getCurrentTimeStamp() const
Get current presentation timecode according to audio stream.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:107
AVCodecContext * getVideoContext() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:294
bool loadMovieFile(const juce::File &inputFile)
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:350
void prepareToPlay(int samplesPerBlockExpected, double sampleRate) override
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:207
virtual ~DecoderThread()
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:337
void addVideoListener(FFmpegVideoListener *listener)
add a listener to receive video frames for displaying and to get timestamp notifications.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:138
AVCodecContext * getAudioContext() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:743
int getVideoChannels() const
returns the number of audio channels in the video file.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:124
double getVideoPixelAspect() const
This will return the aspect ratio of each pixel.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:165
double getFramesPerSecond() const
Return the framerate.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:701
juce::File getVideoFileName() const
Returns the currently opened video file.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:97
int getNumChannels() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:731
int getVideoWidth() const
get the width of the video images according to decoder
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:148
juce::int64 getNextReadPosition() const override
Returns the sample count of the next sample to be returned by getNextAudioBlock.
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:267
void closeMovieFile()
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:91
double getSampleRate() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:715
void removeVideoListener(FFmpegVideoListener *listener)
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:415
enum AVPixelFormat getPixelFormat() const
get the pixel format of the video images according to decoder, will be converted to BGR0 to be displa...
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:677
enum AVSampleFormat getSampleFormat() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:670
double getDuration() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:723
double getLastVideoPTS() const
Definition: filmstro_ffmpeg_FFmpegVideoReader.cpp:133