Index: media/video/h264_poc_unittest.cc |
diff --git a/media/video/h264_poc_unittest.cc b/media/video/h264_poc_unittest.cc |
index df040b395ea5cfc39dfceb0290065ccfeb67918d..81f59e7be1d7418fde7ce4ede4f3b1ae623a57e1 100644 |
--- a/media/video/h264_poc_unittest.cc |
+++ b/media/video/h264_poc_unittest.cc |
@@ -22,16 +22,14 @@ class H264POCTest : public testing::Test { |
} |
protected: |
- bool ComputePOC() { |
- bool result = h264_poc_.ComputePicOrderCnt(&sps_, slice_hdr_, &poc_); |
+ void ComputePOC() { |
+ poc_ = h264_poc_.ComputePicOrderCnt(&sps_, slice_hdr_); |
// Clear MMCO5. |
slice_hdr_.adaptive_ref_pic_marking_mode_flag = false; |
slice_hdr_.ref_pic_marking[0].memory_mgmnt_control_operation = 0; |
slice_hdr_.ref_pic_marking[1].memory_mgmnt_control_operation = 0; |
slice_hdr_.ref_pic_marking[2].memory_mgmnt_control_operation = 0; |
- |
- return result; |
} |
// Also sets as a reference frame and unsets IDR, which is required for |
@@ -45,7 +43,7 @@ class H264POCTest : public testing::Test { |
slice_hdr_.ref_pic_marking[2].memory_mgmnt_control_operation = 0; |
} |
- int32_t poc_; |
+ base::Optional<int32_t> poc_; |
H264SPS sps_; |
H264SliceHeader slice_hdr_; |
@@ -61,29 +59,33 @@ TEST_F(H264POCTest, PicOrderCntType0) { |
// Initial IDR with POC 0. |
slice_hdr_.idr_pic_flag = true; |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Ref frame with POC lsb 8. |
slice_hdr_.idr_pic_flag = false; |
slice_hdr_.frame_num = 1; |
slice_hdr_.pic_order_cnt_lsb = 8; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(8, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(8, *poc_); |
// Ref frame with POC lsb 0. This should be detected as wrapping, as the |
// (negative) gap is at least half the maximum. |
slice_hdr_.pic_order_cnt_lsb = 0; |
slice_hdr_.frame_num = 2; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(16, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(16, *poc_); |
// Ref frame with POC lsb 9. This should be detected as negative wrapping, |
// as the (positive) gap is more than half the maximum. |
slice_hdr_.pic_order_cnt_lsb = 9; |
slice_hdr_.frame_num = 3; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(9, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(9, *poc_); |
} |
TEST_F(H264POCTest, PicOrderCntType0_WithMMCO5) { |
@@ -93,38 +95,44 @@ TEST_F(H264POCTest, PicOrderCntType0_WithMMCO5) { |
// Initial IDR with POC 0. |
slice_hdr_.idr_pic_flag = true; |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Skip ahead. |
slice_hdr_.idr_pic_flag = false; |
slice_hdr_.frame_num = 1; |
slice_hdr_.pic_order_cnt_lsb = 8; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(8, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(8, *poc_); |
slice_hdr_.frame_num = 2; |
slice_hdr_.pic_order_cnt_lsb = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(16, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(16, *poc_); |
slice_hdr_.frame_num = 3; |
slice_hdr_.pic_order_cnt_lsb = 8; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(24, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(24, *poc_); |
// MMCO5 resets to 0. |
slice_hdr_.frame_num = 4; |
slice_hdr_.pic_order_cnt_lsb = 0; |
SetMMCO5(); |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Still detected as positive wrapping. |
slice_hdr_.frame_num = 5; |
slice_hdr_.pic_order_cnt_lsb = 8; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(24, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(24, *poc_); |
} |
TEST_F(H264POCTest, PicOrderCntType1) { |
@@ -138,34 +146,40 @@ TEST_F(H264POCTest, PicOrderCntType1) { |
// Initial IDR with POC 0. |
slice_hdr_.idr_pic_flag = true; |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Ref frame. |
slice_hdr_.idr_pic_flag = false; |
slice_hdr_.frame_num = 1; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(1, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(1, *poc_); |
// Ref frame. |
slice_hdr_.frame_num = 2; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(3, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(3, *poc_); |
// Ref frame. |
slice_hdr_.frame_num = 3; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(4, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(4, *poc_); |
// Ref frame. |
slice_hdr_.frame_num = 4; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(6, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(6, *poc_); |
// Ref frame, detected as wrapping (ie, this is frame 16). |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(24, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(24, *poc_); |
} |
TEST_F(H264POCTest, PicOrderCntType1_WithMMCO5) { |
@@ -179,25 +193,29 @@ TEST_F(H264POCTest, PicOrderCntType1_WithMMCO5) { |
// Initial IDR with POC 0. |
slice_hdr_.idr_pic_flag = true; |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Ref frame. |
slice_hdr_.idr_pic_flag = false; |
slice_hdr_.frame_num = 1; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(1, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(1, *poc_); |
// Ref frame, detected as wrapping. |
SetMMCO5(); |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Ref frame, wrapping from before has been cleared. |
slice_hdr_.frame_num = 1; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(1, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(1, *poc_); |
} |
// |frame_num| values may be duplicated by non-reference frames. |
@@ -212,21 +230,24 @@ TEST_F(H264POCTest, PicOrderCntType1_DupFrameNum) { |
// Initial IDR with POC 0. |
slice_hdr_.idr_pic_flag = true; |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Ref frame. |
slice_hdr_.idr_pic_flag = false; |
slice_hdr_.frame_num = 1; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(1, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(1, *poc_); |
// Duplicate |frame_num| frame. |
slice_hdr_.nal_ref_idc = 0; |
slice_hdr_.frame_num = 1; |
slice_hdr_.delta_pic_order_cnt0 = 2; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(2, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(2, *poc_); |
} |
TEST_F(H264POCTest, PicOrderCntType2) { |
@@ -235,34 +256,40 @@ TEST_F(H264POCTest, PicOrderCntType2) { |
// Initial IDR with POC 0. |
slice_hdr_.idr_pic_flag = true; |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Ref frame. |
slice_hdr_.idr_pic_flag = false; |
slice_hdr_.frame_num = 1; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(2, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(2, *poc_); |
// Ref frame. |
slice_hdr_.frame_num = 2; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(4, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(4, *poc_); |
// Ref frame. |
slice_hdr_.frame_num = 3; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(6, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(6, *poc_); |
// Ref frame. |
slice_hdr_.frame_num = 4; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(8, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(8, *poc_); |
// Ref frame, detected as wrapping (ie, this is frame 16). |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(32, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(32, *poc_); |
} |
TEST_F(H264POCTest, PicOrderCntType2_WithMMCO5) { |
@@ -271,25 +298,29 @@ TEST_F(H264POCTest, PicOrderCntType2_WithMMCO5) { |
// Initial IDR with POC 0. |
slice_hdr_.idr_pic_flag = true; |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Ref frame. |
slice_hdr_.idr_pic_flag = false; |
slice_hdr_.frame_num = 1; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(2, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(2, *poc_); |
// Ref frame, detected as wrapping. |
SetMMCO5(); |
slice_hdr_.frame_num = 0; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(0, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(0, *poc_); |
// Ref frame, wrapping from before has been cleared. |
slice_hdr_.frame_num = 1; |
- ASSERT_TRUE(ComputePOC()); |
- ASSERT_EQ(2, poc_); |
+ ComputePOC(); |
+ ASSERT_TRUE(poc_.has_value()); |
+ ASSERT_EQ(2, *poc_); |
} |
} // namespace media |