shithub: opus

Download patch

ref: 17e5b805a52bf2ba8522853c538e105a842ac173
parent: 2fecbdf084f74394183d198e6283c94e731ed5a5
author: Jean-Marc Valin <[email protected]>
date: Fri Feb 1 04:02:05 EST 2008

clean up... oh and actually committed the header definition

--- a/libcelt/celt_header.h
+++ b/libcelt/celt_header.h
@@ -51,11 +51,11 @@
    celt_int32_t extra_headers;
 } CELTHeader;
 
-void celt_init_header(CELTHeader *header, celt_int32_t rate, celt_int32_t nb_channels, const struct CELTMode *m);
+void celt_header_init(CELTHeader *header, celt_int32_t rate, celt_int32_t nb_channels, const CELTMode *m);
 
-int celt_header_to_packet(const CELTHeader *header, char *packet, celt_uint32_t size);
+int celt_header_to_packet(const CELTHeader *header, unsigned char *packet, celt_uint32_t size);
 
-int celt_packet_to_header(const char *packet, celt_uint32_t size, CELTHeader *header);
+int celt_header_from_packet(const unsigned char *packet, celt_uint32_t size, CELTHeader *header);
 
 #ifdef __cplusplus
 }
--- /dev/null
+++ b/libcelt/header.c
@@ -1,0 +1,74 @@
+/* (C) 2008 Jean-Marc Valin, CSIRO
+*/
+/*
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+   
+   - Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+   
+   - Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+   
+   - Neither the name of the Xiph.org Foundation nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+   
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+#include "celt_header.h"
+#include "os_support.h"
+
+/*typedef struct {
+   char         codec_id[8];
+   char         codec_version[20];
+   celt_int32_t version_id;
+   celt_int32_t header_size;
+   celt_int32_t mode;
+   celt_int32_t sample_rate;
+   celt_int32_t nb_channels;
+   celt_int32_t bytes_per_packet;
+   celt_int32_t extra_headers;
+} CELTHeader;*/
+
+void celt_header_init(CELTHeader *header, celt_int32_t rate, celt_int32_t nb_channels, const CELTMode *m)
+{
+   CELT_COPY(header->codec_id, "CELT    ", 8);
+   CELT_COPY(header->codec_version, "experimental        ", 20);
+
+   header->version_id = 0x80000000;
+   header->header_size = 56;
+   header->mode = 0;
+   header->sample_rate = rate;
+   header->nb_channels = nb_channels;
+   header->bytes_per_packet = -1;
+   header->extra_headers = 0xdeadbeef;
+}
+
+int celt_header_to_packet(const CELTHeader *header, unsigned char *packet, celt_uint32_t size)
+{
+   CELT_MEMSET(packet, 0, sizeof(*header));
+   /* FIXME: Do it in a endian-safe, alignment-safe, overflow-safe manner */
+   CELT_COPY(packet, (char*)header, sizeof(*header));
+   return sizeof(*header);
+}
+
+int celt_header_from_packet(const unsigned char *packet, celt_uint32_t size, CELTHeader *header)
+{
+   CELT_COPY((char*)header, packet, sizeof(*header));
+   return sizeof(*header);
+}
+
--- a/tools/celtenc.c
+++ b/tools/celtenc.c
@@ -246,9 +246,8 @@
    int quiet=0;
    int nbBytes;
    const CELTMode *mode=celt_mono;
-   int modeID = -1;
    void *st;
-   char bits[MAX_FRAME_BYTES];
+   unsigned char bits[MAX_FRAME_BYTES];
    int with_skeleton = 0;
    struct option long_options[] =
    {
@@ -282,7 +281,6 @@
    int bytes_written=0, ret, result;
    int id=-1;
    CELTHeader header;
-   celt_int32_t complexity=3;
    char vendor_string[64];
    char *comments;
    int comments_length;
@@ -289,10 +287,8 @@
    int close_in=0, close_out=0;
    int eos=0;
    celt_int32_t bitrate=0;
-   double cumul_bits=0, enc_frames=0;
    char first_bytes[12];
    int wave_input=0;
-   celt_int32_t tmp;
    celt_int32_t lookahead = 0;
    int bytes_per_packet=48;
    
@@ -439,7 +435,7 @@
    }
 
    celt_mode_info(mode, CELT_GET_FRAME_SIZE, &frame_size);
-   celt_init_header(&header, rate, 1, mode);
+   celt_header_init(&header, rate, 1, mode);
    header.nb_channels = chan;
 
    {
@@ -490,11 +486,11 @@
 
    /*Write header*/
    {
-      char header_data[100];
+      unsigned char header_data[100];
       int packet_size = celt_header_to_packet(&header, header_data, 100);
       op.packet = header_data;
       op.bytes = packet_size;
-      fprintf(stderr, "header size is %d\n", op.bytes);
+      fprintf(stderr, "header size is %d\n", (int)op.bytes);
       op.b_o_s = 1;
       op.e_o_s = 0;
       op.granulepos = 0;