Commit Graph

432 Commits

Author SHA1 Message Date
James Zern
61c3338516 call vp[89]_clear_system_state after longjmp
restore the environment post encode/decode failure

Change-Id: I3c72e2260a616432eaf1f9545d4fb4d8e45cc7b0
2014-07-10 12:36:28 -07:00
Marco Paniconi
d08b2ba172 Allow for deblocking temporal-denoised signal.
Allow for an option to selectively apply the deblocking loop filter to the denoised
raw block, based on the denoised state (no-filter, filter with zero motion, or filter with non-zero motion)
of the current block and its upper and left denoised block.
This helps to reduce some blocking artifacts from the motion-compensated denoising.

Change-Id: I0ac4e70076df69a98c5391979e739a2681e24ae6
2014-06-13 14:34:05 -07:00
Tim Kopp
05e8c61903 Added OUTPUT_YUV_DENOISED CFLAG to VP8 encoder
When this compiler flag is enabled, the encoder will write a denoised,
uncompressed, version of the input to denoised.yuv.

Change-Id: Ie0247f76b23219d95fe97dd70f23e097d742c249
2014-06-05 11:18:32 -07:00
Tim Kopp
f204a9a482 Fixed OUTPUT_YUV_SRC behavior for VP8
By enabling the OUTPUT_YUV_SRC compiler flag, the encoder will write the raw
input to bd.yuv.

The functionality was mostly implemented, but in its previous state did not
compile.

Change-Id: Ia331ad0f4c6e6f9f51e8d42cd33ba8cc146b3dbf
2014-05-30 09:39:07 -07:00
Adrian Grange
93a8a1eb8c Fix generic-gnu target build
Added macro to conditionally compile some of the
post-processing functions only when CONFIG_POSTPROC
is defined.

This was causing the build for the generic-gnu target
to fail.

Change-Id: Ibfa447feceb7a0528135025f105be48f97e9965c
2014-05-05 11:00:43 -07:00
Yunqing Wang
096eaba728 Remove VP8 save_reg_neon function
This patch did a cleanup following the commit "Save NEON registers
in VP8 NEON functions". The pushing/poping of callee-saved NEON
registers was moved into individual NEON functions. Therefore,
we don't need to save those registers at the beginning of codec.
The related code was removed.

Change-Id: I5648166514fc9beffb780aa138495597731f49ea
2014-04-29 16:13:24 -07:00
Sergey Ulanov
409f8da265 Fix onyx_if.c to not to redefine M_LOG2_E if it's already defined.
This fixes warning when compiling libvpx for PNaCl. PNaCl's version
of math.h defines M_LOG2_E.

Change-Id: Iba9450441538e9f82447ad2936bea94d21bafdf1
2014-04-10 08:54:30 -07:00
James Zern
2a19c96362 onyx_if: quiet -Warray-bounds warnings
'number_of_layers' is range checked before assignment from the user
config.

Change-Id: Idefdaceb8736f126fa7c647da2b047dafb56ea52
2014-03-15 10:36:27 -07:00
Dmitry Kovalev
7d5bffc452 Adding vpx_sse_to_psnr() function.
Removing all copies of identical vp8_mse2psnr/vp9_mse2psnr functions.
Using vpx_sse_to_psnr() instead in all places.

Change-Id: I15beef9834d43d8fc8a8a7a2d1fc5de3d658fed8
2014-02-26 16:21:12 -08:00
Adrian Grange
b7be30eb36 Cleanup some comments.
Change-Id: I568861ba1d43620865ad9a98a97eef37a51fd856
2014-02-14 15:05:30 -08:00
Marco Paniconi
193fa5c8ba Keep buffer clipped to maximum in change_config.
Under a configuration change, where the bitrate suddenly decreases,
the buffer level may be larger than maximum allowed (for that first frame to be encoded after change_config).
This change keeps it clipped to its maximum level.

Change-Id: I4d0b5b3d1fd8148600dd39e02bd630c9464baba5
2014-01-09 14:33:40 -08:00
Adrian Grange
8af3e6507e Fix the printf format string
There were two problems with the format string in
the conditionally compiled print statement. It referred
to a variable that is no longer available and it used
incorrect format specifiers.

