merge libopus and libopusenc ctl() calls
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 4 May 2017 02:34:58 +0000 (22:34 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 4 May 2017 02:34:58 +0000 (22:34 -0400)
include/opusenc.h
src/opusenc.c

index 4028f30..0672837 100644 (file)
@@ -49,11 +49,16 @@ extern "C" {
 #endif
 
 #define OPE_OK 0
-#define OPE_CANNOT_OPEN -10
-#define OPE_UNIMPLEMENTED -11
-#define OPE_BAD_ARG -12
+/* Based on the relevant libopus code minus 10. */
+#define OPE_BAD_ARG -11
 #define OPE_INTERNAL_ERROR -13
-#define OPE_TOO_LATE -14
+#define OPE_UNIMPLEMENTED -15
+#define OPE_ALLOC_FAIL -17
+
+/* Specific to libopusenc. */
+#define OPE_CANNOT_OPEN -30
+#define OPE_TOO_LATE -31
+
 
 /* These are the "raw" request values -- they should usually not be used. */
 #define OPE_SET_DECISION_DELAY_REQUEST 14000
index 061fcf8..b77e9b0 100644 (file)
@@ -566,7 +566,7 @@ int ope_continue_new_callbacks(OggOpusEnc *enc, void *user_data) {
 int ope_add_comment(OggOpusEnc *enc, const char *tag, const char *val) {
   if (enc->last_stream->header_is_frozen) return OPE_TOO_LATE;
   if (enc->last_stream->stream_is_init) return OPE_TOO_LATE;
-  if (comment_add(&enc->last_stream->comment, &enc->last_stream->comment_length, tag, val)) return OPE_INTERNAL_ERROR;
+  if (comment_add(&enc->last_stream->comment, &enc->last_stream->comment_length, tag, val)) return OPE_ALLOC_FAIL;
   return OPE_OK;
 }
 
@@ -590,7 +590,7 @@ int ope_add_picture(OggOpusEnc *enc, const char *spec) {
 int ope_set_vendor_string(OggOpusEnc *enc, const char *vendor) {
   if (enc->last_stream->header_is_frozen) return OPE_TOO_LATE;
   if (enc->last_stream->stream_is_init) return OPE_TOO_LATE;
-  if (comment_replace_vendor_string(&enc->last_stream->comment, &enc->last_stream->comment_length, vendor)) return OPE_INTERNAL_ERROR;
+  if (comment_replace_vendor_string(&enc->last_stream->comment, &enc->last_stream->comment_length, vendor)) return OPE_ALLOC_FAIL;
   return OPE_OK;
 }
 
@@ -604,6 +604,7 @@ int ope_flush_header(OggOpusEnc *enc) {
 /* Goes straight to the libopus ctl() functions. */
 int ope_encoder_ctl(OggOpusEnc *enc, int request, ...) {
   int ret;
+  int translate;
   va_list ap;
   va_start(ap, request);
   switch (request) {
@@ -649,19 +650,8 @@ int ope_encoder_ctl(OggOpusEnc *enc, int request, ...) {
       }
     }
     break;
-    default:
-      ret = OPUS_UNIMPLEMENTED;
-  }
-  va_end(ap);
-  return ret;
-}
 
-/* ctl()-type call for the OggOpus layer. */
-int ope_set_params(OggOpusEnc *enc, int request, ...) {
-  int ret;
-  va_list ap;
-  va_start(ap, request);
-  switch (request) {
+    /* ****************** libopusenc-specific requests. ********************** */
     case OPE_SET_DECISION_DELAY_REQUEST:
     {
       opus_int32 value = va_arg(ap, opus_int32);
@@ -708,5 +698,14 @@ int ope_set_params(OggOpusEnc *enc, int request, ...) {
       return OPE_UNIMPLEMENTED;
   }
   va_end(ap);
+  translate = request < 14000 || (ret < 0 && ret >= -10);
+  if (translate) {
+    if (ret == OPUS_BAD_ARG) ret = OPE_BAD_ARG;
+    else if (ret == OPUS_INTERNAL_ERROR) ret = OPE_INTERNAL_ERROR;
+    else if (ret == OPUS_UNIMPLEMENTED) ret = OPE_UNIMPLEMENTED;
+    else if (ret == OPUS_ALLOC_FAIL) ret = OPE_ALLOC_FAIL;
+    else ret = OPE_INTERNAL_ERROR;
+  }
+  assert(ret == 0 || ret < -10);
   return ret;
 }