Commit graph

92 commits

Author SHA1 Message Date
Ray Essick
98764ebb77 Merge "Encoder: Defined structures for accessing MB header data" am: 8aa140b8a5 am: fef5e9e203 am: eba0a08cdd
am: 2ebe889e3f

Change-Id: I3267957cccb5927afa25bb5c266974c8ee96a529
2016-11-29 14:46:59 +00:00
Ray Essick
fef5e9e203 Merge "Encoder: Defined structures for accessing MB header data"
am: 8aa140b8a5

Change-Id: Ib3e9cad8eb8ddbd5c941ff4d4c96a12e0f309831
2016-11-29 14:33:27 +00:00
Harish Mahendrakar
ff291d3b55 Encoder: Fixed unaligned access of i1_ref_idx and u1_mv in cabac context am: 0a69e08c39 am: c812fef1e2 am: 6841513a26
am: a6723af7d7

Change-Id: I4be6289792cc5fba23e1ef77988ffb5503f2b133
2016-11-29 00:10:35 +00:00
Harish Mahendrakar
c812fef1e2 Encoder: Fixed unaligned access of i1_ref_idx and u1_mv in cabac context
am: 0a69e08c39

Change-Id: I5b6c330440b5219da31bf5f7e07b01fb65d8804a
2016-11-28 23:56:33 +00:00
Harish Mahendrakar
c7d9c91417 Encoder: Defined structures for accessing MB header data
Instead of using hard coded address offsets,
defined structures to access MB Header for each MB type
This improves readability of the code

Also helps in maintaining required alignment for MV
MV elements need to be aligned to 2 byte boundary
Unaligned accesses result in undefined behavior

Bug: 33073518
Test: Tested with -fsanitize=alignment enabled on avcenc
Change-Id: I51c009b7deded76315a4bf2880444d21ae7d517f
2016-11-24 12:25:49 +05:30
Harish Mahendrakar
0a69e08c39 Encoder: Fixed unaligned access of i1_ref_idx and u1_mv in cabac context
i1_ref_idx and u1_mv in cabac context are defined as char,
but were typecasted to int and were accessed, and were not
aligned to 4 byte boundary.
This results in an undefined behaviour

Bug: 33073518
Test: Tested with -fsanitize=alignment enabled on avcenc
Change-Id: Ie4a73de076a9239f2d8707af68b7d2cd796aa803
2016-11-24 12:22:25 +05:30
Martin Storsjo
139b00ec62 armv8: Fix ime_calculate_sad3_prog_av8 am: e17ec6c736 am: 6b6d0367bd
am: 7a0ad00205

Change-Id: I2eaaf4228bae126fd12db937ab44dc4ebb1b99f2
2016-10-15 00:01:00 +00:00
Martin Storsjo
8c00fcbbb8 armv8: Add missing sign extension for WORD32 parameters am: d91f49ad65 am: e1caaaa797
am: 04f62e56bc

Change-Id: Ic3e1bbd84755fd6c4d7c6e6e5625aed2a64e6b8e
2016-10-15 00:00:59 +00:00
Martin Storsjo
3e70522f6d armv8: Remove duplicated, incorrect function argument declarations am: 545b474453 am: 00c7db0c96
am: 04671f8f87

Change-Id: I3314bf58c8ee3fdfb25308e11fbfba682a4d642b
2016-10-15 00:00:57 +00:00
Martin Storsjo
6b6d0367bd armv8: Fix ime_calculate_sad3_prog_av8
am: e17ec6c736

Change-Id: If12aa8dbbaee8df609d09d12df035598864a2152
2016-10-14 23:52:59 +00:00
Martin Storsjo
e1caaaa797 armv8: Add missing sign extension for WORD32 parameters
am: d91f49ad65

Change-Id: I7ec90a993752a3bf0d4dd72a358d776b5eca13b5
2016-10-14 23:52:58 +00:00
Martin Storsjo
00c7db0c96 armv8: Remove duplicated, incorrect function argument declarations
am: 545b474453

Change-Id: I8918db5761a5cf22fb0895a31bddd57cd63135d1
2016-10-14 23:52:56 +00:00
Martin Storsjo
e17ec6c736 armv8: Fix ime_calculate_sad3_prog_av8
Previously, this used x5 (which is a stride parameter)
as destination pointer, and overwrote the destination in x6
with a counter, and looped to a label in another function.