Change-Id: I315e22bea2691bb535a2e33f5ca206fc55287a37
2013-12-11 10:47:59 -08:00
Marco Paniconi
d486427cf1 Undo the vp8 change in "Reduce loop filter in..."
Patch in https://gerrit.chromium.org/gerrit/#/c/41176/
was merged into repository by mistake.

Change-Id: I235c71af26bb2d72698c8aac2301e5a7e9c5f960
2013-11-19 17:16:00 -08:00
Jim Bankoski
69541e1dec Merge "Reduce loop filter in cyclic refresh." 2013-11-19 14:42:32 -08:00
Marco Paniconi
41138e01f5 Fixes to buffer update for temporal layers.
When a frame is dropped due to |buffer_level| < 0 for a given temporal layer,
the buffer level for the upper temporal layers was not updated (in calc_pframe_target_size()).
This change fixes that.

Also, use the layer per-frame-bandwidth for updating the buffer level
of the higher layers when a frame is dropped.

Change-Id: I660c23f3229b47e9d124a950b480314b4307c5a8
2013-11-01 11:47:40 -07:00
James Zern
5f30a0c687 VP[89]_COMMON: remove golden/altref frame counts
these are only used in the encoder.
frames_since_golden / frames_till_alt_ref_frame -> VP[89]_COMP

Change-Id: Ie14a6f46987bced685ddb449b85dc261caba6dfe
2013-07-18 14:09:21 -07:00
James Zern
9581eb6e8a use consistent framerate naming
s/frame_rate/framerate/g

Change-Id: I6fc3e088e419c5f46e3a9390dd8a2cad2677a2fc
2013-07-16 14:12:47 -07:00
James Zern
4fc6c88e9c yv12config: remove YUV_TYPE
this was never fleshed out in the context of VP8, for which it was
added. for VP9 it has no meaning.

Change-Id: Iba2ecc026d9e947067b96690245d337e51e26eff
2013-07-12 15:25:48 -07:00
Frank Galligan
4524548f80 Fix compile warnings on windows.
Change-Id: If74bc6110016bc75ea3883ab136fbbac88f6a913
2013-06-12 11:34:15 -07:00
John Koleszar
d0ed677a34 Merge branch 'master' into experimental
Change-Id: Ie648398b82f7311143709f55c0e30ba452f50eff
2013-06-11 16:29:28 -07:00
Yaowu Xu
8b3ad75266 Specify mv neighborhood for block larger than 8x8
The new neighorbhood adapts to the shape and size of the block type
cif +.16%
stdhd +.13%

Change-Id: I978db58278e9ae3fbd6726ef831bdfc5f5f37d02
2013-06-07 08:59:48 -07:00
Scott LaVarnway
ec34afd1b0 Fixed crash in VP8/CQTest
If the codec was configured with --enable-internal-stats,
a seg fault would occur.  This patch fixes the problem.

Change-Id: Id10a577973d185e93037c59e5b36bebdded327da
2013-06-05 12:04:19 -07:00
Marco Paniconi
fb48bbf5c6 Fixes for run-time change in temporal layers.
Use a separate counter for resetting the pattern upon
a change in temporal layers, and set/initialize the
layer context parameters for the new temporal layer state.

Also moved the setting of layer configuation in init_config()
to a separate function.

Change-Id: Ic7fc023a1e5490020509e107004645098f4c00f0
2013-05-21 09:04:14 -07:00
Johann
32a5c52856 Merge branch 'master' into experimental
Conflicts:
	vp9/common/vp9_findnearmv.c
	vp9/common/vp9_rtcd_defs.sh
	vp9/decoder/vp9_decodframe.c
	vp9/decoder/x86/vp9_dequantize_sse2.c
	vp9/encoder/vp9_rdopt.c
	vp9/vp9_common.mk

Resolve file name changes in favor of master. Resolve rdopt changes in
favor of experimental, preserving the newer experiments.

Change-Id: If51ed8f457470281c7b20a5c1a2f4ce2cf76c20f
2013-04-26 12:57:10 -07:00
Scott LaVarnway
55dc089522 Merge "Removed shadow warnings : bitstream.c encodeframe.c onyx_if.c" 2013-04-19 07:08:59 -07:00
Adrian Grange
c2876cf0fd Initial addition of multiple ARF frames
This is work-in-progress, it implements multiple ARF
encoding behind an experimental flag.

