Commit graph

14 commits

Author SHA1 Message Date
Harinarayanan K K
dbe9ac8936 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

Bug: 22860270

Change-Id: Id2bcd5687c3fb786336a01894c1b9228d67a87a6
2015-07-31 18:51:20 +00:00
Martin Storsjo
6fb90f8fec 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.

Bug: 22860270

Change-Id: I87e677acd00baf4f732ca7d35ee192e7f1f73994
2015-07-31 18:50:12 +00:00
Martin Storsjo
a6bcaf3690 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.

Bug: 22860270

Change-Id: Icdc6c0652a97568d1eafc050226357a9d643d809
2015-07-31 18:49:17 +00:00
Harinarayanan K K
01168dc07e 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.

Bug: 22860270

Change-Id: I871f2a1d52b8db9ee75426b00287b58203586f23
2015-07-31 18:48:48 +00:00
Martin Storsjo
88966cf07d Initialize i4_non_ref_frames_in_stream before encoding SPS/PPS
When header mode is enabled, the SPS is populated before this
field was initialized in ih264e_pic_init.

Change-Id: I7e38828e12bee15bd3a53562b4e4d0d65354326a
2015-06-25 08:25:56 -07:00
Harinarayanan K K
d3e18f0c88 Reduced memory requirements.
Buffer allocation is based on minimum level required for the
input resolution rather than the input max level.

Number of maximum context sets can be set to 1 to reduce
memory usage.

Added a macro ENC_MIN_PU_SIZE for minimum size of
inter prediction unit supported by encoder.

Changed the maximum constraint on number of MBs for NMB
processing to width in Mbs.

Change-Id: I5a9255e93935d90c13262681aafc772aedf8ae81
2015-06-25 08:25:54 -07:00
Harinarayanan K K
4e2c308d17 Fixed issues with forcing I and IDR frames.
Setting I frame interval to 1 caused encoder to go into
infinite loop. Fixed that by stopping RC update.

Forcing of I and IDR frame did not cause the frames at expected time
due to delayed encoding. This is fixed now.

Change-Id: Ibf549fb335c053ee33de768455b20e46be3e7c1c
2015-06-25 08:25:53 -07:00
Martin Storsjo
ce7f41973c Remove the codec level stride field
This field isn't used at the moment at all. The public field
ive_ctl_set_dimensions_ip_t.u4_strd is kept to avoid breaking
other calling code, although it doesn't have any actual function
any longer.

Change-Id: Icfc88846fa63f209c67b8e1f8e0cc21bc4ddb73a
2015-06-25 08:25:50 -07:00
Martin Storsjo
9113f5615c Use a separate field for the chroma stride
When both luma and chroma are copied to the local buffer (either
due to yuv format conversion, or due to padding), they have got
the same stride, but if chroma is copied while luma is used directly
from the input buffer, they might have different strides.

Therefore add a separate field for chroma stride.

This commit only adds the field, while it still has got the same
value as before.

Change-Id: I0dce97ad4d91cd1d9aba4b4472c6a0de45a314bc
2015-06-25 08:25:49 -07:00
Harinarayanan K K
3749f6f435 Added support for Main Profile toolsets in encoder.
Added support for CABAC entropy coding.
Added support for B slices.
Fixed an issue in rate control constant QP mode.

Change-Id: Ib759d35e8e943f941aa9b8bbff0362d92c619994
2015-06-25 08:25:43 -07:00
Martin Storsjo
c75cf37283 Support levels 5.0 and 5.1 in the encoder properly
The function ih264e_get_lvl_idx lacked handling of them
before, which meant that it returned index 0 (corresponding
to level 1.0) if level 5.0 or 5.1 were selected.

Change-Id: I482213e68e11fd091c72ec57a593392aa1a0a4ae
2015-06-03 08:47:38 -07:00
Martin Storsjo
df06a38c5b Include space for chroma in the padding allocated in ih264e_get_total_pic_buf_size
Chroma is already accounted for in e.g. num_samples by multiplying
the number of luma samples by 3/2, so include it in the padding
calculation as well.

This fixes encoding 176x144 at level 1.0 - normally this isn't an issue
since the padding is a bit overestimated, but for this particular
resolution/level combination, it fails unless this is calculated properly.

Change-Id: Id5df6e5aee4d3d78f4c28a3b7d5fed6fe42a1f2c
2015-06-03 08:35:02 -07:00
Lajos Molnar
a2b49e5f05 fix file permissions
Change-Id: Ia4f99d5b963acd8d8a1afc2fbdf06b122d898f63
2015-05-05 17:51:34 +00:00
Hamsalekha S
8d3d303c79 Initial version
Change-Id: I7efe9a589cd24edf86e8d086b40c27cbbf8b4017
2015-04-02 15:59:02 +05:30