Przeglądaj źródła

LibVideo/VP9: Implement syntax element counting for supported elements

With the progress made in the Decoder thus far, we have the ability
to support most of the syntax element counters in the tree parser.

Additionally, it will now crash when trying to count unsupported
elements.
FalseHonesty 4 lat temu
rodzic
commit
f85f557a1f
1 zmienionych plików z 27 dodań i 15 usunięć
  1. 27 15
      Userland/Libraries/LibVideo/VP9/TreeParser.cpp

+ 27 - 15
Userland/Libraries/LibVideo/VP9/TreeParser.cpp

@@ -209,26 +209,32 @@ void TreeParser::count_syntax_element(SyntaxElementType type, int value)
     switch (type) {
     switch (type) {
     case SyntaxElementType::Partition:
     case SyntaxElementType::Partition:
         m_decoder.m_syntax_element_counter->m_counts_partition[m_ctx][value]++;
         m_decoder.m_syntax_element_counter->m_counts_partition[m_ctx][value]++;
-        break;
+        return;
     case SyntaxElementType::IntraMode:
     case SyntaxElementType::IntraMode:
-        break;
     case SyntaxElementType::SubIntraMode:
     case SyntaxElementType::SubIntraMode:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_intra_mode[m_ctx][value]++;
+        return;
     case SyntaxElementType::UVMode:
     case SyntaxElementType::UVMode:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_uv_mode[m_ctx][value]++;
+        return;
     case SyntaxElementType::Skip:
     case SyntaxElementType::Skip:
         m_decoder.m_syntax_element_counter->m_counts_skip[m_ctx][value]++;
         m_decoder.m_syntax_element_counter->m_counts_skip[m_ctx][value]++;
-        break;
+        return;
     case SyntaxElementType::IsInter:
     case SyntaxElementType::IsInter:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_is_inter[m_ctx][value]++;
+        return;
     case SyntaxElementType::CompMode:
     case SyntaxElementType::CompMode:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_comp_mode[m_ctx][value]++;
+        return;
     case SyntaxElementType::CompRef:
     case SyntaxElementType::CompRef:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_comp_ref[m_ctx][value]++;
+        return;
     case SyntaxElementType::SingleRefP1:
     case SyntaxElementType::SingleRefP1:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_single_ref[m_ctx][0][value]++;
+        return;
     case SyntaxElementType::SingleRefP2:
     case SyntaxElementType::SingleRefP2:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_single_ref[m_ctx][1][value]++;
+        return;
     case SyntaxElementType::MVSign:
     case SyntaxElementType::MVSign:
         break;
         break;
     case SyntaxElementType::MVClass0Bit:
     case SyntaxElementType::MVClass0Bit:
@@ -236,13 +242,17 @@ void TreeParser::count_syntax_element(SyntaxElementType type, int value)
     case SyntaxElementType::MVBit:
     case SyntaxElementType::MVBit:
         break;
         break;
     case SyntaxElementType::TXSize:
     case SyntaxElementType::TXSize:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_tx_size[m_decoder.m_max_tx_size][m_ctx][value]++;
+        return;
     case SyntaxElementType::InterMode:
     case SyntaxElementType::InterMode:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_inter_mode[m_ctx][value]++;
+        return;
     case SyntaxElementType::InterpFilter:
     case SyntaxElementType::InterpFilter:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_interp_filter[m_ctx][value]++;
+        return;
     case SyntaxElementType::MVJoint:
     case SyntaxElementType::MVJoint:
-        break;
+        m_decoder.m_syntax_element_counter->m_counts_mv_joint[value]++;
+        return;
     case SyntaxElementType::MVClass:
     case SyntaxElementType::MVClass:
         break;
         break;
     case SyntaxElementType::MVClass0FR:
     case SyntaxElementType::MVClass0FR:
@@ -261,8 +271,10 @@ void TreeParser::count_syntax_element(SyntaxElementType type, int value)
     case SyntaxElementType::DefaultUVMode:
     case SyntaxElementType::DefaultUVMode:
     case SyntaxElementType::SegmentID:
     case SyntaxElementType::SegmentID:
     case SyntaxElementType::SegIDPredicted:
     case SyntaxElementType::SegIDPredicted:
-        break;
+        // No counting required
+        return;
     }
     }
+    VERIFY_NOT_REACHED();
 }
 }
 
 
 TreeParser::TreeSelection::TreeSelection(int const* values)
 TreeParser::TreeSelection::TreeSelection(int const* values)