It adds the ability to insert multiple ARF frames into a
single ARF group. This patch implements the reordering
of the coded frames, and implements a fixed-length coding
pattern. It applies a fixed quantizer strategy based on
where the frame is in the coding sequence.

Further work to modify the rate control strategy is
ongoing and will be submitted via a set of future patches.

In this first step, each ARF group is recursively
bisected and an ARF frame added at that position in the
sequence. The recursion continues until ARF frames are
within MIN_GF_INTERVAL frames.

The code sits behind the "multiple-arf" experimental
flag ("CONFIG_MULTIPLE_ARF"). The experimental flag
"oneshotq" ("CONFIG_ONESHOTQ") also needs to be enabled
for this patch to work correctly.

Change-Id: Ie473b05ebb43ac473c0cfb659b2b8042823085e2
2013-04-15 09:11:39 -07:00
John Koleszar
771fc832f3 Merge branch 'master' into experimental
Pick up VP8 encryption, quantization changes, and some fixes to vpxenc

Conflicts:
	test/decode_test_driver.cc
	test/decode_test_driver.h
	test/encode_test_driver.cc
	vp8/vp8cx.mk
	vpxdec.c
	vpxenc.c

Change-Id: I9fbcc64808ead47e22f1f22501965cc7f0c4791c
2013-03-27 10:46:19 -07:00
Scott LaVarnway
699196dc3d Removed mode_chosen_counts
This eliminates a tsan warning.

Change-Id: I204d109b12adb4e347762e63d12859244f28d1a9
2013-03-20 14:41:24 -07:00
Ronald S. Bultje
65d22825e2 ENTROPY_STATS -> VP8_ENTROPY_STATS in vp8/.
Change-Id: I0027483e47900de84394de47c3273cc8292e6119
2013-03-18 15:39:04 -07:00
Scott LaVarnway
96e41cb461 Removed shadow warnings : bitstream.c encodeframe.c onyx_if.c
ratectrl.c and quantize.c

Adding -Wshadow to CFLAGS generated a bunch of warnings.  This patch
removes these warnings.

Change-Id: I8c8faa9fde57c1c49662d332a90bc8d9a0f4a2ce
2013-03-14 09:49:38 -07:00
James Zern
215084b31c vp8: clamp probability values
fixes out of bounds reads on vp8_prob_cost table.
present since:
217591f Added rate-targeted temporal scalability
v0.9.7-p1-71-g217591f

Change-Id: I9194b773098a381f1e3f67bd3307f05df27c24fd
2013-03-05 16:18:24 -08:00
Scott LaVarnway
0c2919c3d5 Bug fix: error-concealment enabled changed postproc output
When error concealment is enabled, it swaps the mi and prev_mi ptrs after
each frame is decoded.  The postproc uses the mi ptr for the mode info context.
Now the postproc will use the correct mode info context.

Change-Id: I537ae5450f319c624999b44525bb52bb30047b7b
2013-01-25 17:06:32 -08:00
Marco Paniconi
07ce775189 Reduce loop filter in cyclic refresh.
Reduce the delta loop filter for blocks that are cyclicly refreshed.
This helps to reduce the dot artifacts that may happen
when zero_mv blocks are repeatedly loop-filtered.

This change, along with the fix in:
https://gerrit.chromium.org/gerrit/#/c/40409/
helps to reduce this artifact, but cannot remove the dot artifacts completely.

Change-Id: I44675e7a0f59295b648a3b7d4956fb301231a97f
2013-01-11 16:46:09 -08:00
Frank Galligan
bc45f23192 Upstream changes from Chromium Android Clang build.
See https://codereview.chromium.org/11875006/

Change-Id: Ied2a17df2b3222635f84aef120eaa9feb53750d2
2013-01-11 15:37:23 -08:00
John Koleszar
879cb7d962 Merge vp9-preview changes into experimental branch
Incorportate vp9-preview changes by merging master branch into experimental.

