Define opaque struct of RC class for C

Bug: b:383744068
Change-Id: Ibb44d790f14ae990b5d041d06dda26edcd0cc9f6
diff --git a/av1/ratectrl_rtc.cc b/av1/ratectrl_rtc.cc
index 9861932..7ee58e9 100644
--- a/av1/ratectrl_rtc.cc
+++ b/av1/ratectrl_rtc.cc
@@ -402,46 +402,50 @@
 
 extern "C" {
 
-void *av1_ratecontrol_rtc_create(const AomAV1RateControlRtcConfig *rc_cfg) {
+AomAV1RateControlRTC *av1_ratecontrol_rtc_create(
+    const AomAV1RateControlRtcConfig *rc_cfg) {
   if (rc_cfg == nullptr) return nullptr;
-  return aom::AV1RateControlRTC::Create(*rc_cfg).release();
+  return reinterpret_cast<AomAV1RateControlRTC *>(
+      aom::AV1RateControlRTC::Create(*rc_cfg).release());
 }
 
-void av1_ratecontrol_rtc_destroy(void *controller) {
+void av1_ratecontrol_rtc_destroy(AomAV1RateControlRTC *controller) {
   delete reinterpret_cast<aom::AV1RateControlRTC *>(controller);
 }
 
 bool av1_ratecontrol_rtc_update(
-    void *controller, const struct AomAV1RateControlRtcConfig *rc_cfg) {
+    AomAV1RateControlRTC *controller,
+    const struct AomAV1RateControlRtcConfig *rc_cfg) {
   if (controller == nullptr || rc_cfg == nullptr) return false;
 
   return reinterpret_cast<aom::AV1RateControlRTC *>(controller)
       ->UpdateRateControl(*rc_cfg);
 }
 
-int av1_ratecontrol_rtc_get_qp(void *controller) {
+int av1_ratecontrol_rtc_get_qp(const AomAV1RateControlRTC *controller) {
   if (controller == nullptr) return 0;
-  return reinterpret_cast<aom::AV1RateControlRTC *>(controller)->GetQP();
+  return reinterpret_cast<const aom::AV1RateControlRTC *>(controller)->GetQP();
 }
 
 AomAV1LoopfilterLevel av1_ratecontrol_rtc_get_loop_filter_level(
-    void *controller) {
+    const AomAV1RateControlRTC *controller) {
   if (controller == nullptr) {
     return { { 0, 0 }, 0, 0 };
   }
-  return reinterpret_cast<aom::AV1RateControlRTC *>(controller)
+  return reinterpret_cast<const aom::AV1RateControlRTC *>(controller)
       ->GetLoopfilterLevel();
 }
 
 AomFrameDropDecision av1_ratecontrol_rtc_compute_qp(
-    void *controller, const AomAV1FrameParamsRTC *frame_params) {
+    AomAV1RateControlRTC *controller,
+    const AomAV1FrameParamsRTC *frame_params) {
   if (controller == nullptr || frame_params == nullptr)
     return kAomFrameDropDecisionOk;
   return reinterpret_cast<aom::AV1RateControlRTC *>(controller)
       ->ComputeQP(*frame_params);
 }
 
-void av1_ratecontrol_rtc_post_encode_update(void *controller,
+void av1_ratecontrol_rtc_post_encode_update(AomAV1RateControlRTC *controller,
                                             uint64_t encoded_frame_size) {
   if (controller == nullptr) return;
   reinterpret_cast<aom::AV1RateControlRTC *>(controller)
@@ -449,18 +453,21 @@
 }
 
 bool av1_ratecontrol_rtc_get_segmentation(
-    void *controller, AomAV1SegmentationData *segmentation_data) {
+    const AomAV1RateControlRTC *controller,
+    AomAV1SegmentationData *segmentation_data) {
   if (controller == nullptr || segmentation_data == nullptr) return false;
 
-  return reinterpret_cast<aom::AV1RateControlRTC *>(controller)
+  return reinterpret_cast<const aom::AV1RateControlRTC *>(controller)
       ->GetSegmentationData(segmentation_data);
 }
 
-AomAV1CdefInfo av1_ratecontrol_rtc_get_cdef_info(void *controller) {
+AomAV1CdefInfo av1_ratecontrol_rtc_get_cdef_info(
+    const AomAV1RateControlRTC *controller) {
   if (controller == nullptr) {
     return { 0, 0, 0 };
   }
-  return reinterpret_cast<aom::AV1RateControlRTC *>(controller)->GetCdefInfo();
+  return reinterpret_cast<const aom::AV1RateControlRTC *>(controller)
+      ->GetCdefInfo();
 }
 
 void av1_ratecontrol_rtc_init_ratecontrol_config(
diff --git a/av1/ratectrl_rtc.h b/av1/ratectrl_rtc.h
index 755b7ca..3d0807b 100644
--- a/av1/ratectrl_rtc.h
+++ b/av1/ratectrl_rtc.h
@@ -99,6 +99,9 @@
   int scaling_factor_den[kAomAV1MaxSpatialLayers];
 } AomAV1RateControlRtcConfig;
 
+struct AomAV1RateControlRTC;
+typedef struct AomAV1RateControlRTC AomAV1RateControlRTC;
+
 #ifdef __cplusplus
 namespace aom {
 
@@ -152,24 +155,27 @@
 #ifdef __cplusplus
 extern "C" {
 #endif
-void *av1_ratecontrol_rtc_create(const AomAV1RateControlRtcConfig *rc_cfg);
-void av1_ratecontrol_rtc_destroy(void *controller);
-bool av1_ratecontrol_rtc_update(void *controller,
+AomAV1RateControlRTC *av1_ratecontrol_rtc_create(
+    const AomAV1RateControlRtcConfig *rc_cfg);
+void av1_ratecontrol_rtc_destroy(AomAV1RateControlRTC *controller);
+bool av1_ratecontrol_rtc_update(AomAV1RateControlRTC *controller,
                                 const AomAV1RateControlRtcConfig *rc_cfg);
-int av1_ratecontrol_rtc_get_qp(void *controller);
+int av1_ratecontrol_rtc_get_qp(const AomAV1RateControlRTC *controller);
 
 AomAV1LoopfilterLevel av1_ratecontrol_rtc_get_loop_filter_level(
-    void *controller);
+    const AomAV1RateControlRTC *controller);
 AomFrameDropDecision av1_ratecontrol_rtc_compute_qp(
-    void *controller, const AomAV1FrameParamsRTC *frame_params);
+    AomAV1RateControlRTC *controller, const AomAV1FrameParamsRTC *frame_params);
 
-void av1_ratecontrol_rtc_post_encode_update(void *controller,
+void av1_ratecontrol_rtc_post_encode_update(AomAV1RateControlRTC *controller,
                                             uint64_t encoded_frame_size);
 
 bool av1_ratecontrol_rtc_get_segmentation(
-    void *controller, AomAV1SegmentationData *segmentation_data);
+    const AomAV1RateControlRTC *controller,
+    AomAV1SegmentationData *segmentation_data);
 
-AomAV1CdefInfo av1_ratecontrol_rtc_get_cdef_info(void *controller);
+AomAV1CdefInfo av1_ratecontrol_rtc_get_cdef_info(
+    const AomAV1RateControlRTC *controller);
 
 void av1_ratecontrol_rtc_init_ratecontrol_config(
     AomAV1RateControlRtcConfig *config);
diff --git a/test/ratectrl_rtc_test.cc b/test/ratectrl_rtc_test.cc
index ff9a28e..18d46ae 100644
--- a/test/ratectrl_rtc_test.cc
+++ b/test/ratectrl_rtc_test.cc
@@ -539,7 +539,7 @@
 }
 
 void RcExternMethodsInterfaceTest::TestCreateRateControl() {
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
 
   ASSERT_NE(controller, nullptr);
 
@@ -547,7 +547,7 @@
 }
 
 void RcExternMethodsInterfaceTest::TestUpdateRateControl() {
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
 
   ASSERT_NE(controller, nullptr);
 
@@ -561,7 +561,7 @@
   frame_params_.temporal_layer_id = 0;
   frame_params_.frame_type = kAomKeyFrame;
 
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
   ASSERT_NE(controller, nullptr);
 
   const AomFrameDropDecision decision =
@@ -578,7 +578,7 @@
   frame_params_.temporal_layer_id = 0;
   frame_params_.frame_type = kAomKeyFrame;
 
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
   ASSERT_NE(controller, nullptr);
 
   const AomFrameDropDecision decision =
@@ -588,7 +588,7 @@
 }
 
 void RcExternMethodsInterfaceTest::TestGetLoopFilterLevelRateControl() {
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
   ASSERT_NE(controller, nullptr);
 
   AomAV1LoopfilterLevel lpf_level;
@@ -608,7 +608,7 @@
 }
 
 void RcExternMethodsInterfaceTest::TestPostEncodeUpdateRateControl() {
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
   ASSERT_NE(controller, nullptr);
   av1_ratecontrol_rtc_post_encode_update(controller, 380);
   av1_ratecontrol_rtc_destroy(controller);
@@ -616,7 +616,7 @@
 
 void RcExternMethodsInterfaceTest::TestGetSegmentationDataRateControl() {
   rc_cfg_.aq_mode = 1;  // VARIANCE_AQ = 1
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
   ASSERT_NE(controller, nullptr);
   AomAV1SegmentationData segmentation_data;
   // This should return false as this test case doesn't run any part of the
@@ -627,7 +627,7 @@
 }
 
 void RcExternMethodsInterfaceTest::TestGetCdefInfoRateControl() {
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
   ASSERT_NE(controller, nullptr);
   AomAV1CdefInfo cdef_level;
   cdef_level.cdef_strength_y = 0xabcd;
@@ -643,7 +643,7 @@
 }
 
 void RcExternMethodsInterfaceTest::TestCreateRateControlConfig() {
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
   ASSERT_NE(controller, nullptr);
 
   AomAV1RateControlRtcConfig config;
@@ -656,7 +656,7 @@
 }
 
 void RcExternMethodsInterfaceTest::TestDestroyRateControlRTC() {
-  void *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
+  AomAV1RateControlRTC *controller = av1_ratecontrol_rtc_create(&rc_cfg_);
   ASSERT_NE(controller, nullptr);
 
   av1_ratecontrol_rtc_destroy(controller);