Level conformance is standadized in vp9.
If a specific target level is set, the vp9 encoder is required to
produce conformant bitstream with limit on frame size, rate,
min alt-ref distance, etc.
This change makes the SimpleEncode environment take the target level
as an input.
To make existing tests pass, we set the level to 0.
Change-Id: Ia35224f75c2fe50338b5b86a50c84355f5daf6fd
Two pass rc parameters are only initialized in the second pass
in vp9 normal two pass encoding.
However, the simple_encode API queries the keyframe group, arf group,
and number of coding frames without going throught the two pass
route.
Since recent libvpx rc changes, parameters in the TWO_PASS
struct have a great influence on the determination of the above
information.
We therefore need to properly init two pass rc parameters in
the simple_encode related environment.
Change-Id: Ie14b86d6e7ebf171b638d2da24a7fdcf5a15c3d9
Recently, some function signatures have been changed.
This change fixes compilation error if --enable-rate-ctrl is used.
Change-Id: Ib8e9cb5e181ba1d4a6969883e377f3dd93e9289a
Tpl stats is computed at the beginning of encoding the altref
frame. We aggregate tpl stats of all blocks for every frame of
the current group of picture.
After the altref frame is encoded, the tpl stats is passed through
the encode frame result to external environment.
Change-Id: I2284f8cf9c45d35ba02f3ea45f0187edbbf48294
1) Use kRefFrameTypeNone in the unit test
2) Reset mv_info in fp_motion_vector_info_init
3) Call fp_motion_vector_info_init() in first_pass_encode()
4) Set mv_info for intra frame.
5) Set mv_info with zero mv as default for inter frame
6) Remove duplicated fp_motion_vector_info in encode_frame_info
Change-Id: I2f7db5cd4cf1f19db039c9ce638d17b832f45b6e
Store motion vectors for each 16x16 block found in the first pass
motion search.
Provide an api "ObserveFirstPassMotionVector()" in SimpleEncode
class, similar to "ObserveFirstPassStats()".
Change-Id: Ia86386b7e4aa549f7000e7965c287380bf52e62c
Let SetExternalGroupOfPicturesMap() modify the gop_map_ to satisfy
the following constraints.
1) Each key frame position should be at the start of a gop.
2) The last gop should not use an alt ref.
Add unit test for SetExternalGroupOfPicturesMap()
Change-Id: Iee9bd238ad0fc5c2ccbf2fbd065a280c854cd718
Rename external_arf_indexes by gop_map
Use kGopMapFlagStart to indicate the start of a gop in the gop_map.
Use kGopMapFlagUseAltRef to indicate whether to use altref in the
gop_map.
Change-Id: I743e3199a24b9ae1abd5acd290da1a1f8660e6ac
Send GOP_COMMAND to vp9 for setting gop decisions on the fly.
GOP_COMMAND has three members.
use: use this command to set gop or use vp9's gop decision.
show_frame_count: number of show frames in this gop.
use_alt_ref: use alt ref frame or not.
Move the logic of processing external_arf_indexes_ from
get_gop_coding_frame_num() to GetGopCommand() and
GetCodingFrameNumFromGopMap().
Change-Id: Ic1942c7a4cf6eecdf3507864577688350c7ef0cf
Fix several bugs to make the test pass.
1) Move update_frame_indexes() out of show_frame check.
2) Init coding_indexes[i] to -1 when key frame appears
3) Fix a bug in PostUpdateRefFrameInfo()
Change-Id: Ie7c70a1d460e5b89475a1aef77416fc9a88387e1
It's necessary to get data pointer from a vector sometimes.
This function will guarantee that the data pointer is nullptr
if the vector is empty.
Change-Id: I156308bcb193fe404452d3cd3b24b3f80c3c3727
RefFrameInfo contains the coding_indexes and valid_list of
three reference frame types.
Note that I will add unit test in the follow-up CLs.
Change-Id: Ia055df1f8a5537b2bdd02c78991df9bbf48e951a
Add a test to ensure that encoding with the external arfs gets the
same result as long as the arfs are the same as the vp9 baseline.
Change-Id: I92c79001018f4df3bc16e9fc56c733509bebb9dc
When "rate_ctrl" experiment is on, we allow the external arf
passed from outside to determine group of picture size
in define_gf_group().
Change-Id: I0b8c3e1bf3087f21a4e484354168df4967d35bba
Replace golden and altref by past and future in RefFrameType.
So that we don't get confused with FrameType and RefFrameType.
Change-Id: I1be45d49f76c68869fc4bf53ff946fee9ce7eb9d
Add coding_index to EncodeFrameInfo
Add start_coding_index to GroupOfPicture
Add frame_coding_index_ to SimpleEncode
The definition of coding index is as follows.
Each show or no show frame is assigned with a coding index based
on its coding order (starting from zero) in the coding process of
the entire video. The coding index for each frame is unique.
Change-Id: I43e18434a0dff0d1cd6f927a693d6860e4038337
Pass the motion vector info stored to the encode frame result
through the interface "update_encode_frame_result()".
Change-Id: I589affa0c4c4d0fd4d639edff9068e44a715beff
Add outfile_path to SimpleEncode() with default value NULL.
The encoder will only output bitstream when outfile_path is set.
Change-Id: Ic68e5358ea454358c510bb0ae214f4201cb3db39
Init the memory for partition information in "EncodeFrameResult".
And pass the partition information of vp9 encoder to it through
the interface: "update_encode_frame_result()".
Change-Id: Iea049e661da79f54d41da7924b9ef28ff7cfbfa3
Allocate partition information for the frame, and update it
when a superblock (64x64) is encoded.
The unit size of the smallest block is 4x4.
For each 4x4 block, store the current positition (row, column),
the start positition (row_start, column_start) of the partition,
and the block width and height of the partition.
Change-Id: I11c16bbca7e89a088715a1200abd23fe2f9ca1d6