In practice, this function is never used, which is why this
hasn't been noticed before.

Change-Id: Iab87a2960c36b7dc4de4216b1d4bbbe4e9f03578
2016-10-06 10:29:43 +03:00
Martin Storsjo
d91f49ad65 armv8: Add missing sign extension for WORD32 parameters
For WORD32 parameters, the upper half of the parameter
registers is undefined (even though it is zero in most cases).

When easily doable, use the 'w' register names for such
parameters instead of doing the sign extension with a
separate instruction.

This fixes crashes in some configurations, when built with
clang, which can pass nonzero bits in the high half of registers
more aggressively than GCC.

Also fix the parameter/register mappings; use wN register
names where applicable, and fix incorrect parameter
placement. (Some functions still were documented to have
only 4 parameters in registers.)

Change-Id: Icedf6503b064149d1a651ff1c6a76de5c01722ea
2016-10-06 10:29:43 +03:00
Martin Storsjo
545b474453 armv8: Remove duplicated, incorrect function argument declarations
Having incorrect comments is only misleading and confusing.

Change-Id: I7560e152194c8d50d6218b0b2144a9628218b7c3
2016-10-05 14:24:53 +03:00
Ryan Haining
72ba34b131 Increases max screen height and width to 2560.
This is the Nexus 6P screen size. Our initial testing seems to indicate
this works.

Change-Id: Ia4abf22917d32d178c63e36148cfd541a2dab3e0
2016-08-22 12:09:12 -07:00
Harish Mahendrakar
c6d69ce363 Encoder: Fix in signalling direct_8x8_inference_flag in SPS am: 7f1e3b7b07 am: 3f977fc6db
am: 7fc983fad7

Change-Id: I6c09521cfa378ce816ab492c52ac03233a7b2654
2016-08-09 20:52:19 +00:00
Harish Mahendrakar
3f977fc6db Encoder: Fix in signalling direct_8x8_inference_flag in SPS
am: 7f1e3b7b07

Change-Id: I4e723a5dfcd290069df1ad78716db4d9723690af
2016-08-09 20:46:48 +00:00
Doney Alex
983e1aecd4 Encoder: Added support for configuring VUI parameters.
Bug: 27442922

Change-Id: I781195e78c480e7449f49467abb1df71902e568d
2016-07-12 14:41:59 -07:00
Harish Mahendrakar
7f1e3b7b07 Encoder: Fix in signalling direct_8x8_inference_flag in SPS
For level 3.0 and above this value should be set to 1 as per spec

Change-Id: I6930e4e5165e4c5012997f009cbe05397303d650
2016-07-01 05:59:22 +00:00
Doney Alex
6581cbf841 DO NOT MERGE Encoder: Fixed adaptive intra refresh.
Earlier if an MB was coded as intra in the previous frame,
corresponding MB in the current frame will not be coded as intra
even though it was supposed to be intra according to adaptive intra refresh.
Now the MB will honour adaptive intra refresh irrespective of its type
in previous frame.

Change-Id: Icc84ddf962dad6f7d1f4d11e9cb2a37bcda567b8
2016-03-12 00:11:40 +00:00
Doney Alex
dfe686ad4a DO NOT MERGE Encoder: Added support for Constrained intra prediction.
Change-Id: I674746047b2b007ca4bc52fad1a2cd9b177cd7bb
2016-03-11 22:10:12 +00:00
Doney Alex
c8eb4561bd Merge "Encoder: Fixed adaptive intra refresh." am: cb9903952b
am: dbcbd3567f

* commit 'dbcbd3567f':
  Encoder: Fixed adaptive intra refresh.
2016-02-26 15:30:24 +00:00
Doney Alex
62ce412f74 Encoder: Added support for Constrained intra prediction. am: 8668fbcc97
am: e0f8b95f0c

* commit 'e0f8b95f0c':
  Encoder: Added support for Constrained intra prediction.
