ref: 21f7285015b06a6e4b10fd5fd09696f34995a352
parent: e2d7b266a0cbb09203d1d2fc547ebbd73e293fe6
author: Timothy B. Terriberry <tterribe@xiph.org>
date: Sun Oct 21 14:09:59 EDT 2012
Fix a few minor nits. - The DIGIT character sets shouldn't need to list "0" twice. - Avoid a lookup for the port number in getaddrinfo(). - Resolve the OPUS_SET_GAIN TODO (by refusing to implement a fallback). - A few more minor things.
--- a/src/http.c
+++ b/src/http.c
@@ -70,8 +70,8 @@
/*URI character classes (from RFC 3986).*/
#define OP_URL_ALPHA \
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
-#define OP_URL_DIGIT "01234567890"
-#define OP_URL_HEXDIGIT "01234567890ABCDEFabcdef"
+#define OP_URL_DIGIT "0123456789"
+#define OP_URL_HEXDIGIT "0123456789ABCDEFabcdef"
/*Not a character class, but the characters allowed in <scheme>.*/
#define OP_URL_SCHEME OP_URL_ALPHA OP_URL_DIGIT "+-."
#define OP_URL_GEN_DELIMS "#/:?@[]"
@@ -573,6 +573,7 @@
char service[6];
memset(&hints,0,sizeof(hints));
hints.ai_socktype=SOCK_STREAM;
+ hints.ai_flags=AI_NUMERICSERV;
OP_ASSERT(_port<=65535U);
sprintf(service,"%u",_port);
if(OP_LIKELY(!getaddrinfo(_host,service,&hints,&addrs)))return addrs;
@@ -1042,7 +1043,7 @@
return OP_EIMPL;
}
-# define OP_HTTP_DIGIT "01234567890"
+# define OP_HTTP_DIGIT "0123456789"
/*The Reason-Phrase is not allowed to contain control characters, except
horizontal tab (HT: \011).*/
--- a/src/opusfile.c
+++ b/src/opusfile.c
@@ -54,16 +54,8 @@
area if we only want coarse navigation through the stream.
We implement and expose both strategies.*/
-/*Many, many internal helpers.
- The intention is not to be confusing.
- Rampant duplication and monolithic function implementation (though we do have
- some large, omnibus functions still) would be harder to understand anyway.
- The high level functions are last.
- Begin grokking near the end of the file if you prefer to read things
- top-down.*/
-
/*The maximum number of bytes in a page (including the page headers).*/
-#define OP_PAGE_SIZE (65307)
+#define OP_PAGE_SIZE_MAX (65307)
/*The default amount to seek backwards per step when trying to find the
previous page.
This must be at least as large as the maximum size of a page.*/
@@ -132,6 +124,14 @@
return err;
}
+/*Many, many internal helpers.
+ The intention is not to be confusing.
+ Rampant duplication and monolithic function implementation (though we do have
+ some large, omnibus functions still) would be harder to understand anyway.
+ The high level functions are last.
+ Begin grokking near the end of the file if you prefer to read things
+ top-down.*/
+
/*The read/seek functions track absolute position within the stream.*/
/*Read a little more data from the file/pipe into the ogg_sync framer.
@@ -301,7 +301,7 @@
do{
opus_int64 search_start;
int ret;
- OP_ASSERT(chunk_size>=OP_PAGE_SIZE);
+ OP_ASSERT(chunk_size>=OP_PAGE_SIZE_MAX);
begin=OP_MAX(begin-chunk_size,0);
ret=op_seek_helper(_of,begin);
if(OP_UNLIKELY(ret<0))return ret;
@@ -320,7 +320,7 @@
_sr->offset=_offset=llret;
_sr->serialno=serialno;
OP_ASSERT(_of->offset-_offset>=0);
- OP_ASSERT(_of->offset-_offset<=OP_PAGE_SIZE);
+ OP_ASSERT(_of->offset-_offset<=OP_PAGE_SIZE_MAX);
_sr->size=(opus_int32)(_of->offset-_offset);
_sr->gp=ogg_page_granulepos(&og);
/*If this page is from the stream we're looking for, remember it.*/
@@ -344,7 +344,7 @@
This is mildly helpful when seeks are very expensive (http).*/
chunk_size=OP_MIN(2*chunk_size,OP_CHUNK_SIZE_MAX);
/*Avoid quadratic complexity if we hit an invalid patch of the file.*/
- end=OP_MIN(begin+OP_PAGE_SIZE-1,original_end);
+ end=OP_MIN(begin+OP_PAGE_SIZE_MAX-1,original_end);
}
while(_offset<0);
if(_chunk_size!=NULL)*_chunk_size=chunk_size;
@@ -951,11 +951,11 @@
offset1=_sr[sri].offset;
serialno1=_sr[sri].serialno;
for(srj=sri;srj-->0;){
- ogg_int64_t gp2;
- opus_int64 offset2;
- opus_int64 num;
- ogg_int64_t den;
- ogg_int64_t ipart;
+ ogg_int64_t gp2;
+ opus_int64 offset2;
+ opus_int64 num;
+ ogg_int64_t den;
+ ogg_int64_t ipart;
gp2=_sr[srj].gp;
if(gp2<gp2_min)continue;
/*Oh, and also make sure these came from the same stream.*/
@@ -1088,7 +1088,7 @@
_sr[nsr].search_start=bisect;
_sr[nsr].offset=last;
OP_ASSERT(_of->offset-last>=0);
- OP_ASSERT(_of->offset-last<=OP_PAGE_SIZE);
+ OP_ASSERT(_of->offset-last<=OP_PAGE_SIZE_MAX);
_sr[nsr].size=(opus_int32)(_of->offset-last);
nsr++;
}
@@ -1197,10 +1197,13 @@
_of->od_channel_count=channel_count;
memcpy(_of->od_mapping,head->mapping,sizeof(*head->mapping)*channel_count);
}
- /*TODO: Implement this when not available, or require sufficiently new
- libopus?*/
#if defined(OPUS_SET_GAIN)
opus_multistream_decoder_ctl(_of->od,OPUS_SET_GAIN(head->output_gain));
+#else
+/*A fallback that works with both float and fixed-point is a bunch of work,
+ so just force people to use a sufficiently new version.
+ This is deployed well enough at this point that this shouldn't be a burden.*/
+# error "libopus 1.0.1 or later required"
#endif
_of->ready_state=OP_INITSET;
_of->bytes_tracked=0;