Commit Graph

1219 Commits

Author SHA1 Message Date
Yaowu Xu
d4700731ca remove redundant functions
The encoder defined about 4 set of similar functions to calculate sum,
variance or sse or a combination of them. This commit removed one set
of these functions, get8x8var and get16x16var, where calls to the later
function are replaced with var16x16 by using the fact on a 16x16 MB:
    variance == sse - sum*sum/256

Change-Id: I803eabd1fb3ab177780a40338cbd596dffaed267
2011-06-06 16:44:05 -07:00
Yunqing Wang
03973017a7 Remove hex search's variance calculation while in real-time mode
In real-time mode motion search, there is no need to calculate
variance. This change improved encoding speed by 1% ~ 2%(speed=-5).

Change-Id: I65b874901eb599ac38fe8cf9cad898c14138d431
2011-06-06 19:11:05 -04:00
Johann
04edde2b11 Merge "neon fast quantize block pair" 2011-06-06 13:42:58 -07:00
Johann
da8eb716e8 Merge "adds preload for armv6 encoder asm" 2011-06-06 13:32:13 -07:00
Johann
c73eb2ffff Use shared object files for ELF
Fixes #326

Change-Id: I5f2a4257430ef62f674190acefd43a0474821288
2011-06-06 16:10:31 -04:00
Scott LaVarnway
d1c0ba8f7a Merge "Removed unnecessary bmi motion vector stores." 2011-06-06 07:57:39 -07:00
John Koleszar
824e9410c6 Merge "Don't allow very short GF groups even when the GF is predicted from an ARF." 2011-06-06 07:02:29 -07:00
John Koleszar
212f618373 Reduce overshoot in 1 pass rate control
This patch attempts to reduce the peak bitrate hit by the encoder
when using small buffer windows.

Tested on the CIF set over 200-500kbps using these settings:

  --buf-sz=500 --buf-initial-sz=250 --buf-optimal-sz=250 \
  --undershoot-pct=100

Two pass encodes were tested at best quality. One pass encodes were
tested only at realtime speed 4:

  --rt --cpu-used=-4

The peak datarate (over the specified 500ms window) was measured
for each encode, and averaged together to get metric for
"average peak," computed as SUM(peak)/SUM(target). This patch
reduces the average peak datarate as follows:

  One pass:
    baseline:   1.29715
    this patch: 1.23664

  Two pass:
    baseline:   1.32702
    this patch: 1.37824

This change had a positive effect on our quality metrics as well:

  One pass CBR:
                    Min  / Mean / Max (pct)
    Average PSNR    -0.42 / 2.86 / 27.32
    Overall PSNR    -0.90 / 2.00 / 17.27
    SSIM            -0.05 / 3.95 / 37.46

  Two pass CBR:
                    Min  / Mean / Max (pct)
    Average PSNR    -4.47 / 4.35 / 35.99
    Overall PSNR    -3.40 / 4.18 / 36.46
    SSIM            -4.56 / 6.98 / 53.67

  One pass VBR:
                    Min  / Mean / Max (pct)
    Average PSNR    -5.21 /  0.01 / 3.30
    Overall PSNR    -8.10 / -0.38 / 1.21
    SSIM            -7.38 / -0.11 / 3.17
    (note: most values here were close to the mean, there were a few
     outliers on files that were very sensitive to golden frame size)

  Two pass VBR:
                    Min  / Mean / Max (pct)
    Average PSNR    0.00 / 0.00 / 0.00
    Overall PSNR    0.00 / 0.00 / 0.00
    SSIM            0.00 / 0.00 / 0.00

Neither one pass or two pass CBR mode adheres particularly strictly
to the short term buffer constraints, and two pass is less
consistent, even in the baseline commit. This should be addressed
in a later commit. This likely will hurt the quality numbers, as it
will have to reduce the burstiness of golden frames.

Aside: My work on this commit makes it clear that we need to make
rate control modes "pluggable", where you can easily write a new
one or work on one in isolation.

