setting decision delay and muxing delay (untested)
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Mon, 1 May 2017 20:59:52 +0000 (16:59 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Mon, 1 May 2017 20:59:52 +0000 (16:59 -0400)
include/opusenc.h
src/opusenc.c

index 59b2ce1..3b8d878 100644 (file)
@@ -54,6 +54,18 @@ extern "C" {
 #define OPE_BAD_ARG -12
 #define OPE_INTERNAL_ERROR -13
 
+/* These are the "raw" request values -- they should usually not be used. */
+#define OPE_SET_DECISION_DELAY_REQUEST 14000
+#define OPE_GET_DECISION_DELAY_REQUEST 14001
+#define OPE_SET_MUXING_DELAY_REQUEST 14002
+#define OPE_GET_MUXING_DELAY_REQUEST 14003
+
+#define OPE_SET_DECISION_DELAY(x) OPE_SET_DECISION_DELAY_REQUEST, __opus_check_int(x)
+#define OPE_GET_DECISION_DELAY(x) OPE_GET_DECISION_DELAY_REQUEST, __opus_check_int_ptr(x)
+#define OPE_SET_MUXING_DELAY(x) OPE_SET_MUXING_DELAY_REQUEST, __opus_check_int(x)
+#define OPE_GET_MUXING_DELAY(x) OPE_GET_MUXING_DELAY_REQUEST, __opus_check_int_ptr(x)
+
+
 typedef int (*ope_write_func)(void *user_data, const unsigned char *ptr, int len);
 
 typedef int (*ope_close_func)(void *user_data);
index ad2d9c7..0472e1b 100644 (file)
@@ -478,7 +478,7 @@ int ope_encoder_ctl(OggOpusEnc *enc, int request, ...) {
       max_supported = OPUS_FRAMESIZE_120_MS;
 #endif
       if (value < OPUS_FRAMESIZE_2_5_MS || value > max_supported) {
-        ret = OPE_UNIMPLEMENTED;
+        ret = OPUS_UNIMPLEMENTED;
         break;
       }
       ret = opus_multistream_encoder_ctl(enc->st, request, value);
@@ -491,7 +491,7 @@ int ope_encoder_ctl(OggOpusEnc *enc, int request, ...) {
     }
     break;
     default:
-      ret = OPE_UNIMPLEMENTED;
+      ret = OPUS_UNIMPLEMENTED;
   }
   va_end(ap);
   return ret;
@@ -499,9 +499,35 @@ int ope_encoder_ctl(OggOpusEnc *enc, int request, ...) {
 
 /* ctl()-type call for the OggOpus layer. */
 int ope_set_params(OggOpusEnc *enc, int request, ...) {
-  (void)enc;
+  int ret;
+  va_list ap;
+  va_start(ap, request);
   switch (request) {
+    case OPE_SET_DECISION_DELAY_REQUEST:
+    {
+      opus_int32 value = va_arg(ap, opus_int32);
+      if (value < 0) {
+        ret = OPE_BAD_ARG;
+        break;
+      }
+      enc->decision_delay = value;
+      ret = OPE_OK;
+    }
+    break;
+    case OPE_SET_MUXING_DELAY_REQUEST:
+    {
+      opus_int32 value = va_arg(ap, opus_int32);
+      if (value < 0) {
+        ret = OPE_BAD_ARG;
+        break;
+      }
+      enc->max_ogg_delay = value;
+      ret = OPE_OK;
+    }
+    break;
     default:
       return OPE_UNIMPLEMENTED;
   }
+  va_end(ap);
+  return ret;
 }