Conflicts:
	test/test.mk
	vp9/common/vp9_filter.c
	vp9/common/vp9_idctllm.c
	vp9/common/vp9_invtrans.h
	vp9/common/vp9_mbpitch.c
	vp9/common/vp9_rtcd_defs.sh
	vp9/common/vp9_systemdependent.h
	vp9/common/vp9_type_aliases.h
	vp9/common/x86/vp9_asm_stubs.c
	vp9/common/x86/vp9_subpixel_mmx.asm
	vp9/decoder/vp9_decodframe.c
	vp9/decoder/vp9_dequantize.c
	vp9/decoder/vp9_dequantize.h
	vp9/decoder/vp9_onyxd_int.h
	vp9/encoder/vp9_bitstream.c
	vp9/encoder/vp9_encodeframe.c
	vp9/encoder/vp9_rdopt.c

Change-Id: I17f51c3666d1b59cf1a699f87607cbc5d30a87c5
2013-01-08 10:19:59 -08:00
John Koleszar
16810c10c1 Merge branch 'vp9-preview' of review:webm/libvpx
Merge the vp9-preview branch into master.

Change-Id: If700b9054676f24bed9deb59050af546c1ca5296
2012-12-27 09:37:19 -08:00
Scott LaVarnway
a0ad16e203 Moved error_bins to macroblock struct
Change-Id: Ic9956ddf1c2ddffcf7be7fdfc23ad9a2426fc47a
WIP: Fixing unsafe threading in VP8 encoder.
2012-12-10 17:32:58 -08:00
Scott LaVarnway
74efda4bd6 Moved zbin_mode_boost to macroblock struct
Fixing unsafe threading in VP8 encoder.

Change-Id: Ibf4c89a2043654834747811bc11eb283de0bb830
2012-12-10 12:42:24 -08:00
Scott LaVarnway
3a19eebe4d Moved zbin_over_quant to macroblock struct
Change-Id: I76fe20ade099573997404b8733cf7f79e82fb21e
WIP: Fixing unsafe threading in VP8 encoder.
2012-12-10 10:51:42 -08:00
Scott LaVarnway
000c8414b5 Moved denoiser frame copy/updates out of loopfilter thread
The loopfilter thread from the previous frame can be running while
starting the current frame.  cpi->Source will change during this time causing
the wrong data to be copied.  The refresh_x_frame flags also change, which
will cause incorrect updates of the denoised buffers.

Change-Id: I7d982b4fcb40a0610801332aa85f3b792c64e4c3
2012-12-07 12:19:52 -08:00
Scott LaVarnway
ef2248a2a3 added work buffer for denoiser
The denoiser was writing to LAST_FRAME buffer.   If LAST_FRAME isn't being
updated,  the reference frame buffers were out of sync between the encoder and the
denoised raw buffers. This patch resolves the discrepancy by always writing to a work
buffer (INTRA_FRAME) and then copying from that buffer to any buffers that needs to
be updated.

Change-Id: I6dd855b9749978b542bc3d515914d5f16faf25df
2012-12-05 19:09:05 -08:00
Johann
a36d9a4a15 Move vp8_scale_frame to vpx namespace
Change-Id: I92d613e89c8f1174eca0789116120bfa20c25c28
2012-12-05 16:05:46 -08:00
Johann
1009f76566 Use 'vpx_scale' consistently
Change-Id: I178352813d2b8702d081caf405de9dbad9af2cc3
2012-12-05 16:05:44 -08:00
Scott LaVarnway
f2b36a4de7 Removed check_gf_quality()
and various unused members in VP8_COMP along with other
code cleanups.

