summaryrefslogtreecommitdiffstats
path: root/libhb/render.c
Commit message (Collapse)AuthorAgeFilesLines
* Rework filter pipelinejstebbins2012-03-271-950/+0
| | | | | | | | | | | | | | | | | | | | This patch enhances the filter objects. The 2 key improvements are: 1. A filter can change the image dimensions as frames pass through it. 2. A filter can output more than one frame. In addition, I have: Moved cropping & scalling into a filter object Added 90 degree rotation to the rotate filter Moved subtitle burn-in rendering to a filter object. Moved VFR/CFR handling into a framerate shaping filter object. Removed render.c since all it's responsibilities got moved to filters. Improves VOBSUB and SSA subtitle handling. Allows subtitle animations. SSA karaoke support. My apologies in advance if anything breaks ;) git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4546 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Fix loop counter decrement in CFR frame duplication code. CFR would never ↵Rodeo2012-03-211-1/+1
| | | | | | duplicate a frame more than once, causing major A/V desync when the output framerate was over twice that of the input. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4523 b64f7644-9d1e-0410-96f1-a4d463321fa5
* make build_gamma_lut staticjstebbins2011-10-201-1/+1
| | | | | | | | This function is specific to renderers duplicate frame detection method and conflicts with the decomb3 patch with uses a floating point gamma lut. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4300 b64f7644-9d1e-0410-96f1-a4d463321fa5
* detect progressive upsampling in vfrjstebbins2011-10-171-10/+163
| | | | | | | | | | progressive 23.976 fps content that has upsampled to progressive 59.94 fps can result in juddery output if you don't drop the "right" frames while downsampling back to 23.976. This adds a test that computes the sum of squared errors between 2 candidate frames to drop and makes a more intelligent decision based on this metric. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4297 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Eliminate incompatible pointer type warnings for sws_scalejstebbins2011-04-081-1/+2
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3910 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Simplify a lot of subtitle handling code.jstebbins2011-03-271-41/+19
| | | | | | | Makes it easier to read. Gets rid of some unnecessary variables. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3886 b64f7644-9d1e-0410-96f1-a4d463321fa5
* cosmetics and improved commentsjstebbins2011-03-131-2/+2
| | | | | | | Thanks Rodeo ;) git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3849 b64f7644-9d1e-0410-96f1-a4d463321fa5
* fix 2 pass cfr x264 crashjstebbins2011-03-131-7/+13
| | | | | | | | | | | An error in interjob->vrate calculation lead to specifying a different timebase for the 1st and 2nd pass which x264 does not allow. This improves the interjob->vrate calculation accuracy and also guarantees the timebase is the same on both passes regardless of the calculations accuracy. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3848 b64f7644-9d1e-0410-96f1-a4d463321fa5
* make keyint match between 1st and 2nd passes of vfr and pfr encodes.jstebbins2011-03-081-1/+8
| | | | | | | | | | | | make keyint and fps settings consistent across video encoders. make interjob->vrate changes for pfr mode like we do for vfr since pfr is the same as vfr except when it hits it's peak. in mkv, set track default duration to actual measured vrate on 2 pass encodes. thanks to Rodeo for the corrections in encx264 git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3831 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Add temporally overlapping subtitle support.davidfstr2011-02-251-16/+47
| | | | | | | | | | | | | | | | | * New subtitle sync algorithm added to sync work-object ("simultaneous"). Classic algorithm preserved but disabled. * Render work-object now supports queueing a /list/ of subtitles. * FIFOs have been extended to support pushing/popping buffer-lists as single elements. * Added SUBSYNC_VERBOSE_TIMING flag to debug timing issues related to subtitle display. Observable behaviors changed in the new subtitle sync algorithm: * Temporally overlapping subtitles are no longer trimmed to be non-overlapping. * Subtitles less than two seconds long are no longer artificially extended. Sorry, Indochine fans. * Subtitles that stop before they start will never be displayed. The old algorithm will display such subtitles if they begin in the future (relative to the current video frame being processed). git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3804 b64f7644-9d1e-0410-96f1-a4d463321fa5
* bump ffmpeg from 25082 to 25374jstebbins2010-10-121-2/+2
| | | | | | | fixes h264 decoding issue git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3599 b64f7644-9d1e-0410-96f1-a4d463321fa5
* SSA subtitle burn injstebbins2010-09-281-5/+14
| | | | | | | | | | Anime fans rejoice! This patch adds SSA subtitle burn-in support with libass. Therefore SSA subtitles should now be rendered in full quality, with the appropriate embedded fonts and positioning information. Thanks to davidfstr git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3557 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Reduce the amount of buffering used and eliminate hb_snooze in the encoding ↵jstebbins2009-12-051-2/+2
| | | | | | | | | | | | | | | | | | | | | | pipeline For HD sources on an 8 core system with hyperthreading, we were using 1.5GB of ram. Add to that the 600MB x264 uses for rc-lookahead, pushes it north of 2GB. To reduce our memory usage, the fifo depths have been reduced are are no longer a multiple of cpu count. Use of hb_snooze has been eliminated in the encoding pipeline so that performance doesn't fall as a result of the reduced fifo depths. In sync, each audio and video were given separate threads so that each can wait on it's respective input fifo without blocking the others. In muxcommon, each stream being muxed was given a separate thread so that each can wait on it's respective fifo. This allows the removal of hb_snooze in the sync and muxer work loops. In both sync and muxer, there is common data that is shared by all threads, so special init routines allocate this shared data and initialize the threads. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@3007 b64f7644-9d1e-0410-96f1-a4d463321fa5
* When caching frame durations for the delay_queue, store the times of the ↵jbrjake2009-07-081-1/+1
| | | | | | frames coming out of the filters, not the frames entering the render pipeline from sync. This way times don't get assigned to incorrect frames when filters delay output. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2671 b64f7644-9d1e-0410-96f1-a4d463321fa5
* - cleanup gcc format warnings showing up on linux 64-bitkonablend2009-06-251-3/+3
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2619 b64f7644-9d1e-0410-96f1-a4d463321fa5
* - nasty bug: at eof, dropping a delay queue frame for CFR could link the ↵van2009-06-071-0/+1
| | | | | | | | | | render video output to the free list causing hangs and/or garbage output. - since frame rate conversion moved from sync to render, sync has to use input (title) frame rate, not output (job) frame rate. - get rid of 'too many frames' check in sync. it can't be done here because it causes reader to deadlock and it belongs in the dvd reader anyway (only dvd input can loop). git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2496 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Adds an interjob structure to preserve some encode data across jobs within ↵jbrjake2009-06-041-0/+5
| | | | | | an instance of libhb. This allows correcting the estimated bitrate/filesize of 2-pass encodes of variable framerate content, as the actual frame count is known after the first pass. Thanks for putting the idea into code, Shaya. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2482 b64f7644-9d1e-0410-96f1-a4d463321fa5
* - Move frame rate code from sync to the end of render so it can account for ↵van2009-05-021-36/+172
| | | | | | | | | | | | frame timing changes made by filters. - Fix a bug that would make CFR alternate between massive drops and massive dups on some titles. - If we're not doing CFR add a factor-of-two fudge factor to init_delay to account f or the awful clock resolution of some mkvs and mp4s. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2368 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Flush frames from the delay queue in render. This should add an extra couple ↵jbrjake2009-03-311-4/+36
| | | | | | of frames to the end of output when using same as source fps or vfr detelecine. Thanks, eddyg! git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2285 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Re-enable libswscale accurate rounding on x86_64.saintdev2009-03-021-4/+1
| | | | | | The libswscale bug causing crashes was fixed a while ago. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2191 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Consolidate all the ffmpeg-related includes into libhb/hbffmpeg.h then ↵van2008-12-131-3/+1
| | | | | | prototype hb_avcodec_{init,open,close} so that we don't get gcc warnings from a dozen modules. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@2025 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Correct chroma size for raw video frames - width & height need to be rounded ↵van2008-11-081-4/+4
| | | | | | up if they're odd before dividing by 2. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1905 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Wait until 4 frames are stashed in the delay_queue before outputting any ↵jbrjake2008-09-291-2/+1
| | | | | | frames from render when using VFR detelecine. With only 3, the array storing previous time stamp isn't full when the first frame's outputted, throwing off AV sync. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1787 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Fix subtitle scan to work with new stream eof logic.van2008-07-261-2/+3
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1584 b64f7644-9d1e-0410-96f1-a4d463321fa5
* - support blu-ray, avchd & dvb x264van2008-05-311-2/+2
| | | | | | | - support video files handled by ffmpeg (avi, mkv, mp4, etc.) git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1480 b64f7644-9d1e-0410-96f1-a4d463321fa5
* ...on the other hand, when we *are* using VFR we *do* want to break on ↵jbrjake2008-05-211-0/+1
| | | | | | drops, so we're not trying to filter null frames. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1468 b64f7644-9d1e-0410-96f1-a4d463321fa5
* When using detelecine but not dropping frames (non-VFR detelecine), continue ↵jbrjake2008-05-211-1/+0
| | | | | | looping through the filter chain if the detelecine filter says to drop a frame. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1467 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Saearch & Replace domain names to move from .m0k.org to handbrake.fr. Only ↵jbrjake2008-04-151-1/+1
| | | | | | covers trunk files, libhb, and test. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1418 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Fix the automatic subtitle scan that I broke with r1412.van2008-04-141-2/+2
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1413 b64f7644-9d1e-0410-96f1-a4d463321fa5
* When dropping frames from pullup for VFR, deallocate the associated subtitle ↵jbrjake2008-04-131-1/+4
| | | | | | | | buffers instead of just hb_fifo_get-ing them into nowhere. This should plug the crash-inducing memory leak Cyander noticed. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1410 b64f7644-9d1e-0410-96f1-a4d463321fa5
* libswscale accurate rounding is now re-enabled for all arches except x86_64.saintdev2008-03-211-1/+7
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1353 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Formatting: Remove a lot of trailing whitespace.saintdev2008-02-211-74/+74
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1307 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Only store chapter markers separate from their buffers when doing VFR.jbrjake2008-02-181-1/+1
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1285 b64f7644-9d1e-0410-96f1-a4d463321fa5
* You know what I said in r1271 about not using the delay_queue except when ↵jbrjake2008-02-181-5/+1
| | | | | | VFR is enabled? This time, I mean it. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1283 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Only futz with frame durations at render-time when using VFR.jbrjake2008-02-181-1/+1
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1281 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Fixes crashes with 2-pass when b-frames are enabled, by only using the ↵jbrjake2008-02-161-2/+10
| | | | | | delay_queue in render.c to actually delay frames when VFR is enabled. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1271 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Variable frame rate improvements.jbrjake2008-02-041-34/+111
| | | | | | | | | - Makes it work better with the source's time stamps and avoids discontinuities, by removing its lazy assumption that all frames are 3003 ticks long. - Handles more than 1 frame being dropped out of 5. - Preserves chapter markers from being dropped along with frames they're attached to (thanks van!). - Also, since VFR no longer requires input at 29.97 fps, removes the hard-coding of that frame rate. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1249 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Maintains separate filter settings for each job. This prevents the MacGui ↵jbrjake2008-01-221-19/+0
| | | | | | from using the same filter settings for every job in the queue. Patch from travistex. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1228 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Prevents VFR from leaving PTS gaps at dropped frames, so it works properly ↵jbrjake2008-01-221-13/+17
| | | | | | with the new sync and MP4 muxing code in r1223 and r1224 that passes through the source's time stamps. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1227 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Change subtitle position to prevent displaying within a 2% margin of the ↵eddyg2008-01-211-10/+53
| | | | | | height of the screen, rather than using a 20px fixed margin. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1218 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Only drop frames when using VFR, not with regular detelecine.jbrjake2008-01-011-2/+6
| | | | | | *facepalm* git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1158 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Renumber start and stop timestamps for VFR, so they are continuous despite ↵jbrjake2007-12-181-2/+30
| | | | | | | | dropped frames. This fixes issues with jerky video when using VFR together with B-frames. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1133 b64f7644-9d1e-0410-96f1-a4d463321fa5
* First attempt at variable frame rate detelecining for NTSC video sources.jbrjake2007-11-101-1/+70
| | | | | | | This check-in includes the library code as well as the CLI implementation. Only works with MP4 and MKV, untested with high profile, results may vary with mixed content, consult a physician if condition persists for longer than four hours. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@1051 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Cast the flags passed to sws_getContext to a 16-bit int.saintdev2007-09-131-1/+1
| | | | | | Otherwise I get segfaults on 64-bit linux. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@958 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Added buffer management and changed fifo sizes. Changed job->subtitle_scan ↵eddyg2007-09-111-0/+10
| | | | | | to job->indepth_scan, and fixed memory init bug in denoise.c. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@945 b64f7644-9d1e-0410-96f1-a4d463321fa5
* - Add the accurate rounding flag for software scaling to avoid scaling ↵superdump2007-09-051-1/+1
| | | | | | artifacts that were especially noticable on flat colour or slight gradients. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@924 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Add Subtitle scanning for forced subtitles and normal subtitles from the CLIeddyg2007-08-211-1/+1
| | | | | | | and the MacOS GUI. See the new subtitle language options in the GUI. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@844 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Add colour/chroma to subtitles where they are not transparent.eddyg2007-08-201-1/+50
| | | | git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@842 b64f7644-9d1e-0410-96f1-a4d463321fa5
* Implements libswscale in HandBrake, giving it Lanczos scaling! This major ↵jbrjake2007-08-011-14/+21
| | | | | | | | | | enhancement comes to us courtesy of superdump, who deserves much praise and glory. To make this work, ffmpeg's been updated to a recent revision. Darwin contrib binary pack ++ to 0016. Includes fresh ffmpeg and libswscale as well as the recently-patched libmp4v2. I've also added the configure option --disable-sdl to libmpeg2 in the contrib/Jamfile, because without it jam always fails for me and I'm sick of adding it in every time. Hopefully this doesn't break anything for anyone, but if it does it's just a one-word change. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@778 b64f7644-9d1e-0410-96f1-a4d463321fa5
* This huge patch from huevos_rancheros ports a number of video filters from ↵jbrjake2007-07-271-60/+174
| | | | | | | | | | mencoder to HandBrake: yadif+mcdeint, hqdn3d, pp7, and pullup+softskip+harddup. What this means is that HB now has stateless inverse telecine, temporal denoising, and motion-adaptive deinterlacing! HandBrake is growing up =) Thank you, huevos_rancheros! git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@749 b64f7644-9d1e-0410-96f1-a4d463321fa5