summaryrefslogtreecommitdiff
path: root/vpxenc.c
AgeCommit message (Collapse)Author
2012-03-26bug fix: fix mem leak error in vpxencJames Berry
fixes memory leak bug in vpxenc. Change-Id: I3933026d16177947576c61ebf58f8c58147e4ba0
2012-03-01Fix encoder debug settingJohann
Propagate debug setting to the EBML struct. When writing the application name, this allows us to strip the version code and keep the output metadata static. Change-Id: I8e06c6abd743bedbff5af6242bbdae5d55754538
2012-03-01Merge "Packing bitstream on-the-fly with delayed context updates"Scott LaVarnway
2012-02-29vpxenc: fix time and fps calculation in 2-pass encodingYunqing Wang
When we do 2-pass encoding, elapsed time is accumulated through whole 2-pass process, which gives incorrect time and fps results for second pass. This change fixed that by resetting the time accumulator for second pass. Change-Id: Ie6cbf0d0e66e6874e7071305e253c6267529cf20
2012-02-29Packing bitstream on-the-fly with delayed context updatesAttila Nagy
Produce the token partitions on-the-fly, while processing each MB. Context is updated at the beginning of each frame based on the previoud frame's counters. Optimally encoder outputs partitions in separate buffers. For frame based output, partitions are concatenated internally. Limitations: - enabled just in combination with realtime-only mode - number of encoding threads has to be equal or less than the number of token partitions. For this reason, by default the encoder will do 8 token partitions. - vpxenc supports partition output (-P) just in combination with IVF output format (--ivf) Performance: - Realtime encoder can be up to 13% faster (ARM) depending on the number of threads and bitrate settings. Constant gain over the 5-16 speed range. - Token buffer reduced from one frame to 8 MBs Quality: - quality is affected by the delayed context updates. This again dependents on input material, speed and bitrate settings. For VC style input the loss seen is up to 0.2dB. If error-resilient=2 mode is used than the effect of this change is negligible. Example: ./configure --enable-realtime-only --enable-onthefly-bitpacking ./vpxenc --rt --end-usage=1 --fps=30000/1000 -w 640 -h 480 --target-bitrate=1000 --token-parts=3 --static-thresh=2000 --ivf -P -t 4 -o strm.ivf tanya_640x480.yuv Change-Id: I127295cb85b835fc287e1c0201a67e378d025d76
2012-02-16vpxenc: initial implementation of multistream supportJohn Koleszar
Add the ability to specify multiple output streams on the command line. Streams are delimited by --, and most parameters inherit from previous streams. In this implementation, resizing streams is still not supported. It does not make use of the new multistream support in the encoder either. Two pass support runs all streams independently, though it's theoretically possible that we could combine firstpass runs in the future. The logic required for this is too tricky to do as part of this initial implementation. This is mostly an effort to get the parameter passing and independent streams working from the application's perspective, and a later commit will add the rescaling and multiresolution support. Change-Id: Ibf18c2355f54189fc91952c734c899e5c072b3e0
2012-02-16vpxenc: factor out input open/closeJohn Koleszar
Simplify some of the file I/O for later commits which will add multistream support Change-Id: Idf1a05f3a29c95331d0c4a6ea5960904e4897fd4
2012-02-16vpxenc: add warning()/fatal() helpersJohn Koleszar
Cosmetic. Allows exiting with an error message without opening a new scope. Change-Id: If227b29b825f0241acea79dd38f19e524552ee18
2012-02-15vpxenc: factor out global config optionsJohn Koleszar
This is a first step towards specifying multiple output streams with one command line. Change-Id: Iac784d3911bf553694d024bbd0c3d547261e914b
2012-01-17Remove duplicate line in parameter parsing.Fritz Koenig
resize_down_thresh was parsed and set twice. Change-Id: I2685a6c3c825371f79ae94d305bcb50185a12dac
2011-12-21squash some signed/unsigned comparison warningsJames Zern
Change-Id: Ifc64cf990ae04d77934da3324d0afb3993f061e7
2011-11-28bugfix: all vpxenc arguments were not parsed under all conditionsJames Berry
dynamicly assign ARG_CTRL_CNT_MAX and add check to make sure argument instance doesnt already exist before creating a duplicate Change-Id: I4f78a9c5346cda8e812cd89c077afe8996493508
2011-11-09vpxenc: use off64_t for mingwJames Zern
fixes fseek errors on large files resulting in corrupt/truncated output (issue #364). Change-Id: If0e189a1591d0e95d7d237332e0bea1cf2ec5aa1
2011-11-01vpxenc: fix crash w/empty input fileJames Zern
Fixes issue #362. Change-Id: Iba6d7e49ed610b44c8a4c0f3d6330a93feb0373d
2011-10-18vpxenc: fix rollover in status outputJames Zern
sizeof(unsigned long)=4 in 32-bit builds Change-Id: I81c9d698c80ffaa332214e5b43e98b4e30cf9e88
2011-09-22vpxenc: get version string programaticallyJohn Koleszar
To avoid a dependency on vpx_version.h, call the vpx_codec_version_str() function and build up the string manually. Change-Id: Ie650e9b8f2aaaffaa31da5e9ef3b566b972321b4
2011-08-02Sync `vpxenc --timebase` usage wording with docs change.Lou Quillio
Change-Id: Ia406272a97806c0194435bb7f24e24d353ef5cc6
2011-07-28Convert rc_max_intra_bitrate_pct to controlJohn Koleszar
Since this is the only ABI incompatible change since the last release, convert it to use the control interface instead. The member of the configuration struct is replaced with the VP8E_SET_MAX_INTRA_BITRATE_PCT control. More significant API changes were expected to be forthcoming when this control was first introduced, and while they continue to be expected, it's not worth breaking compatibility for only this change. Change-Id: I799d8dbe24c8bc9c241e0b7743b2b64f81327d59
2011-07-26vpxenc: cosmetics: timebase help update / spellingJames Zern
The timebase update fixes Issue #61. Change-Id: I425158da7ea639464f61e6dd604ac9e6c72b7266
2011-07-26cosmetics: consistently use [u]int64_tJames Zern
Removes mixed usage of (unsigned) long long and INT64. Fixes Issue #208. Change-Id: I220d3ed5ce4bb1280cd38bb3715f208ce23cf83a
2011-07-18Merge "Fixed rate histogram calculation"John Koleszar
2011-07-18Fixed rate histogram calculationTero Rintaluoma
Using small values for --buf-sz= in command line causes floating point exception due to division by zero. Change-Id: Ibfe2d44db922993a78ebc9a4a1087d9625de48ae
2011-07-12Fix vpxenc encoding incorrect webm file header on big endian machines(Issue 331)Yunqing Wang
As reported in issue 331, vpxenc encoded incorrect webm file header on big endian machines. This change fixed that. Change-Id: I31924ebd476a87f3e88b9b5424540bf781d2b86f
2011-06-29Merge "guard against space/time distortion"John Koleszar
2011-06-29guard against space/time distortionJohann
and divide by 0 errors Change-Id: I8af5ca3d0913cb6f278fff754f8772bcb62e674a
2011-06-29vpxenc: prevent wraparound in the --rate-hist ringbufferJohn Koleszar
For clips that are near 60fps and have a lot of alt refs, it's possible that the ring buffer holding the previous frames sizes/pts could wrap around, leading to a division by zero. In addition to checking for this condition in the ring buffer loop, the buffer size is made dependent on the actual frame rate in use, rather than defaulting to 60, which should improve accuracy at frame rates >= ~60. Change-Id: If5a04d6e847316dc5f7504f25c01164cf9332be8
2011-06-28vpxenc: free resourcesJames Zern
Free buffers allocated for y4m input and webm cue list. Change-Id: I02051baae3b45f692cf5c7f520ea9a2d80c7b470
2011-06-23vpxenc: add rate histogram displayJohn Koleszar
Add the --rate-hist=n option, which displays a histogram with n buckets for the rate over the --buf-sz window. Change-Id: I2807b5a1525c7972e9ba40839b37e92b23ceffaf
2011-06-23vpxenc: add quantizer histogram displayJohn Koleszar
Add the --q-hist=n option, which displays a histogram with n buckets for the quantizer selected on each frame. Change-Id: I59b020c26b0acae0b938685081d9932bd98df5c9
2011-04-27vpxenc: remove duplicate --fps from vpxenc usage messageFritz Koenig
Fixes issue #323 Change-Id: I41c297df37afe186a8425ed2e2a95032069dcb9a
2011-04-25Merge "Stereo 3D format support for vpxenc"John Koleszar
2011-04-25Add rc_max_intra_bitrate_pct controlJohn Koleszar
Adds a control to limit the maximum size of a keyframe, as a function of the per-frame bitrate. See this thread[1] for more detailed discussion: [1]: http://groups.google.com/a/webmproject.org/group/codec-devel/browse_thread/thread/271b944a5e47ca38 Change-Id: I7337707642eb8041d1e593efc2edfdf66db02a94
2011-04-25Stereo 3D format support for vpxencAlok Ahuja
Create a new input parameter to allow specifying the packed frame stereo 3d format. A default value of mono will be written in the absence of user specified input Change-Id: I576d9952ab5d7e2076fbf1b282016a9a1baaa103
2011-04-15remove executable bitJohann
source files are not executable Change-Id: Id2c7294695a22217468426423979f68f02d82340
2011-03-30vpxenc: die on realloc failuresJohn Koleszar
Identified as a possible cause of issue #308, the code was silently ignoring realloc failures, which would lead to corruption, memory leaks, and likely a crash. The best we can do in this case is die gracefully. Change-Id: Ie5f6a853d367015be5b9712bd742778f3baeefd9
2011-03-21Allow specifying --end-usage by enum nameJohn Koleszar
Map an enum to the --end-usage values, so you can specify --end-usage=cq instead of --end-usage=2. The numerical values still work for historical scripts, etc, but this is more user friendly. Change-Id: I445ecd9638f801f5924a71eabf449bee293cdd34
2011-03-07Fix format-string warningRalph Giles
Cast size_t to (unsigned long) and print it with the %lu format string, which is more portable than C99's explict %zu for size_t. This truncates on Windows x64 but otherwise works on 32 and 64 bit platforms. In practice the stats file is unlikely to be so large. Change-Id: I0432b3acf85fc6ba4ad50640942e1ca4614b21cb
2011-01-28Adds "armvX-none-rvct" targetsTero Rintaluoma
Adds following targets to configure script to support RVCT compilation without operating system support (for Profiler or bare metal images). - armv5te-none-rvct - armv6-none-rvct - armv7-none-rvct To strip OS specific parts from the code "os_support"-config was added to script and CONFIG_OS_SUPPORT flag is used in the code to exclude OS specific parts such as OS specific includes and function calls for timers and threads etc. This was done to enable RVCT compilation for profiling purposes or running the image on bare metal target with Lauterbach. Removed separate AREA directives for READONLY data in armv6 and neon assembly files to fix the RVCT compilation. Otherwise "ldr <reg>, =label" syntax would have been needed to prevent linker errors. This syntax is not supported by older gnu assemblers. Change-Id: I14f4c68529e8c27397502fbc3010a54e505ddb43
2011-01-07CQ ModePaul Wilkins
The merge includes hooks to for CQ mode and other code changes merged from the test branch. CQ mode attempts to maintain a more stable quantizer within a clip whilst also trying to adhere to a guidline maximum bitrate. The existing target data rate parameter is used to specify the guideline maximum bitrate. A new parameter allows the user to specify a target CQ level. For normal (non kf/gf/arf) frames, the quantizer will not drop BELOW the user specified value (0-63). However, in some cases the encoder may choose to impose a target CQ that is above that specified by the user, if it estimates that consistent use of the target value is not compatible with guideline maximum bitrate. Change-Id: I2221f9eecae8cc3c431d36caf83503941b25e4c1
2010-12-23vpxenc stats_close() memleak fixJames Berry
stats_close() was not freeing memory for single pass runs. It now takes in arg_passes to determine when it should free memory. Change-Id: I6623b7e30b76f9bf2e16008490f9b20484d03f31
2010-12-17Add psnr/ssim tuning optionJohn Koleszar
Add a new encoder control, VP8E_SET_TUNING, to allow the application to inform the encoder that the material will benefit from certain tuning. Expose this control as the --tune option to vpxenc. The args helper is expanded to support enumerated arguments by name or value. Two tunings are provided by this patch, PSNR (default) and SSIM. Activity masking is made dependent on setting --tune=ssim, as the current implementation hurts speed (10%) and PSNR (2.7% avg, 10% peak) too much for it to be a default yet. Change-Id: I110d969381c4805347ff5a0ffaf1a14ca1965257
2010-12-13fixed vpxenc bug where ivf files would be read incorrectlyJames Berry
read_frame would incorrectly insert detect->buf into img for ivf files. detect->position now set to 4 if input file is detected to be ivf in file_is_ivf to keep this from occuring. Change-Id: I5e235dd3033985bc62707a35c13af5984620208e
2010-11-24allow dimensions as low as 1 pixelPascal Massimino
remove warning comment in vpxenc.c: in case of 1x1 picture, detect_bytes will be equal to '3' and we'll fall back to RAW_TYPE. fix read_frame() by tracking the pre-read buffer length in the struct detect Change-Id: If1ed86ee5260dcdbc8f9d10da6cbb84a4cc2f151
2010-11-12Fixed bug first cluster timecode of webm file is wrong.Frank Galligan
When the first pts equaled 0 ivfenc was incorrectly increasing the pts by 1. I changed the pts and last pts to be signed. I also set the default value of last pts to -1. Change-Id: I30bcec5af9b16d93fa9e3abbea7764b133e9cd73
2010-11-05improve average framerate calculationJohn Koleszar
Change Ice204e86 identified a problem with bitrate undershoot due to low precision in the timestamps passed to the library. This patch takes a different approach by calculating the duration of this frame and passing it to the library, rather than using a fixed duration and letting the library average it out with higher precision timestamps. This part of the fix only applies to vpxenc. This patch also attempts to fix the problem for generic applications that may have made the same mistake vpxenc did. Instead of calculating this frame's duration by the difference of this frame's and the last frame's start time, we use the end times instead. This allows the framerate calculation to scavenge "unclaimed" time from the last frame. For instance: start | end | calculated duration ======+=======+==================== 0ms 33ms 33ms 33ms 66ms 33ms 66ms 99ms 33ms 100ms 133ms 34ms Change-Id: I92be4b3518e0bd530e97f90e69e75330a4c413fc
2010-11-04Increase the resolution of default timebaseYaowu Xu
The old value 1000 was too low, which caused the effective duration and frame rate calculation to have an 1% error for typical 30 frame/second inputs. Symptom of the issue has been that most 2 pass encodings were undershooting target bit rate by 1% or so for 30 fps input. Change-Id: Ice204e86f844ceb9ce973456f2b995cc095283cf
2010-11-03vpxenc: require width and height for raw streamsJohn Koleszar
Defaulting to 320x240 for raw streams is arbitrary and error-prone. Instead, require that the width and height be set manually if they can't be parsed from the input file. Change-Id: Ic61979857e372eed0779c2677247e894f9fd6160
2010-11-02fix pipe support on windowsJohn Koleszar
STDIO streams are opened in text mode by default on Windows. This patch changes the stdin/stdout streams to be in binary mode if they are being used for I/O from the vpxenc or vpxdec tools. Fixes issue #216. Thanks to mw AT hesotech.de for the fix. Change-Id: I34525b3ce2a4a031d5a48d36df4667589372225b
2010-10-29cosmetic: remove alt_ref from vpxenc usage messageJohn Koleszar
Undo an automatic transform. Change-Id: Ie730a6a31b4680b34e54b61691d67c4b3ed2f2aa
2010-10-27Eliminate more warnings.Timothy B. Terriberry
This eliminates a large set of warnings exposed by the Mozilla build system (Use of C++ comments in ISO C90 source, commas at the end of enum lists, a couple incomplete initializers, and signed/unsigned comparisons). It also eliminates many (but not all) of the warnings expose by newer GCC versions and _FORTIFY_SOURCE (e.g., calling fread and fwrite without checking the return values). There are a few spurious warnings left on my system: ../vp8/encoder/encodemb.c:274:9: warning: 'sz' may be used uninitialized in this function gcc seems to be unable to figure out that the value shortcut doesn't change between the two if blocks that test it here. ../vp8/encoder/onyx_if.c:5314:5: warning: comparison of unsigned expression >= 0 is always true ../vp8/encoder/onyx_if.c:5319:5: warning: comparison of unsigned expression >= 0 is always true This is true, so far as it goes, but it's comparing against an enum, and the C standard does not mandate that enums be unsigned, so the checks can't be removed. Change-Id: Iaf689ae3e3d0ddc5ade00faa474debe73b8d3395