Change-Id: I56c6c0a77a51f5ac5cbd6071017bcbfd2623b7df
2012-12-05 08:56:42 -08:00
Scott LaVarnway
bfca084fcd Moving mbs_tested_so_far, mode_test_hit_counts to macroblock struct
Change-Id: Ifa78c0a953fab3e5dd7af0446924846c7022cd09
2012-12-04 16:52:47 -08:00
Scott LaVarnway
9961ad479a Merge "Moving rd_thresh_mult, rd_threshes to macroblock struct" 2012-12-03 12:05:48 -08:00
John Koleszar
a9c7597adc support building vp8 and vp9 into a single lib
Change-Id: Ib8f8a66c9fd31e508cdc9caa662192f38433aa3d
2012-11-15 10:46:17 -08:00
Scott LaVarnway
69d074841d Moving count_mb_ref_frame_usage to macroblock struct
Change-Id: I44e4e3869f231ae270cca98c9565f23c512e3ddf
2012-11-06 16:58:28 -08:00
Scott LaVarnway
80fe4723d2 Merge "Removed mb_norm_activity_map" 2012-11-06 16:28:54 -08:00
Scott LaVarnway
fe91e47bc7 Moving rd_thresh_mult, rd_threshes to macroblock struct
Change-Id: I650a593162280ab40e71e527ec6518303e2d5723
2012-11-06 16:27:00 -08:00
Scott LaVarnway
78bf8284cf Removed mb_norm_activity_map
Not used.

Change-Id: I07ba929e3ff82b4b0c86f731769cdf5434c7a816
2012-11-06 09:47:45 -08:00
Scott LaVarnway
ee28bb87b4 Moving _error counts to macroblock struct
Change-Id: I28ac1519d1594801fef9a623cb64598d3d751eb0
2012-11-06 09:21:54 -08:00
Yunqing Wang
f6886c4b93 post-proc: fix 0 or negative threshold handling
If the threshold(limits) <= 0, skipped filtering and copied the
frame directly. Also, fixed memory allocation checking.

