Commit Graph

76 Commits

Author SHA1 Message Date
Jonathan Thomas 612bb25f5f Fixed the FFMpegReader to discard the first audio and video frames it finds after a seek, since they sometimes are missing information. This fixed many issues with the time mapping curves and audio reversing and fast forwarding. 2012-10-22 17:05:34 -05:00
Jonathan Thomas 48bef6b566 Removed some unneeded methods, due to the previous refactor involving shared_ptr objects. They no longer require some special overloads which "delete" the objects in the cache. 2012-10-14 21:09:22 -05:00
Jonathan Thomas 617088cebf Yet another huge refactor, to use shared_ptr objects instead of actual pointers, due to the difficulties in managing the lifecycle of pointers between the timeline, clip, and readers. Seems to work great, and solves all sorts of bugs. =) 2012-10-14 03:43:52 -05:00
Jonathan Thomas eace9f5efd Fixed a regression with disabling seek on the FFmpegReader. It runs slower than seeking, but has no artifacts of seeking, and is frame accurate. 2012-10-12 20:50:28 -05:00
Jonathan Thomas a601bcef2d Another huge refactor and lots of big fixes! Time mapping now works... mostly. The jumpy / glitchy images have been solved by copying the AVFrame into an AVPicture, which does not get clobbered on the next decode.
Also, added a new frame number overaly (in the top, left part of the image), and a new AddColor() method, to change the size and color of the frame's image...

Padded the end of the FFmpegWriter / WriteTrailer() method, to avoid having a codec ignore the last many frames.
2012-10-12 00:54:53 -05:00
Jonathan Thomas cebf9728c8 Refactored seek method a bit in the FFmpegReader, to fix some bugs. Also, being changing the cache object again, on how it cleans up pointers. Some debug code is checked in also. 2012-10-10 17:27:46 -05:00
Jonathan Thomas 60e645da61 Added a FrameRate() method to the timeline, to get or set the fps. Also, added a unit test for that, and refactored some header files to be alphabetical. 2012-10-10 01:07:47 -05:00
Jonathan Thomas 1d89fd140a A big refactor of the Open() method on Readers, and the constructor of Readers. All resource consuming code has been moved into the Open() methods, so the Clips and Timeline can control them better. 2012-10-09 01:45:34 -05:00
Jonathan Thomas 8518071890 Protected the Open() and Close() methods better, so the FFmpegReader will not crash. Also, made the Open() method public, so the Timeline and Clip classes can control the reader better. 2012-10-08 15:02:52 -05:00
Jonathan Thomas d1af1b5fef Huge refactor, switched almost all methods to using pointers for Frames, and moved some key method calls outside the critical OMP sections. Also, refactored the sws scaler, to create a pool of 32 scalers, and give each thread it's own scaler. This refactor resulted in a 40%+ increase in speed on the FFmpegReader class.
I also added a cmake build flag for the google perftools library, to assist on profiling performance issues.
2012-08-15 17:27:14 -05:00
Jonathan Thomas 461212c4b2 Fixed doxygen param bug, and updated project plan progress 2012-07-13 16:56:39 -05:00
Jonathan Thomas 1e5cffd6db Added the initial API of the FFmpegWriter class, and tweaked the build scripts and reader class. 2012-07-12 15:55:41 -05:00
Jonathan Thomas 0e233be34e Added new unit tests for FFmpegReader, which tests actual pixel color values against a test video on 2 different frames. Also, made Seek() method private. 2012-07-09 01:44:36 -05:00
Jonathan Thomas dfae7825ca Refactored FFmpegReader code a bit, fixed many, many memory leaks, and many valgrind errors. Now the memory seems very stable, and the seeking and stream walking seems very solid. 2012-07-08 23:26:44 -05:00
Jonathan Thomas 21aa4d6b01 Replaced last_video_frame and last_audio_frame with a single last_frame variable, and refactored some related code. This fixes a big audio seeking bug. 2012-07-06 15:17:57 -05:00
Jonathan Thomas 457df5b2ff Changed the method of determining if a frame is completed or not. 2012-07-06 02:34:18 -05:00
Jonathan Thomas e8d9dba8ce Started adding clean up code, to reduce memory footprint 2012-07-03 16:58:07 -05:00
Jonathan Thomas fde25cec5a Lots of experimental changes with the FFmpegReader, and caching of packets. 2012-07-02 00:51:10 -05:00
Jonathan Thomas 403c7e512e Fixed 2 bugs related to audio samples. Each frame can now determine it's own # of samples, due to some sample rates not being divisible evenly into some frame rates. Also, a bug was fixed that injected a bad sample into a frame's samples, when a frame received samples from multiple audio packets. 2012-02-26 16:40:53 -06:00
Jonathan Thomas da289f93bf Fixed a bug where audio was not being resampled to the correct sample format. Also fixed a bug where the audio buffer was not being incremented correctly, and it was duplicating audio samples. There are still a few audio bugs, but it's mostly working now. 2011-12-18 02:29:34 -06:00
Jonathan Thomas f00c4206be Added a method to get the average # of frames over the initial 5 seconds of video, and adjust an invalid framerate, which sometimes FFmpeg detects. Also, a Reader only initializes it's default values 1 time, and only checks frame rate 1 time, regardless of how many times your Open() and Close() the reader. 2011-12-15 16:11:48 -06:00
Jonathan Thomas ade29c7d68 Fixed tons of issues related to video timebase being different than the video framerate. Also, added new properties for interlaced video, correctly detect pixel ratio, and fixed Display() to adjust for pixel ratio. Also added sample_rate to a frame, so it can playback audio at the correct rate. Refactored FFmpegReader to make most methods private, and only expose the important methods publicly. 2011-12-11 20:42:50 -06:00
Jonathan Thomas 26083f27b7 Fixed a rounding error on mapping audio samples to frames. Also adjusted the sample rate on the frame.Play() method to 48khz. 2011-10-26 14:34:14 -05:00
Jonathan Thomas 43fd6c33d0 Some major refactoing of the FFmpegReader, to allow for audio and video packets that are out of order. 2011-10-24 08:22:21 -05:00
Jonathan Thomas 1faa168fb3 Began to refactor the FFmpegReader to correctly save the audio samples with the correct frame. 2011-10-14 09:47:05 -05:00