2016-02-26 15:30:14 +00:00
Hangyu Kuang
cb9903952b Merge "Encoder: Fixed adaptive intra refresh." 2016-02-26 15:24:58 +00:00
Doney Alex
4f067b6d46 Encoder: Fixed adaptive intra refresh.
Earlier if an MB was coded as intra in the previous frame,
corresponding MB in the current frame will not be coded as intra
even though it was supposed to be intra according to adaptive intra refresh.
Now the MB will honour adaptive intra refresh irrespective of its type
in previous frame.

Change-Id: Icc84ddf962dad6f7d1f4d11e9cb2a37bcda567b8
2016-02-24 19:30:29 +05:30
Doney Alex
8668fbcc97 Encoder: Added support for Constrained intra prediction.
Change-Id: I674746047b2b007ca4bc52fad1a2cd9b177cd7bb
2016-02-24 16:12:19 +05:30
Harish Mahendrakar
089f41d1f5 Encoder: Fixed an out of bound write in AIR map
pu2_intr_rfrsh_map was initialized with a wrong pointer which was
resulting in an out of bound write.
This was resulting in inconsistent output between runs when AIR was
enabled

Bug: 27076302

Change-Id: I1f36936837e3cb221ff218c3c6e7b8b20a0e26a7
2016-02-10 10:23:36 -08:00
Dan Willemsen
f197ccb756 Remove __DATE__/__TIME__ from Android builds
This removes unnecessary changes from build to build.

Bug: 24204119
Change-Id: I25258314fe56ea186d38d756fb5fb04aa689a812
2015-10-27 17:52:13 -07:00
Hamsalekha S
4202606c70 Encoder added support for VUI params
SPS will now include vui params
Removed a trailing space in ih264e_api.c

Change-Id: I67a57741689206e571e9a83f7e3360149f87e06a
2015-08-04 11:27:29 +05:30
Harish Mahendrakar
2eaba5ebd1 Encoder: Fixed an issue in handling FPS greater than 60
FPS > 60 was resulting in an integer overflow, so using float now.

Change-Id: I4626ba6a43167c00c42dd6440df37bd1eb1f151a
2015-08-03 12:13:51 +05:30
Marco Nelissen
1cd52d608f Merge "Don't use side effects in the macro PUT_BITS_SEV parameters" 2015-07-28 19:16:42 +00:00
Harinarayanan K K
aad4587335 Made gops closed
Now no picture in a gop will depend on any picture in the previous gop

All calls to force an IDR are respected as soon as possible

Change-Id: Id2bcd5687c3fb786336a01894c1b9228d67a87a6
2015-07-28 19:14:39 +00:00
Marco Nelissen
634567f170 Merge "Always do recon of 4x4 intra blocks" 2015-07-28 18:53:44 +00:00
Martin Storsjo
5696adb5ec Validate the u4_entropy_coding_mode field
Previously, if this field wasn't set, the invalid coding mode
could lead to crashes later.

Change-Id: If8dd2f8d5f2fbdd6bb76772344f959df23159167
2015-07-28 18:52:05 +00:00
Harinarayanan K K
b7d5bb5e2a Fixed issue in cost computation for BIPRED ME
BIPRED ME was discarding the halfpel motion vector components
in cost computation. That is fixed now.

Change-Id: If6c77096d701a258920b14134ff120fd1540f254
2015-07-28 18:50:14 +00:00
Doney Alex
9c6a2f78dd Cabac optimizations
Optimized cabac functions for writing bypass bins.
Removed unused return from cabac flush function.
Removed the macro REV_NBITS.

Change-Id: Iece82797f2f45a35281817a2b77a7c7fe4e02bd1
2015-07-28 18:48:57 +00:00
Martin Storsjo
0fee94865a Use INT_MAX as i4_max_sad in ih264e_evaluate_bipred
The stored i4_mb_distortion that was used as i4_max_sad previously
might come from a different coding mode - even if
pf_ime_compute_sad_16x16 returns early when i4_mb_distortion is
larger than ps_mb_ctxt_bi->i4_mb_distortion, the calculated i4_mb_cost
can still end up smaller than ps_mb_ctxt_bi->i4_mb_cost.

Therefore, set i4_max_sad to INT_MAX to avoid the early exit in
pf_ime_compute_sad_16x16 here, since it can't be used reliably (and
returning early can end up choosing a suboptimal mode).

This makes sure that the encoded output is identical when the SIMD
optimized routines are disabled, when using B-frames.