Change-Id: I1ea9a48f2beedd59891f1288aabf7064956b4716
2011-06-03 16:38:11 -04:00
Scott LaVarnway
f1d6cc79e4 Removed unnecessary bmi motion vector stores.
left_block_mv and above_block_mv will return the MB
motion vector for non SPLITMV macro blocks.

Change-Id: I58dbd7833b4fdcd44b6b72e98ec732c93c2ce4f4
2011-06-03 13:09:46 -04:00
Scott LaVarnway
8c5b73de2a Merge "Removed B_MODE_INFO" 2011-06-03 08:32:30 -07:00
Yunqing Wang
e5c236c210 Adjust bounds checking for hex search in real-time mode
Currently, hex search couldn't guarantee the motion vector(MV)
found is within the limit of maximum MV. Therefore, very large
motion vectors resulted from big motion in the video could cause
encoding artifacts. This change adjusted hex search bounds
checking to make sure the resulted motion vector won't go out
of the range. James Berry, thank you for finding the bug.

Change-Id: If2c55edd9019e72444ad9b4b8688969eef610c55
2011-06-03 08:53:42 -04:00
Scott LaVarnway
773768ae27 Removed B_MODE_INFO
Declared the bmi in BLOCKD as a union instead of B_MODE_INFO.
Then removed B_MODE_INFO completely.

Change-Id: Ieb7469899e265892c66f7aeac87b7f2bf38e7a67
2011-06-02 13:46:41 -04:00
Ronald S. Bultje
9f002bee53 Don't allow very short GF groups even when the GF is predicted from an ARF.
This is basically a slightly modified version of the previous patch,
and it has a moderately positive effect (SSIM/PSNR both +0.08% avg
on derf-set). Most clips show no change, except waterfall/coastguard,
each ~ +0.8% SSIM/PSNR. You can see similar effects in other clips
by shortening their length to terminate at a very short last group
of frames.

Change-Id: I7a70de99ca1f9fe6a8b6ca7a6e30e8a4b64383e4
2011-06-02 09:14:51 -07:00
Yaowu Xu
4ce6928d5b Merge "further clean up of errorperbit and sadperbit" 2011-06-02 08:58:03 -07:00
Yaowu Xu
5b2fb32961 further clean up of errorperbit and sadperbit
this commit makes the usage errorperbit and sadperbit consistent for
encoding modes and passes. Removed all different magic weight factors
associated with errorperbit. Now 1/2 is used for both sadperbit16 and
sadperbit4, the /2 operation is merged into initializations of the 2
variables.

Tests on cif set show .23%, 0.18% and 0.19% gain by avg psnr, overall
psnr and ssim respectively.

Change-Id: Ifa285c3e065ce0a5a77addfc9f95aabf54ee270d
2011-06-01 14:44:06 -07:00
John Koleszar
4101b5c5ed Merge "Bugfix in vp8dx_set_reference" 2011-06-01 13:57:23 -07:00
Henrik Lundin
69ba6bd142 Bugfix in vp8dx_set_reference
The fb_idx_ref_cnt book-keeping was in error. Added an assert to
prevent future errors in the reference count vector. Also fixed a
pointer syntax error.

Change-Id: I563081090c78702d82199e407df4ecc93da6f349
2011-06-01 21:41:12 +02:00
John Koleszar
5610970fe9 Merge "Fix code under #if CONFIG_INTERNAL_STATS." 2011-06-01 11:14:17 -07:00
Ronald S. Bultje
34ba18760f Fix code under #if CONFIG_INTERNAL_STATS.
Change-Id: Iccbd78d91c3071b16fb3b2911523a22092652ecd
2011-06-01 11:10:13 -07:00
Yaowu Xu
50916c6a7d remove some magic weights associated with sad_per_bit
sad_per_bit has been used for a number of motion vector search routines
with different magic weights: 1, 1/2 and 1/4. This commit remove these
magic numbers and use 1/2 for all motion search routines, also reformat
a number of source code lines to within 80 column limit.

