shithub: opusfile

Download patch

ref: e6e2b83b166ba53c5fdfbc68db31f921081a1769
parent: 23c8a83da2b22646d61edd1dd475a0d62352eb7b
author: Timothy B. Terriberry <tterribe@xiph.org>
date: Thu Aug 29 14:46:12 EDT 2013

Mark more internal pointers const.

Don't know if this actually leads to any better code generation,
 but it may make the code a little clearer.

--- a/src/opusfile.c
+++ b/src/opusfile.c
@@ -167,7 +167,7 @@
 
 /*Get the current position indicator of the underlying source.
   This should be the same as the value reported by tell().*/
-static opus_int64 op_position(OggOpusFile *_of){
+static opus_int64 op_position(const OggOpusFile *_of){
   /*The current position indicator is _not_ simply offset.
     We may also have unprocessed, buffered data in the sync state.*/
   return _of->offset+_of->oy.fill-_of->oy.returned;
@@ -226,7 +226,7 @@
   return OP_FALSE;
 }
 
-static int op_add_serialno(ogg_page *_og,
+static int op_add_serialno(const ogg_page *_og,
  ogg_uint32_t **_serialnos,int *_nserialnos,int *_cserialnos){
   ogg_uint32_t *serialnos;
   int           nserialnos;
@@ -259,7 +259,7 @@
   return i<_nserialnos;
 }
 
-static int op_lookup_page_serialno(ogg_page *_og,
+static int op_lookup_page_serialno(const ogg_page *_og,
  const ogg_uint32_t *_serialnos,int _nserialnos){
   return op_lookup_serialno(ogg_page_serialno(_og),_serialnos,_nserialnos);
 }
@@ -1147,7 +1147,7 @@
        (potentially not a page we care about).*/
     /*Scan the seek records we already have to save us some bisection.*/
     for(sri=0;sri<nsr;sri++){
-      if(op_lookup_serialno(_sr[sri].serialno,*_serialnos,*_nserialnos))break;
+      if(op_lookup_serialno(_sr[sri].serialno,serialnos,nserialnos))break;
     }
     /*Is the last page in our current list of serial numbers?*/
     if(sri<=0)break;
@@ -1333,11 +1333,11 @@
 }
 
 static int op_make_decode_ready(OggOpusFile *_of){
-  OpusHead *head;
-  int       li;
-  int       stream_count;
-  int       coupled_count;
-  int       channel_count;
+  const OpusHead *head;
+  int             li;
+  int             stream_count;
+  int             coupled_count;
+  int             channel_count;
   if(_of->ready_state>OP_STREAMSET)return 0;
   if(OP_UNLIKELY(_of->ready_state<OP_STREAMSET))return OP_EFAULT;
   li=_of->seekable?_of->cur_link:0;
@@ -1519,14 +1519,12 @@
   seekable=_cb->seek!=NULL&&(*_cb->seek)(_source,0,SEEK_CUR)!=-1;
   /*If seek is implemented, tell must also be implemented.*/
   if(seekable){
+    opus_int64 pos;
     if(OP_UNLIKELY(_of->callbacks.tell==NULL))return OP_EINVAL;
-    else{
-      opus_int64 pos;
-      pos=(*_of->callbacks.tell)(_of->source);
-      /*If the current position is not equal to the initial bytes consumed,
-         absolute seeking will not work.*/
-      if(OP_UNLIKELY(pos!=(opus_int64)_initial_bytes))return OP_EINVAL;
-    }
+    pos=(*_of->callbacks.tell)(_of->source);
+    /*If the current position is not equal to the initial bytes consumed,
+       absolute seeking will not work.*/
+    if(OP_UNLIKELY(pos!=(opus_int64)_initial_bytes))return OP_EINVAL;
   }
   _of->seekable=seekable;
   /*Don't seek yet.
@@ -2084,7 +2082,7 @@
 }
 
 int op_raw_seek(OggOpusFile *_of,opus_int64 _pos){
-  int          ret;
+  int ret;
   if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
   /*Don't dump the decoder state if we can't seek.*/
   if(OP_UNLIKELY(!_of->seekable))return OP_ENOSEEK;
@@ -2115,10 +2113,10 @@
    position in an individual link.*/
 static ogg_int64_t op_get_granulepos(const OggOpusFile *_of,
  ogg_int64_t _pcm_offset,int *_li){
-  OggOpusLink *links;
-  ogg_int64_t  duration;
-  int          nlinks;
-  int          li;
+  const OggOpusLink *links;
+  ogg_int64_t        duration;
+  int                nlinks;
+  int                li;
   OP_ASSERT(_pcm_offset>=0);
   nlinks=_of->nlinks;
   links=_of->links;
@@ -2166,25 +2164,25 @@
   Account for that (and report it as an error condition).*/
 static int op_pcm_seek_page(OggOpusFile *_of,
  ogg_int64_t _target_gp,int _li){
-  OggOpusLink  *link;
-  ogg_page      og;
-  ogg_int64_t   pcm_pre_skip;
-  ogg_int64_t   pcm_start;
-  ogg_int64_t   pcm_end;
-  ogg_int64_t   best_gp;
-  ogg_int64_t   diff;
-  ogg_uint32_t  serialno;
-  opus_int32    pre_skip;
-  opus_int64    begin;
-  opus_int64    end;
-  opus_int64    boundary;
-  opus_int64    best;
-  opus_int64    page_offset;
-  opus_int64    d0;
-  opus_int64    d1;
-  opus_int64    d2;
-  int           force_bisect;
-  int           ret;
+  const OggOpusLink *link;
+  ogg_page           og;
+  ogg_int64_t        pcm_pre_skip;
+  ogg_int64_t        pcm_start;
+  ogg_int64_t        pcm_end;
+  ogg_int64_t        best_gp;
+  ogg_int64_t        diff;
+  ogg_uint32_t       serialno;
+  opus_int32         pre_skip;
+  opus_int64         begin;
+  opus_int64         end;
+  opus_int64         boundary;
+  opus_int64         best;
+  opus_int64         page_offset;
+  opus_int64         d0;
+  opus_int64         d1;
+  opus_int64         d2;
+  int                force_bisect;
+  int                ret;
   _of->bytes_tracked=0;
   _of->samples_tracked=0;
   link=_of->links+_li;
@@ -2405,16 +2403,16 @@
 }
 
 int op_pcm_seek(OggOpusFile *_of,ogg_int64_t _pcm_offset){
-  OggOpusLink *link;
-  ogg_int64_t  pcm_start;
-  ogg_int64_t  target_gp;
-  ogg_int64_t  prev_packet_gp;
-  ogg_int64_t  skip;
-  ogg_int64_t  diff;
-  int          op_count;
-  int          op_pos;
-  int          ret;
-  int          li;
+  const OggOpusLink *link;
+  ogg_int64_t        pcm_start;
+  ogg_int64_t        target_gp;
+  ogg_int64_t        prev_packet_gp;
+  ogg_int64_t        skip;
+  ogg_int64_t        diff;
+  int                op_count;
+  int                op_pos;
+  int                ret;
+  int                li;
   if(OP_UNLIKELY(_of->ready_state<OP_OPENED))return OP_EINVAL;
   if(OP_UNLIKELY(!_of->seekable))return OP_ENOSEEK;
   if(OP_UNLIKELY(_pcm_offset<0))return OP_EINVAL;
@@ -2503,10 +2501,10 @@
   For unseekable sources, this gets reset to 0 at the beginning of each link.*/
 static ogg_int64_t op_get_pcm_offset(const OggOpusFile *_of,
  ogg_int64_t _gp,int _li){
-  OggOpusLink *links;
-  ogg_int64_t  pcm_offset;
-  ogg_int64_t  delta;
-  int          li;
+  const OggOpusLink *links;
+  ogg_int64_t        pcm_offset;
+  ogg_int64_t        delta;
+  int                li;
   links=_of->links;
   pcm_offset=0;
   OP_ASSERT(_li<_of->nlinks);
@@ -2579,9 +2577,9 @@
 static int op_init_buffer(OggOpusFile *_of){
   int nchannels_max;
   if(_of->seekable){
-    OggOpusLink *links;
-    int          nlinks;
-    int          li;
+    const OggOpusLink *links;
+    int                nlinks;
+    int                li;
     links=_of->links;
     nlinks=_of->nlinks;
     nchannels_max=1;
@@ -2657,11 +2655,11 @@
       /*If we have buffered packets, decode one.*/
       op_pos=_of->op_pos;
       if(OP_LIKELY(op_pos<_of->op_count)){
-        ogg_packet  *pop;
-        ogg_int64_t  diff;
-        opus_int32   cur_discard_count;
-        int          duration;
-        int          trimmed_duration;
+        const ogg_packet *pop;
+        ogg_int64_t       diff;
+        opus_int32        cur_discard_count;
+        int               duration;
+        int               trimmed_duration;
         pop=_of->op+op_pos++;
         _of->op_pos=op_pos;
         cur_discard_count=_of->cur_discard_count;
@@ -2743,6 +2741,9 @@
   }
 }
 
+/*A generic filter to apply to the decoded audio data.
+  _src is non-const because we will destructively modify the contents of the
+   source buffer that we consume in some cases.*/
 typedef int (*op_read_filter_func)(OggOpusFile *_of,void *_dst,int _dst_sz,
  op_sample *_src,int _nsamples,int _nchannels);