Change-Id: I9b8d524f88020e557541700133c7a0b48fe6a3b8
2015-07-28 18:47:19 +00:00
Martin Storsjo
8e78e306bb Make sure that apv_bufs[0] and u4_is_last always are set
When encoding in header mode, the s_inp_buf struct that was written
to ps_video_encode_op->s_ive_op.s_inp_buf was completely uninitialized.

In ih264e_input_queue_update, make sure to initialize u4_is_last
when skipping frames.

Change-Id: I87e677acd00baf4f732ca7d35ee192e7f1f73994
2015-07-28 18:46:30 +00:00
Martin Storsjo
cc58d3f491 Check the width/height and adjust level used for RC
Since 6cb6772805, the actual level used is
MAX(u4_max_level, ih264e_get_min_level()), which means that it isn't
a fatal error to set u4_max_level to a too low level (if the caller
doesn't know or care). Despite this, the actual value set by the caller
was still used for initializing the RC.

This allows the caller to not have to set u4_max_level (currently
every caller has to duplicate a table or code snippet for determining
the right level for each resolution). The caller still can set it
to a higher value if he wants to explicitly use a higher level than
what is necessary.

This makes sure that the output is identical even if u4_max_level is
set too low.

Change-Id: Icdc6c0652a97568d1eafc050226357a9d643d809
2015-07-28 18:44:06 +00:00
Marco Nelissen
a306c95201 Merge "Fixed encode of trailing B frames" 2015-07-28 18:43:47 +00:00
Marco Nelissen
d0603c30a6 Merge "Remove the now unused stride field from the set dimensions struct" 2015-07-28 18:42:28 +00:00
Harinarayanan K K
f080d51500 Fixed encode of single frame
Encoding a single frame used to make encoder to go into infinite
loop. That is fixed now

Change-Id: I51752bdc5fd6071868884c2ff6074c14d05c8564
2015-07-28 18:37:38 +00:00
Martin Storsjo
9fbffcfb6e Don't declare variables after statements
This fixes building with compilers that are strict about the pre-C99
rule about having all variable declarations before statements.

(The previous version of this commit was originally made before
the commit adding support for main profile, which added a bunch
more similar issues.)

Change-Id: I0a927deb2ef4125f79429d108439e249fa531607
2015-07-28 18:35:54 +00:00
Martin Storsjo
a77fc521ca Don't use side effects in the macro PUT_BITS_SEV parameters
If ENTROPY_TRACE is defined, the value parameter gets evaluated
twice. Since this parameter includes ++, the pointer gets incremented
twice.

This fixes encoding with trace enabled.

Change-Id: I3d71ac33d007301e488d264a33c7b5c4d4ff2b56
2015-07-18 17:30:44 +03:00
Martin Storsjo
17c7e8e151 Always do recon of 4x4 intra blocks
Even if this 4x4 block isn't at the bottom or right border,
the other 4x4 intra blocks within the same macroblock may
use it for intra prediction.

This fixes intra coded macroblocks in b-frames.

Change-Id: Ifdf48c1b2bbf232e785d6d5b8244aacba1ad3dd6
2015-07-02 13:22:18 +03:00
Harinarayanan K K
4d35438288 Fixed encode of trailing B frames
In case a P frame was marked as the last frame to encode, the B frames
previous to it in the same gop were not getting encoded. This is fixed now.

Change-Id: I871f2a1d52b8db9ee75426b00287b58203586f23
2015-06-29 15:04:53 +05:30
Martin Storsjo
18e256879b Remove the now unused stride field from the set dimensions struct
Since 90a3904fd3 and d020be5ac7, this field doesn't have any actual
effect - the strides are taken from the input pictures.

Change-Id: I9b08cbf8ee558e038d0017a6176d7b3bd3c428bd
2015-06-27 09:28:24 +03:00
Martin Storsjo
76cdaed5fa Remove double semicolons (empty statements)
Some compilers can't handle this, and these occurrances are typos.

Change-Id: I82349f103cef1f196d1a85dae307aff83c7d6090
2015-06-27 00:42:57 +03:00
Marco Nelissen
aabbf6052f Merge "Don't declare variables after statements" 2015-06-25 14:28:51 +00:00