Change-Id: If3d79d5b2bcb71b9777e6eb5cba1384585131e22
2012-10-10 18:36:26 -07:00
Yunqing Wang
8b698e8cb1 Merge "post-proc: deblock filter optimization" 2012-10-09 09:26:36 -07:00
Yunqing Wang
4c53bacce4 post-proc: deblock filter optimization
1. Algorithm modification:
Instead of having same filter threshold for a whole frame, now we
allow the thresholds to be adjusted for each macroblock. In current
implementation, to avoid excessive blur on background as reported
in issue480(http://code.google.com/p/webm/issues/detail?id=480), we
reduce the thresholds for skipped macroblocks.

2. SSE2 optimization:
As started in issue479(http://code.google.com/p/webm/issues/detail?id=479),
the filter calculation was adjusted for better performance. The c
code was also modified accordingly. This made the deblock filter
2x faster, and the decoder was 1.2x faster overall.

Next, the demacroblock filter will be modified similarly.

Change-Id: I05e54c3f580ccd427487d085096b3174f2ab7e86
2012-10-08 12:06:44 -07:00
Jim Bankoski
6f35b1958e Disable keyframe in real time that's placed one frame after a cut.
The codec as it stood placed a keyframe one frame after a
real cut scene - and ignored datarate and other considerations.

TODO: Its possible that we should detect a keyframe and recode
the frame ( in certain circumstances) to improve quality.

Change-Id: Ia1fd6d90103f4da4d21ca5ab62897d22e0b888a8
2012-10-01 14:17:43 -07:00
Marco Paniconi
9704cdec9f Resetting of the cyclic_refresh_mode_index:
Reset the cyclie refresh mode index in alloc_compressor_data().
This is needed to handle both cases of internal and
external spatial resizing.

Change-Id: I2697e12d45135eae2e8f0d45161811f24722312a
2012-09-27 14:34:43 -07:00
Marco Paniconi
d539c1db5a Reset the cyclic_refresh_mode_index to 0 on resize.
On an internal spatial resize, this mode index was not reset to 0,
and therefore could exceed dimensions of seg_map or cyclic_refresh_map.

Change-Id: I6fe85dbd2765eb0207a9d9f71fda8d8b8c34f075
2012-09-26 15:46:51 -07:00
Jim Bankoski
ab98103fac Merge "disable segmentation on enhancement layers" 2012-09-25 10:49:25 -07:00
Jim Bankoski
22141d9d79 disable segmentation on enhancement layers
This should avoid problems with blocks gettings high quality
improvement despite having recently moved:

Change-Id: Ic0af0de2d6577807fa3c553f47b55d547ef36359
2012-09-24 07:53:26 -07:00
Marco Paniconi
b501251e2e Update to cyclic refresh:
Set the seg map to 0 for key frame.

In previous commit on cyclic refresh, the seg map for key frame
was not reset, and instead used the seg map from last frame.

Change-Id: I848eb2face420dfcd2f7daca6f070b9127ca938b
2012-09-23 21:01:12 -07:00
Marco Paniconi
5979b89b92 Update to cyclic refresh.
-Increase the amount of mbs to be refreshed.
-Replace the delta qp with a fixed and reduced delta.
-Change to the mb update loop to try to always update same amount of mbs.

Change-Id: I93ac88002fd8dc677d2337f77998ff93f64e4ff9
2012-09-21 18:57:30 -07:00
Scott LaVarnway
c533f2a43e Merge "Added error checking to vp8cx_create_encoder_threads()" 2012-08-23 13:55:06 -07:00
Jim Bankoski
c522217d78 Merge "Add biasing to ZEROMV for videos with static background" 2012-08-21 15:56:59 -07:00
Scott LaVarnway
2a96d6b0d5 Merge "Removed last_kf_gf_q" 2012-08-21 15:19:58 -07:00
Yunqing Wang
24c346dffc Add biasing to ZEROMV for videos with static background
For videos with big static background(such as video conferencing
clips), the mode decision was biased to ZEROMV in order to
obtain a stable background. The percentage of ZEROMV on last
frame was used to predict if there is static area in current frame,
and checking already-encoded neighboring macroblocks' motion
vectors to make sure the local area has low motion.

Change-Id: I05b3241d3a56a0bda88b6681e5646c1c8baf2e57
2012-08-21 14:56:02 -07:00
Yunqing Wang
8ee88da060 Fix inter_zz_count calculation bug
The current way of counting inter_zz_count doesn't work correctly
in multi-threaded encoding. Calculating it after the frame is
encoded fixed the problem.

Change-Id: Ifcb1972cde950b8cc194f75c6d7b6af09e8b0e65
2012-08-20 17:43:06 -07:00
Yaowu Xu
b0cfcb2ca8 Merge "realtime turndown loopfilter for 00" 2012-08-20 13:44:56 -07:00
Jim Bankoski
9f0b42247d realtime turndown loopfilter for 00
Loop filter producing wierd artifacts when
repeatedly applied in noisy video.   This
mitigates the effect.

Change-Id: If4b1a8543912d186a486f84e11d8b01f7436fa5f
2012-08-20 13:04:53 -07:00
Yaowu Xu
d71ba03822 silent compiling warnings for VC9 build
Change-Id: Iaa947e640f27e6f6eaf7d845f243536bca2df513
2012-08-20 11:45:01 -07:00
Scott LaVarnway
d1b6fa4161 Added error checking to vp8cx_create_encoder_threads()
Added checks for pthread_create() errors.

Change-Id: Ie198ef5c14314fe252d2e02f7fe5bfacc7e16377
2012-08-14 12:00:23 -07:00
Scott LaVarnway
6ce58e84d3 Removed last_kf_gf_q
Not used.

Change-Id: I7595cb21db73bd56ee4d9280ecb7ab9b1240f4e2
2012-08-02 12:02:36 -07:00
Attila Nagy
cbc249ba00 Fix encoder mem allocation when picture size is changed
After the picture size was changed to a bigger one, the internal memory was
corrupted and multithreaded encoder was deadlocking.

Memory for last frame's MVs, segmentation map and active map were allocated when
the compressor was created (vp8_create_compressor). Buffers need to be
reallocated when picture size is changed, so, the allocation was moved to
vp8_alloc_compressor_data, which is called every time the picture is resized.

Change-Id: I7ce16b8e69bbf0386d7997df57add155aada2240
2012-08-01 08:23:35 +03:00
Jim Bankoski
f47544745e Merge "Remove the resetting of qp params for temporal layers." 2012-07-27 21:22:15 -07:00
Marco Paniconi
ef4a9670a8 Remove the resetting of qp params for temporal layers.
The ambient qp and active worse/best qp were reset for every frame
when temporal layers is on. This change removes this reset.

As this affects the target size for forced key frames
(it will actually lower the size somewhat), we increased the
inital boost factor to compensate.

Change-Id: Ie38d95f5c99ab3d447469c49e2177bc3fcc4ad28
2012-07-27 17:27:32 -07:00
Attila Nagy
e66e9ddfb4 Optimizes updates of encoder block ptrs
Precalculated block ptrs do not need updates during encoding.
Set these at init stage.

Moved the allocation of 'mt_current_mb_col' (last encoded MB on each
row) to vp8_alloc_compressor_data(), so that it is correctly
reallocated when frame size is changing.

Change-Id: Idcdaa2d0cf3a7f782b7d888626b7cf22a4ffb5c1
2012-07-27 09:59:09 +03:00
Yunqing Wang
4066c8b205 multi-res: add drop_frame support
Added drop_frame support in multi-resolution encoder.

If one frame is dropped at a lower-resolution level, the next
upper-resolution level encoder needs to encode that frame
independently without any lower-resolution level motion
information.

Another issue is that if one frame is dropped at some but not all
resolution levels, a frame after that one may use different set
of reference frames at different resolution levels. This reference
frame asynchronization could degrade motion search precision in
upper-resolution level encoding, which uses lower-resolution level
motion result. This change compares the lower-resolution and upper-
resolution level's reference frames. If they are not the same, the
upper-resolution level encoder can not use lower-resolution level
motion result.

Change-Id: I61afa4f313630e75b7cbdd5742e230e8724a988a
2012-07-26 08:36:53 -07:00
Yunqing Wang
bb3d510a18 Merge "Remove goldfreq in VP8_COMP" 2012-07-10 09:19:37 -07:00
Yunqing Wang
e2c5e78ad9 Merge "Fix decimation_count in drop_frame" 2012-06-29 10:57:39 -07:00
Paul Wilkins
6fc1d9efc4 Merge "Fix segmentation updates with vp8_set_roimap()" 2012-06-20 10:34:28 -07:00
John Koleszar
6291dd4c2f Fix compilation with -werror
Fix a last few warnings with multithread, arm, 32 bit

Change-Id: Ic7c67616c370d0ff87562a232fb1e5df0702dc86
2012-06-20 09:43:42 -07:00
Paul Wilkins
7c32cb52b5 Fix segmentation updates with vp8_set_roimap()
Changes relating to Issue 411

Removed code that was clearing down the segmentation data each
frame.

Added range/parameter checking in vp8_set_roimap(); Return error
if called when cyclic_refresh is enabled.

Correct setup_features() so that it sets or clears the segment update
flags as appropriate.

Change-Id: Ib31ac53006640ddf1ba7b9ec8f8b952e3eff860a
2012-06-20 12:49:29 +01:00
Yunqing Wang
0ca0c4f6a0 Remove goldfreq in VP8_COMP
goldfreq can be replaced by DEFAULT_GF_INTERVAL.

Change-Id: I3659a9e7b9a6be9cb1952a1838e02c20d656e369
2012-06-12 11:57:26 -04:00
John Koleszar
0164a1cc5b Fix pedantic compiler warnings
Allows building the library with the gcc -pedantic option, for improved
portabilty. In particular, this commit removes usage of C99/C++ style
single-line comments and dynamic struct initializers. This is a
continuation of the work done in commit 97b766a46, which removed most
of these warnings for decode only builds.

Change-Id: Id453d9c1d9f44cc0381b10c3869fabb0184d5966
2012-06-11 15:14:58 -07:00
John Koleszar
71618e542c Merge "Reset Q for key frame when spatial resizing occurs." 2012-06-11 12:02:56 -07:00
Yunqing Wang
53d92e61cc Fix decimation_count in drop_frame
Frame dropping decision is made by evaluating both current frame
and next frame's buffer_level. If both buffer_levels are less
than drop_mark, next frame is dropped. When frame dropping is
over, namely, buffer_level becomes normal again, we need to
reset decimation_count to 0.

Change-Id: Iae182612e61e0da367fbd43afdc90738d975d1a3
2012-06-07 14:47:37 -04:00
Yunqing Wang
9904c28f5b Remove unused code in drop_frame
Removed unused parameters and code related to drop_frame.

Change-Id: I594e050d49b1805c6f72abf06005ef624256bb57
2012-06-07 11:26:47 -04:00
Marco Paniconi
baedcedcbe Reset Q for key frame when spatial resizing occurs.
The logic for spatial resizing is done after the Q is selected for the
frame. This causes a problem that the Q we select for the (resized)
key frame may be based on a different resolution than the frame we
will encode.

This fix is to ensure that, when resize is on, the selected Q is still
based on the resolution of the frame to be encoded.

Change-Id: Ia49a9eac5f64e48d1c00dfc7ed4ce26fe84d3fa1
2012-06-06 15:18:18 -07:00
Johann
965d8686bb Remove extra enum
VP8_REFFRAME is the same as vpx_ref_frame_type

Change-Id: I63c2ddfb39f6ec87d1e5eb6a8852846464552b1b
2012-06-04 16:56:55 -07:00
Jim Bankoski
f78e5a04e6 fix denoiser for temporal patterns and rd
This extends the denoiser to work for temporally scalable
coding.

I believe this also fixes a very rare but really bad bug in the original
implementation.

Change-Id: I8b3593a8c54b86eb76f785af1970935f7d56262a
2012-05-30 14:32:04 -07:00
Jim Bankoski
ffe79d61d4 Merge "fix denoiser for temporal patterns and rd" 2012-05-25 09:56:08 -07:00
John Koleszar
d708e7fbbe Merge "Fix another multithreaded encoder loopfilter race condition" 2012-05-24 09:40:48 -07:00
Jim Bankoski
57faddb7c5 fix denoiser for temporal patterns and rd
This extends the denoiser to work for temporally scalable
coding.

I believe this also fixes a very rare but really bad bug in the original
implementation.


Change-Id: I8b3593a8c54b86eb76f785af1970935f7d56262a
2012-05-24 07:44:03 -07:00
Attila Nagy
4890853010 Fix another multithreaded encoder loopfilter race condition
After a key frame encoding, the frame type could change while
filtering is still going on. Pass the frame type as parameter to the
loopfilter function and don't read it from common storage.

vp8cx_set_alt_lf_level has to be done before packing the stream.
Currently alt_lf_level is not used so there hasn't been any visible
problem here.

Change-Id: Ia114162158cd833c2b16e3b89303cc9c91f19165
2012-05-23 13:50:59 -07:00
John Koleszar
cf0970157d Fix memory leak in vpx_codec_enc_config_set()
Resolution changes in calls to vpx_codec_enc_config_set() would cause
a memory leak due to failing to release the lookahead and alt ref
buffers.

Change-Id: I48392ea25e71fe2760d60cfde3fb3874598cc85f
2012-05-23 12:59:40 -07:00
Attila Nagy
ea392d4714 Fix another multithreaded encoder loopfilter race condition
After a key frame encoding, the frame type could change while
filtering is still going on. Pass the frame type as parameter to the
loopfilter function and don't read it from common storage.

vp8cx_set_alt_lf_level has to be done before packing the stream.
Currently alt_lf_level is not used so there hasn't been any visible
problem here.

Change-Id: Ia114162158cd833c2b16e3b89303cc9c91f19165
2012-05-23 15:19:48 +03:00
Yunqing Wang
eb5b965b44 Merge "multi-res: force Key frame sychronization" 2012-05-22 08:00:12 -07:00
Yunqing Wang
65dd157c3c multi-res: force Key frame sychronization
In multi-resolution encoding, frame_type decision for each frame
is made by the lowest-resolution encoder. For all other higher-
resolution encoders, kf_mode is always set to VPX_KF_DISABLED,
and they are forced to use the same frame_type picked by the
lowest-resolution encoder.

Change-Id: Ic4d52ec65bbc012ca9c2d236210e28a295591eaf
2012-05-16 15:06:42 -04:00
Scott Graham
92963df086 fix warnings for building on win32
Change-Id: If6e11ba3d681e831d7d98662c0abdd2ac16b3811
2012-05-11 12:36:50 -07:00
John Koleszar
44d35f7b25 Merge branch 'origin/eider' into master
Conflicts:
	vp8/common/entropymode.c
	vp8/common/entropymode.h
	vp8/encoder/encodeframe.c
	vp8/vp8_cx_iface.c

Change-Id: I708b0f30449b9502b382e47b745d56f5ed2ce265
2012-05-11 10:51:05 -07:00