Test on cif set shows overall effect is neutral on all metrics. <=0.01%

Change-Id: I8a382821fa4cffc9c0acf8e8431435a03df74885
2011-06-01 10:10:44 -07:00
Tero Rintaluoma
61f0c090df neon fast quantize block pair
vp8_fast_quantize_b_pair_neon function added to quantize
two adjacent blocks at the same time to improve performance.
 - Additional 3-6% speedup compared to neon optimized fast
   quantizer (Tanya VGA@30fps, 1Mbps stream, cpu-used=-5..-16)

Change-Id: I3fcbf141e5d05e9118c38ca37310458afbabaa4e
2011-06-01 10:48:05 +03:00
Scott LaVarnway
9e4f76c154 Merge "vp8_pick_inter_mode code cleanup" 2011-05-31 12:31:46 -07:00
Scott LaVarnway
1a5a1903ea vp8_pick_inter_mode code cleanup
Small code cleanups before attempting to reduce the size
of bmi found in BLOCKD.

Change-Id: Ie9c14adb53afd847716a75bcce067d0e6c04f225
2011-05-31 14:24:42 -04:00
John Koleszar
0a72f568ec Initialize first_time_stamp_ever
Misplaced #endif caused first_time_stamp_ever to only be initialized if
CONFIG_INTERNAL_STATS was set.

Change-Id: I2296a4ab00f7dfb767583edcc5d59b94f48c0621
2011-05-31 12:37:45 -04:00
Tero Rintaluoma
5305e79eae adds preload for armv6 encoder asm
Added preload instructions to armv6 encoder optimizations.
About 5% average speed-up on Tegra2 for VGA@30fps sequence.

Change-Id: I41d74737720fb71ce7a316f07555357822f3347e
2011-05-30 11:10:03 +03:00
John Koleszar
4a4ade6dc8 Merge "bug fix check frame buffer index before copy" 2011-05-27 12:35:06 -07:00
James Berry
8795b52512 bug fix check frame buffer index before copy
in onyx_if.c update_reference_frames() make
sure that frame buffer indexes are not equal
before preforming a buffer copy.  If two frames
share the same buffer the flags will already be
set correctly.

Change-Id: Ida9b5516d08e3435c90f131d2dc19d842cfb536e
2011-05-27 14:59:29 -04:00
Yunqing Wang
4fb5ce6a92 Merge "Use hex search for realtime mode speed>4" 2011-05-27 11:12:50 -07:00
Yunqing Wang
4d052bdd91 Use hex search for realtime mode speed>4
Test showed using hex search in realtime mode largely speed up
encoding process, and still achieves similar quality like the
diamond search we have. Therefore, removed the diamond search
option.

Change-Id: I975767d0ec0539f9f6ed7fdfc09506e39761b66c
2011-05-27 14:05:02 -04:00
Scott LaVarnway
ba420f1097 Merge "Broken EC after MODE_INFO size reduction" 2011-05-27 07:52:04 -07:00
Yunqing Wang
5a8cbb8955 Merge "Remove unused code" 2011-05-27 07:25:25 -07:00
Yunqing Wang
2dc24635ec Remove unused code
Hex search is not called in rdopt.c

Change-Id: I67347f03e13684147a7c77fb9e9147e440bb5e8e
2011-05-27 10:20:49 -04:00
Scott LaVarnway
4f586f7bd0 Broken EC after MODE_INFO size reduction
This patch fixes the compiler errors and the seg fault
when running decode_with_partial_drops.

