mirror of
https://github.com/roytam1/palemoon26.git
synced 2026-05-26 13:58:38 +00:00
libogg: updated to upstream rev ea2b95940
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
|
||||
function: code raw packets into framed OggSquish stream and
|
||||
decode Ogg streams back into raw packets
|
||||
last mod: $Id: framing.c 18052 2011-08-04 17:57:02Z giles $
|
||||
last mod: $Id$
|
||||
|
||||
note: The CRC code is directly derived from public domain code by
|
||||
Ross Williams (ross@guest.adelaide.edu.au). See docs/framing.html
|
||||
@@ -21,6 +21,7 @@
|
||||
********************************************************************/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
#include <string.h>
|
||||
#include <ogg/ogg.h>
|
||||
|
||||
@@ -236,39 +237,51 @@ int ogg_stream_destroy(ogg_stream_state *os){
|
||||
/* Helpers for ogg_stream_encode; this keeps the structure and
|
||||
what's happening fairly clear */
|
||||
|
||||
static int _os_body_expand(ogg_stream_state *os,int needed){
|
||||
if(os->body_storage<=os->body_fill+needed){
|
||||
static int _os_body_expand(ogg_stream_state *os,long needed){
|
||||
if(os->body_storage-needed<=os->body_fill){
|
||||
long body_storage;
|
||||
void *ret;
|
||||
ret=_ogg_realloc(os->body_data,(os->body_storage+needed+1024)*
|
||||
sizeof(*os->body_data));
|
||||
if(os->body_storage>LONG_MAX-needed){
|
||||
ogg_stream_clear(os);
|
||||
return -1;
|
||||
}
|
||||
body_storage=os->body_storage+needed;
|
||||
if(body_storage<LONG_MAX-1024)body_storage+=1024;
|
||||
ret=_ogg_realloc(os->body_data,body_storage*sizeof(*os->body_data));
|
||||
if(!ret){
|
||||
ogg_stream_clear(os);
|
||||
return -1;
|
||||
}
|
||||
os->body_storage+=(needed+1024);
|
||||
os->body_storage=body_storage;
|
||||
os->body_data=ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int _os_lacing_expand(ogg_stream_state *os,int needed){
|
||||
if(os->lacing_storage<=os->lacing_fill+needed){
|
||||
static int _os_lacing_expand(ogg_stream_state *os,long needed){
|
||||
if(os->lacing_storage-needed<=os->lacing_fill){
|
||||
long lacing_storage;
|
||||
void *ret;
|
||||
ret=_ogg_realloc(os->lacing_vals,(os->lacing_storage+needed+32)*
|
||||
sizeof(*os->lacing_vals));
|
||||
if(os->lacing_storage>LONG_MAX-needed){
|
||||
ogg_stream_clear(os);
|
||||
return -1;
|
||||
}
|
||||
lacing_storage=os->lacing_storage+needed;
|
||||
if(lacing_storage<LONG_MAX-32)lacing_storage+=32;
|
||||
ret=_ogg_realloc(os->lacing_vals,lacing_storage*sizeof(*os->lacing_vals));
|
||||
if(!ret){
|
||||
ogg_stream_clear(os);
|
||||
return -1;
|
||||
}
|
||||
os->lacing_vals=ret;
|
||||
ret=_ogg_realloc(os->granule_vals,(os->lacing_storage+needed+32)*
|
||||
ret=_ogg_realloc(os->granule_vals,lacing_storage*
|
||||
sizeof(*os->granule_vals));
|
||||
if(!ret){
|
||||
ogg_stream_clear(os);
|
||||
return -1;
|
||||
}
|
||||
os->granule_vals=ret;
|
||||
os->lacing_storage+=(needed+32);
|
||||
os->lacing_storage=lacing_storage;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -304,12 +317,17 @@ void ogg_page_checksum_set(ogg_page *og){
|
||||
int ogg_stream_iovecin(ogg_stream_state *os, ogg_iovec_t *iov, int count,
|
||||
long e_o_s, ogg_int64_t granulepos){
|
||||
|
||||
int bytes = 0, lacing_vals, i;
|
||||
long bytes = 0, lacing_vals;
|
||||
int i;
|
||||
|
||||
if(ogg_stream_check(os)) return -1;
|
||||
if(!iov) return 0;
|
||||
|
||||
for (i = 0; i < count; ++i) bytes += (int)iov[i].iov_len;
|
||||
for (i = 0; i < count; ++i){
|
||||
if(iov[i].iov_len>LONG_MAX) return -1;
|
||||
if(bytes>LONG_MAX-(long)iov[i].iov_len) return -1;
|
||||
bytes += (long)iov[i].iov_len;
|
||||
}
|
||||
lacing_vals=bytes/255+1;
|
||||
|
||||
if(os->body_returned){
|
||||
@@ -857,6 +875,7 @@ int ogg_stream_pagein(ogg_stream_state *os, ogg_page *og){
|
||||
some segments */
|
||||
if(continued){
|
||||
if(os->lacing_fill<1 ||
|
||||
(os->lacing_vals[os->lacing_fill-1]&0xff)<255 ||
|
||||
os->lacing_vals[os->lacing_fill-1]==0x400){
|
||||
bos=0;
|
||||
for(;segptr<segments;segptr++){
|
||||
@@ -1474,6 +1493,34 @@ const int head3_7[] = {0x4f,0x67,0x67,0x53,0,0x05,
|
||||
1,
|
||||
0};
|
||||
|
||||
int compare_packet(const ogg_packet *op1, const ogg_packet *op2){
|
||||
if(op1->packet!=op2->packet){
|
||||
fprintf(stderr,"op1->packet != op2->packet\n");
|
||||
return(1);
|
||||
}
|
||||
if(op1->bytes!=op2->bytes){
|
||||
fprintf(stderr,"op1->bytes != op2->bytes\n");
|
||||
return(1);
|
||||
}
|
||||
if(op1->b_o_s!=op2->b_o_s){
|
||||
fprintf(stderr,"op1->b_o_s != op2->b_o_s\n");
|
||||
return(1);
|
||||
}
|
||||
if(op1->e_o_s!=op2->e_o_s){
|
||||
fprintf(stderr,"op1->e_o_s != op2->e_o_s\n");
|
||||
return(1);
|
||||
}
|
||||
if(op1->granulepos!=op2->granulepos){
|
||||
fprintf(stderr,"op1->granulepos != op2->granulepos\n");
|
||||
return(1);
|
||||
}
|
||||
if(op1->packetno!=op2->packetno){
|
||||
fprintf(stderr,"op1->packetno != op2->packetno\n");
|
||||
return(1);
|
||||
}
|
||||
return(0);
|
||||
}
|
||||
|
||||
void test_pack(const int *pl, const int **headers, int byteskip,
|
||||
int pageskip, int packetskip){
|
||||
unsigned char *data=_ogg_malloc(1024*1024); /* for scripted test cases only */
|
||||
@@ -1582,7 +1629,7 @@ void test_pack(const int *pl, const int **headers, int byteskip,
|
||||
ogg_stream_packetout(&os_de,&op_de); /* just catching them all */
|
||||
|
||||
/* verify peek and out match */
|
||||
if(memcmp(&op_de,&op_de2,sizeof(op_de))){
|
||||
if(compare_packet(&op_de,&op_de2)){
|
||||
fprintf(stderr,"packetout != packetpeek! pos=%ld\n",
|
||||
depacket);
|
||||
exit(1);
|
||||
|
||||
Reference in New Issue
Block a user