Implements changing the vendor string
authorJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 4 May 2017 02:05:52 +0000 (22:05 -0400)
committerJean-Marc Valin <jmvalin@jmvalin.ca>
Thu, 4 May 2017 02:05:52 +0000 (22:05 -0400)
src/opus_header.c
src/opus_header.h
src/opusenc.c

index 280cef2..0819c33 100644 (file)
@@ -240,6 +240,25 @@ void comment_pad(char **comments, int* length, int amount)
     *length=newlen;
   }
 }
+
+int comment_replace_vendor_string(char **comments, int* length, const char *vendor_string)
+{
+  char* p=*comments;
+  int vendor_length;
+  int newlen;
+  int newvendor_length;
+  vendor_length=readint(p, 8);
+  newvendor_length=strlen(vendor_string);
+  newlen=*length+newvendor_length-vendor_length;
+  p=realloc(p, newlen);
+  if (p == NULL) return 1;
+  writeint(p, 8, newvendor_length);
+  memmove(p+12+newvendor_length, p+12+vendor_length, newlen-12-newvendor_length);
+  memcpy(p+12, vendor_string, newvendor_length);
+  *comments=p;
+  *length=newlen;
+  return 0;
+}
 #undef readint
 #undef writeint
 
index 2fab1f7..049460c 100644 (file)
@@ -54,4 +54,6 @@ int comment_add(char **comments, int* length, const char *tag, const char *val);
 
 void comment_pad(char **comments, int* length, int amount);
 
+int comment_replace_vendor_string(char **comments, int* length, const char *vendor_string);
+
 #endif
index fd7286b..a4b2b54 100644 (file)
@@ -590,6 +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;
   (void)vendor;
   return OPE_UNIMPLEMENTED;
 }