]> git.sesse.net Git - vlc/commitdiff
opus_header: remove dependency on libopus
authorRafaël Carré <funman@videolan.org>
Tue, 3 Jun 2014 05:55:30 +0000 (07:55 +0200)
committerRafaël Carré <funman@videolan.org>
Fri, 6 Jun 2014 01:54:53 +0000 (18:54 -0700)
We might need to generate Opus headers without actually encoding anything

modules/codec/opus.c
modules/codec/opus_header.c
modules/codec/opus_header.h

index 9f9858ab9d2a209a69f0be11b32dc211312c5080..c05e27ed2ac428177e5ea2733fe7a01a55336d9a 100644 (file)
@@ -641,7 +641,7 @@ static int OpenEncoder(vlc_object_t *p_this)
 
     /* Now that we have preskip, we can write the header to extradata */
     if (opus_write_header((uint8_t **) &enc->fmt_out.p_extra,
-                          &enc->fmt_out.i_extra, &header))
+                          &enc->fmt_out.i_extra, &header, opus_get_version_string()))
     {
         msg_Err(enc, "Failed to write header.");
         status = VLC_ENOMEM;
index 513c7c2b40921769fc58aa3ca09677b2d66bb787..101a33da61759184374e7af2c8197011bbec9e9d 100644 (file)
@@ -30,7 +30,6 @@
 #endif
 
 #include "opus_header.h"
-#include <opus.h>
 #include <string.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -236,11 +235,12 @@ The comment header is decoded as follows:
   7) done.
 */
 
-static char *comment_init(size_t *length)
+static char *comment_init(size_t *length, const char *vendor)
 {
     /*The 'vendor' field should be the actual encoding library used.*/
-    const char *vendor_string = opus_get_version_string();
-    int vendor_length = strlen(vendor_string);
+    if (!vendor)
+        vendor = "unknown";
+    int vendor_length = strlen(vendor);
 
     int user_comment_list_length = 0;
     int len = 8 + 4 + vendor_length + 4;
@@ -250,7 +250,7 @@ static char *comment_init(size_t *length)
 
     memcpy(p, "OpusTags", 8);
     SetDWLE(p + 8, vendor_length);
-    memcpy(p + 12, vendor_string, vendor_length);
+    memcpy(p + 12, vendor, vendor_length);
     SetDWLE(p + 12 + vendor_length, user_comment_list_length);
 
     *length = len;
@@ -367,7 +367,7 @@ static int opus_header_to_packet(const OpusHeader *h, unsigned char *packet, int
     return p.pos;
 }
 
-int opus_write_header(uint8_t **p_extra, int *i_extra, OpusHeader *header)
+int opus_write_header(uint8_t **p_extra, int *i_extra, OpusHeader *header, const char *vendor)
 {
     unsigned char header_data[100];
     const int packet_size = opus_header_to_packet(header, header_data,
@@ -380,7 +380,7 @@ int opus_write_header(uint8_t **p_extra, int *i_extra, OpusHeader *header)
     size[0] = packet_size;
 
     size_t comments_length;
-    char *comments = comment_init(&comments_length);
+    char *comments = comment_init(&comments_length, vendor);
     if (!comments)
         return 1;
     if (comment_add(&comments, &comments_length, "ENCODER=",
index 71c788415ef292b50110903d7f65501414a1a1d1..a4c1f16d3416200d13b539d4c557837c24fc7ad2 100644 (file)
@@ -45,6 +45,6 @@ typedef struct {
 
 int opus_header_parse(const unsigned char *header, int len, OpusHeader *h);
 int opus_prepare_header(unsigned channels, unsigned rate, OpusHeader *header);
-int opus_write_header(uint8_t **p_extra, int *i_extra, OpusHeader *header);
+int opus_write_header(uint8_t **p_extra, int *i_extra, OpusHeader *header, const char *vendor);
 
 #endif