Change-Id: I7c75369e2fef81d53b790d5dabc327218216838b
2011-05-26 15:13:00 -04:00
John Koleszar
1fe5070b76 Merge "Do not copy data between encoder reference buffers." 2011-05-26 09:58:26 -07:00
Yaowu Xu
9a248f1593 Merge "fix the mix use of errorperbit and sadperbit" 2011-05-26 09:39:41 -07:00
Scott LaVarnway
40b850b458 Merge "Use int_mv instead of MV in vp8_mv_cont" 2011-05-26 07:01:38 -07:00
Yaowu Xu
d8c525b8b1 fix the mix use of errorperbit and sadperbit
error_per_bit and sad_per_bit were designed as estimates of a bit worth
of sum squared error and sum absolute difference respectively. Under
this assumption, error_per_bit should be used in combination with 2nd
order errors (variance or sum squared error) while sad_per_bit should
be used in combination with 1st order SADs in motion estimation. There
were a few places where sad_per_bit has been misused with variances,
this commit changes to use error_per_bit for those places, also changes
parameter names to properly indicate which constant is being used.

On cif set, the change has a universal gain by all metrics: 0.13% by
average/overall psnr and 0.1% by ssim.

Change-Id: I4850fdcc3fd6886b30f784bd843f13dd401215fb
2011-05-25 16:48:10 -07:00
Yunqing Wang
13b56eeb7a Merge " Use var8x8 instead of get8x8var in VP8_UVSSE" 2011-05-25 11:35:42 -07:00
Yunqing Wang
f299d628f3 Merge "Return sse value in vp8_variance SSE2 functions" 2011-05-25 11:31:07 -07:00
Yaowu Xu
22c05c0575 remove code not in use
Change-Id: I6e5e86235d341cce3b02abda26dbeb71940ed955
2011-05-25 09:46:37 -07:00
Yunqing Wang
b6679879b8 Return sse value in vp8_variance SSE2 functions
Minor modification.

Change-Id: I09511d38fd1451d5c4106a48acdb3f766ce59cb7
2011-05-25 11:55:41 -04:00
Attila Nagy
a615c40499 Use var8x8 instead of get8x8var in VP8_UVSSE
'sum' returned by get8x8var is not used and var8x8 has optimizations
  for more platforms.

Change-Id: I4a907fb1a05f285669fb0b95dc71d42182c980f6
2011-05-25 12:54:34 +03:00
Yunqing Wang
d75eb73653 Fix a bug happening while encoding at profile=3
While profile=3, there is no sub-pixel search. Distortion and SSE
have to calculated using get_inter_mbpred_error().

Change-Id: Ifb36e17eef7750af93efa7d0e2870142ef540184
2011-05-24 16:28:23 -04:00
Scott LaVarnway
a39321f37e Use int_mv instead of MV in vp8_mv_cont
Less operations.

Change-Id: Ibb9cd5ae66b8c7c681c9a654d551c8729c31c3ae
2011-05-24 16:01:12 -04:00
Scott LaVarnway
cfab2caee1 Removed unused variable warnings
Change-Id: I6e5e921f03dc15a72da89a457848d519647677a3
2011-05-24 15:17:03 -04:00
Scott LaVarnway
b5278f38b0 Merge "MODE_INFO size reduction" 2011-05-24 12:08:24 -07:00
Scott LaVarnway
e11f21af9a MODE_INFO size reduction
Declared the bmi in MODE_INFO as a union instead of B_MODE_INFO.
This reduced the memory footprint by 518,400 bytes for 1080
resolutions.  The decoder performance improved by ~4% for the
clip used and the encoder showed very small improvements. (0.5%)
This reduction was first mentioned to me by John K. and in a
later discussion by Yaowu.
This is WIP.

Change-Id: I8e175fdbc46d28c35277302a04bee4540efc8d29
2011-05-24 13:24:52 -04:00
John Koleszar
fbea372817 Merge "Fixing bug in VP8_SET_REFERENCE decoder control command" 2011-05-24 05:57:44 -07:00
Yunqing Wang
69aad3a720 Merge "Rewrite hex search function" 2011-05-24 05:26:16 -07:00
Henrik Lundin
a126cd1760 Fixing bug in VP8_SET_REFERENCE decoder control command
In vp8dx_set_reference, the new reference image is written to an
unused reference frame buffer.

Change-Id: I9e4f2cef5a011094bb7ce7b2719cbfe096a773e8
2011-05-24 09:03:43 +02:00