1e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org/* Copyright (c) 2011-2013 Xiph.Org Foundation 2885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Written by Gregory Maxwell */ 3885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* 4885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Redistribution and use in source and binary forms, with or without 5885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org modification, are permitted provided that the following conditions 6885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org are met: 7885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 8885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org - Redistributions of source code must retain the above copyright 9885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org notice, this list of conditions and the following disclaimer. 10885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 11885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org - Redistributions in binary form must reproduce the above copyright 12885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org notice, this list of conditions and the following disclaimer in the 13885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org documentation and/or other materials provided with the distribution. 14885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 15885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 18885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 19885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 21885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 22885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 23885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 24885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org*/ 27885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 28885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* This tests the API presented by the libopus system. 29885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org It does not attempt to extensively exercise the codec internals. 30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org The strategy here is to simply the API interface invariants: 31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org That sane options are accepted, insane options are rejected, 32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org and that nothing blows up. In particular we don't actually test 33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org that settings are heeded by the codec (though we do check that 34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org get after set returns a sane value when it should). Other 35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org tests check the actual codec behavior. 36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org In cases where its reasonable to do so we test exhaustively, 37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org but its not reasonable to do so in all cases. 38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Although these tests are simple they found several library bugs 39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org when they were initially developed. */ 40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* These tests are more sensitive if compiled with -DVALGRIND and 42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org run inside valgrind. Malloc failure testing requires glibc. */ 43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef HAVE_CONFIG_H 45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "config.h" 46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdio.h> 49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdlib.h> 50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdint.h> 51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <string.h> 52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "arch.h" 53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "opus_multistream.h" 54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "opus.h" 55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "test_opus_common.h" 56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef VALGRIND 58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <valgrind/memcheck.h> 59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VG_UNDEF(x,y) VALGRIND_MAKE_MEM_UNDEFINED((x),(y)) 60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VG_CHECK(x,y) VALGRIND_CHECK_MEM_IS_DEFINED((x),(y)) 61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else 62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VG_UNDEF(x,y) 63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define VG_CHECK(x,y) 64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if defined(HAVE___MALLOC_HOOK) 67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MALLOC_FAIL 68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "os_support.h" 69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <malloc.h> 70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgstatic const opus_int32 opus_apps[3] = {OPUS_APPLICATION_VOIP, 72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OPUS_APPLICATION_AUDIO,OPUS_APPLICATION_RESTRICTED_LOWDELAY}; 73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgvoid *malloc_hook(__attribute__((unused)) size_t size, 75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __attribute__((unused)) const void *caller) 76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return 0; 78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgstatic const opus_int32 opus_rates[5] = {48000,24000,16000,12000,8000}; 82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_int32 test_dec_api(void) 84885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 85885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_uint32 dec_final_range; 86885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusDecoder *dec; 87885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusDecoder *dec2; 88885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 i,j,cfgs; 89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char packet[1276]; 90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef DISABLE_FLOAT_API 91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org float fbuf[960*2]; 92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org short sbuf[960*2]; 94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int c,err; 95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 *nullvalue; 96885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org nullvalue=0; 97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 98885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs=0; 99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*First test invalid configurations which should fail*/ 100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,"\n Decoder basic API tests\n"); 101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," ---------------------------------------------------\n"); 102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(c=0;c<4;c++) 103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_decoder_get_size(c); 105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(((c==1||c==2)&&(i<=2048||i>1<<16))||((c!=1&&c!=2)&&i!=0))test_failed(); 106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_decoder_get_size(%d)=%d ...............%s OK.\n",c,i,i>0?"":"...."); 107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Test with unsupported sample rates*/ 111885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(c=0;c<4;c++) 112885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=-7;i<=96000;i++) 114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int fs; 116885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((i==8000||i==12000||i==16000||i==24000||i==48000)&&(c==1||c==2))continue; 117885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org switch(i) 118885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 119885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-5):fs=-8000;break; 120885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-6):fs=INT32_MAX;break; 121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-7):fs=INT32_MIN;break; 122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org default:fs=i; 123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = OPUS_OK; 125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec = opus_decoder_create(fs, c, &err); 127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG || dec!=NULL)test_failed(); 128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1296b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_decoder_create(fs, c, 0); 1306b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(dec!=NULL)test_failed(); 1316b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec=malloc(opus_decoder_get_size(2)); 133885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(dec==NULL)test_failed(); 134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = opus_decoder_init(dec,fs,c); 135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(dec); 138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec = opus_decoder_create(48000, 2, &err); 143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || dec==NULL)test_failed(); 144885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(dec,opus_decoder_get_size(2)); 145885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 147885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_decoder_create() ........................ OK.\n"); 148885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_decoder_init() .......................... OK.\n"); 149885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 150e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_FINAL_RANGE((opus_uint32 *)NULL)); 151e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err != OPUS_BAD_ARG)test_failed(); 152885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&dec_final_range,sizeof(dec_final_range)); 153885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_FINAL_RANGE(&dec_final_range)); 154885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK)test_failed(); 155885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(&dec_final_range,sizeof(dec_final_range)); 156885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_FINAL_RANGE ......................... OK.\n"); 157885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 158885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 159885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec,OPUS_UNIMPLEMENTED); 160885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_UNIMPLEMENTED)test_failed(); 161885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_UNIMPLEMENTED ........................... OK.\n"); 162885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 163885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 164e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_BANDWIDTH((opus_int32 *)NULL)); 165e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err != OPUS_BAD_ARG)test_failed(); 166885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 167885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_BANDWIDTH(&i)); 168885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i!=0)test_failed(); 169885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_BANDWIDTH ........................... OK.\n"); 170885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 171885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 172e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_SAMPLE_RATE((opus_int32 *)NULL)); 173e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err != OPUS_BAD_ARG)test_failed(); 174e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org VG_UNDEF(&i,sizeof(i)); 175e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_SAMPLE_RATE(&i)); 176e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err != OPUS_OK || i!=48000)test_failed(); 177e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org fprintf(stdout," OPUS_GET_SAMPLE_RATE ......................... OK.\n"); 178e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 179e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org 180885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*GET_PITCH has different execution paths depending on the previously decoded frame.*/ 181885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_PITCH(nullvalue)); 182885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 183885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 184885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 185885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_PITCH(&i)); 186885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i>0 || i<-1)test_failed(); 187885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 188885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(packet,sizeof(packet)); 189885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=63<<2;packet[1]=packet[2]=0; 190885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode(dec, packet, 3, sbuf, 960, 0)!=960)test_failed(); 191885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 192885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 193885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_PITCH(&i)); 194885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i>0 || i<-1)test_failed(); 195885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 196885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=1; 197885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode(dec, packet, 1, sbuf, 960, 0)!=960)test_failed(); 198885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 199885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 200885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_PITCH(&i)); 201885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i>0 || i<-1)test_failed(); 202885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 203885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_PITCH ............................... OK.\n"); 204885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 205e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION((opus_int32 *)NULL)); 206e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err != OPUS_BAD_ARG)test_failed(); 207e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org VG_UNDEF(&i,sizeof(i)); 208e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_LAST_PACKET_DURATION(&i)); 209e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err != OPUS_OK || i!=960)test_failed(); 210e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 211e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org fprintf(stdout," OPUS_GET_LAST_PACKET_DURATION ................ OK.\n"); 212e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org 213885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 214885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_GAIN(&i)); 215885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(&i,sizeof(i)); 216885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i!=0)test_failed(); 217885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 218885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_GAIN(nullvalue)); 219885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_BAD_ARG)test_failed(); 220885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 221885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_SET_GAIN(-32769)); 222885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_BAD_ARG)test_failed(); 223885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 224885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_SET_GAIN(32768)); 225885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_BAD_ARG)test_failed(); 226885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 227885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_SET_GAIN(-15)); 228885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK)test_failed(); 229885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 230885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 231885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(dec, OPUS_GET_GAIN(&i)); 232885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(&i,sizeof(i)); 233885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i!=-15)test_failed(); 234885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 235885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_SET_GAIN ................................ OK.\n"); 236885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_GAIN ................................ OK.\n"); 237885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 238885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Reset the decoder*/ 239885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec2=malloc(opus_decoder_get_size(2)); 240885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org memcpy(dec2,dec,opus_decoder_get_size(2)); 241885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decoder_ctl(dec, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 242885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(memcmp(dec2,dec,opus_decoder_get_size(2))==0)test_failed(); 243885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(dec2); 244885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_RESET_STATE ............................. OK.\n"); 245885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 246885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 247885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(packet,sizeof(packet)); 248885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=0; 249885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decoder_get_nb_samples(dec,packet,1)!=480)test_failed(); 2506b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_packet_get_nb_samples(packet,1,48000)!=480)test_failed(); 2516b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_packet_get_nb_samples(packet,1,96000)!=960)test_failed(); 2526b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_packet_get_nb_samples(packet,1,32000)!=320)test_failed(); 2536b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_packet_get_nb_samples(packet,1,8000)!=80)test_failed(); 2546b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org packet[0]=3; 2556b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_packet_get_nb_samples(packet,1,24000)!=OPUS_INVALID_PACKET)test_failed(); 256885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(63<<2)|3; 257885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=63; 2586b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_packet_get_nb_samples(packet,0,24000)!=OPUS_BAD_ARG)test_failed(); 2596b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(opus_packet_get_nb_samples(packet,2,48000)!=OPUS_INVALID_PACKET)test_failed(); 260885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decoder_get_nb_samples(dec,packet,2)!=OPUS_INVALID_PACKET)test_failed(); 2616b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org fprintf(stdout," opus_{packet,decoder}_get_nb_samples() ....... OK.\n"); 2626b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs+=9; 263885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 264885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(OPUS_BAD_ARG!=opus_packet_get_nb_frames(packet,0))test_failed(); 265885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<256;i++) { 266885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int l1res[4]={1,2,2,OPUS_INVALID_PACKET}; 267885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=i; 268885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(l1res[packet[0]&3]!=opus_packet_get_nb_frames(packet,1))test_failed(); 269885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 270885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<256;j++) { 271885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=j; 272885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(((packet[0]&3)!=3?l1res[packet[0]&3]:packet[1]&63)!=opus_packet_get_nb_frames(packet,2))test_failed(); 273885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 274885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 275885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 276885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_packet_get_nb_frames() .................. OK.\n"); 277885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 278885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<256;i++) { 279885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int bw; 280885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=i; 281885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org bw=packet[0]>>4; 282885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org bw=OPUS_BANDWIDTH_NARROWBAND+(((((bw&7)*9)&(63-(bw&8)))+2+12*((bw&8)!=0))>>4); 283885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(bw!=opus_packet_get_bandwidth(packet))test_failed(); 284885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 285885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 286885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_packet_get_bandwidth() .................. OK.\n"); 287885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 288885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<256;i++) { 289885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int fp3s,rate; 290885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=i; 291885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fp3s=packet[0]>>3; 292885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fp3s=((((3-(fp3s&3))*13&119)+9)>>2)*((fp3s>13)*(3-((fp3s&3)==3))+1)*25; 293885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(rate=0;rate<5;rate++) { 294885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((opus_rates[rate]*3/fp3s)!=opus_packet_get_samples_per_frame(packet,opus_rates[rate]))test_failed(); 295885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 296885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 297885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 298885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_packet_get_samples_per_frame() .......... OK.\n"); 299885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 300885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(63<<2)+3; 301885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=49; 302885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=2;j<51;j++)packet[j]=0; 303885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(sbuf,sizeof(sbuf)); 304885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode(dec, packet, 51, sbuf, 960, 0)!=OPUS_INVALID_PACKET)test_failed(); 305885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 306885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(63<<2); 307885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=packet[2]=0; 308885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode(dec, packet, -1, sbuf, 960, 0)!=OPUS_BAD_ARG)test_failed(); 309885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 310885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode(dec, packet, 3, sbuf, 60, 0)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 311885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 312885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode(dec, packet, 3, sbuf, 480, 0)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 313885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 314885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode(dec, packet, 3, sbuf, 960, 0)!=960)test_failed(); 315885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 316885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_decode() ................................ OK.\n"); 317885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef DISABLE_FLOAT_API 318885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(fbuf,sizeof(fbuf)); 319885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode_float(dec, packet, 3, fbuf, 960, 0)!=960)test_failed(); 320885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 321885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_decode_float() .......................... OK.\n"); 322885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 323885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 324885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if 0 325885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*These tests are disabled because the library crashes with null states*/ 326885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decoder_ctl(0,OPUS_RESET_STATE) !=OPUS_INVALID_STATE)test_failed(); 327885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decoder_init(0,48000,1) !=OPUS_INVALID_STATE)test_failed(); 328885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode(0,packet,1,outbuf,2880,0) !=OPUS_INVALID_STATE)test_failed(); 329885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decode_float(0,packet,1,0,2880,0) !=OPUS_INVALID_STATE)test_failed(); 330885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_decoder_get_nb_samples(0,packet,1) !=OPUS_INVALID_STATE)test_failed(); 331885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_packet_get_nb_frames(NULL,1) !=OPUS_BAD_ARG)test_failed(); 332885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_packet_get_bandwidth(NULL) !=OPUS_BAD_ARG)test_failed(); 333885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_packet_get_samples_per_frame(NULL,48000)!=OPUS_BAD_ARG)test_failed(); 334885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 335885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_decoder_destroy(dec); 336885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 337885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," All decoder interface tests passed\n"); 338885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," (%6d API invocations)\n",cfgs); 339885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return cfgs; 340885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 341885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 342885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_int32 test_msdec_api(void) 343885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 344885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_uint32 dec_final_range; 345885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusMSDecoder *dec; 346885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusDecoder *streamdec; 347885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 i,j,cfgs; 348885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char packet[1276]; 349885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char mapping[256]; 350885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef DISABLE_FLOAT_API 351885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org float fbuf[960*2]; 352885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 353885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org short sbuf[960*2]; 354885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int a,b,c,err; 355885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if 0 356885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Relevant test not enabled for multistream*/ 357885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int *nullvalue; 358885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org nullvalue=0; 359885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 360885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 361885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org mapping[0]=0; 362885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org mapping[1]=1; 363885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=2;i<256;i++)VG_UNDEF(&mapping[i],sizeof(unsigned char)); 364885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 365885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs=0; 366885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*First test invalid configurations which should fail*/ 367885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,"\n Multistream decoder basic API tests\n"); 368885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," ---------------------------------------------------\n"); 369885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(a=-1;a<4;a++) 370885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 371885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(b=-1;b<4;b++) 372885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 373885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_multistream_decoder_get_size(a,b); 374885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(((a>0&&b<=a&&b>=0)&&(i<=2048||i>((1<<16)*a)))||((a<1||b>a||b<0)&&i!=0))test_failed(); 375885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_decoder_get_size(%2d,%2d)=%d %sOK.\n",a,b,i,i>0?"":"... "); 376885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 377885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 378885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 379885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 380885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Test with unsupported sample rates*/ 381885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(c=1;c<3;c++) 382885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 383885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=-7;i<=96000;i++) 384885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 385885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int fs; 386885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((i==8000||i==12000||i==16000||i==24000||i==48000)&&(c==1||c==2))continue; 387885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org switch(i) 388885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 389885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-5):fs=-8000;break; 390885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-6):fs=INT32_MAX;break; 391885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-7):fs=INT32_MIN;break; 392885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org default:fs=i; 393885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 394885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = OPUS_OK; 395885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 396885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec = opus_multistream_decoder_create(fs, c, 1, c-1, mapping, &err); 397885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG || dec!=NULL)test_failed(); 398885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 3996b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(fs, c, 1, c-1, mapping, 0); 4006b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(dec!=NULL)test_failed(); 4016b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 402885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec=malloc(opus_multistream_decoder_get_size(1,1)); 403885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(dec==NULL)test_failed(); 404885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = opus_multistream_decoder_init(dec,fs,c,1,c-1, mapping); 405885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 406885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 407885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(dec); 408885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 409885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 410885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4116b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org for(c=0;c<2;c++) 4126b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org { 4136b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org int *ret_err; 4146b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org ret_err = c?0:&err; 415885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4166b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[0]=0; 4176b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[1]=1; 4186b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org for(i=2;i<256;i++)VG_UNDEF(&mapping[i],sizeof(unsigned char)); 419885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4206b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4216b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 2, 1, 0, mapping, ret_err); 4226b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4236b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 4246b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 425885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4266b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4276b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[0]=mapping[1]=0; 4286b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 2, 1, 0, mapping, ret_err); 4296b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4306b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_OK) || dec==NULL)test_failed(); 4316b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 4326b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org opus_multistream_decoder_destroy(dec); 4336b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 434885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4356b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4366b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 1, 4, 1, mapping, ret_err); 4376b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4386b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_OK) || dec==NULL)test_failed(); 4396b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 440885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4416b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org err = opus_multistream_decoder_init(dec,48000, 1, 0, 0, mapping); 4426b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 4436b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 444885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4456b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org err = opus_multistream_decoder_init(dec,48000, 1, 1, -1, mapping); 4466b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 4476b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 448885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4496b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org opus_multistream_decoder_destroy(dec); 4506b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 451885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4526b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4536b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 2, 1, 1, mapping, ret_err); 4546b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4556b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_OK) || dec==NULL)test_failed(); 4566b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 4576b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org opus_multistream_decoder_destroy(dec); 4586b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 459885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4606b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4616b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 255, 255, 1, mapping, ret_err); 4626b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4636b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 4646b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 465885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4666b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4676b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, -1, 1, 1, mapping, ret_err); 4686b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4696b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 4706b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 471885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4726b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4736b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 0, 1, 1, mapping, ret_err); 4746b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4756b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 4766b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 477885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4786b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4796b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 1, -1, 2, mapping, ret_err); 4806b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4816b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 4826b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 483885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4846b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4856b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 1, -1, -1, mapping, ret_err); 4866b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4876b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 4886b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 489885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4906b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4916b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 256, 255, 1, mapping, ret_err); 4926b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4936b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 4946b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 495885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 4966b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 4976b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 256, 255, 0, mapping, ret_err); 4986b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 4996b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 5006b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 501885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 5026b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 5036b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[0]=255; 5046b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[1]=1; 5056b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[2]=2; 5066b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 3, 2, 0, mapping, ret_err); 5076b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 5086b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 5096b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 5106b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 5116b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 5126b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[0]=0; 5136b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[1]=0; 5146b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[2]=0; 5156b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 3, 2, 1, mapping, ret_err); 5166b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 5176b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_OK) || dec==NULL)test_failed(); 5186b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 5196b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org opus_multistream_decoder_destroy(dec); 5206b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 5216b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org 5226b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org VG_UNDEF(ret_err,sizeof(*ret_err)); 5236b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[0]=0; 5246b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[1]=255; 5256b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[2]=1; 5266b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[3]=2; 5276b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org mapping[4]=3; 5286b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org dec = opus_multistream_decoder_create(48001, 5, 4, 1, mapping, ret_err); 5296b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(ret_err){VG_CHECK(ret_err,sizeof(*ret_err));} 5306b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if((ret_err && *ret_err!=OPUS_BAD_ARG) || dec!=NULL)test_failed(); 5316b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 5326b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org } 533885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 534885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 535885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org mapping[0]=0; 536885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org mapping[1]=255; 537885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org mapping[2]=1; 538885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org mapping[3]=2; 539885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 4, 2, 1, mapping, &err); 540885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(&err,sizeof(err)); 541885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || dec==NULL)test_failed(); 542885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 543885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 544885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_decoder_create() ............ OK.\n"); 545885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_decoder_init() .............. OK.\n"); 546885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 547885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&dec_final_range,sizeof(dec_final_range)); 548885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_GET_FINAL_RANGE(&dec_final_range)); 549885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK)test_failed(); 550885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(&dec_final_range,sizeof(dec_final_range)); 551885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_FINAL_RANGE ......................... OK.\n"); 552885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 553885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 554885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org streamdec=0; 555885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&streamdec,sizeof(streamdec)); 556885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_MULTISTREAM_GET_DECODER_STATE(-1,&streamdec)); 557885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 558885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 559885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_MULTISTREAM_GET_DECODER_STATE(1,&streamdec)); 560885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK||streamdec==NULL)test_failed(); 561885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(streamdec,opus_decoder_get_size(1)); 562885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 563885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_MULTISTREAM_GET_DECODER_STATE(2,&streamdec)); 564885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 565885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 566885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_MULTISTREAM_GET_DECODER_STATE(0,&streamdec)); 567885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK||streamdec==NULL)test_failed(); 568885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(streamdec,opus_decoder_get_size(1)); 569885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_MULTISTREAM_GET_DECODER_STATE ........... OK.\n"); 570885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 571885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 572885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<2;j++) 573885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 574885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusDecoder *od; 575885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec,OPUS_MULTISTREAM_GET_DECODER_STATE(j,&od)); 576885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK)test_failed(); 577885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 578885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(od, OPUS_GET_GAIN(&i)); 579885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(&i,sizeof(i)); 580885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i!=0)test_failed(); 581885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 582885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 583885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec,OPUS_SET_GAIN(15)); 584885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK)test_failed(); 585885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_SET_GAIN ................................ OK.\n"); 586885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<2;j++) 587885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 588885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusDecoder *od; 589885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec,OPUS_MULTISTREAM_GET_DECODER_STATE(j,&od)); 590885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK)test_failed(); 591885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 592885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_decoder_ctl(od, OPUS_GET_GAIN(&i)); 593885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(&i,sizeof(i)); 594885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i!=15)test_failed(); 595885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 596885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 597885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_GAIN ................................ OK.\n"); 598885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 599885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 600885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_GET_BANDWIDTH(&i)); 601885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i!=0)test_failed(); 602885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_BANDWIDTH ........................... OK.\n"); 603885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 604885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 605885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec,OPUS_UNIMPLEMENTED); 606885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_UNIMPLEMENTED)test_failed(); 607885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_UNIMPLEMENTED ........................... OK.\n"); 608885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 609885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 610885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if 0 611885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Currently unimplemented for multistream*/ 612885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*GET_PITCH has different execution paths depending on the previously decoded frame.*/ 613885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(nullvalue)); 614885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 615885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 616885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 617885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(&i)); 618885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i>0 || i<-1)test_failed(); 619885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 620885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(packet,sizeof(packet)); 621885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=63<<2;packet[1]=packet[2]=0; 622885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode(dec, packet, 3, sbuf, 960, 0)!=960)test_failed(); 623885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 624885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 625885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(&i)); 626885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i>0 || i<-1)test_failed(); 627885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 628885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=1; 629885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode(dec, packet, 1, sbuf, 960, 0)!=960)test_failed(); 630885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 631885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 632885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_multistream_decoder_ctl(dec, OPUS_GET_PITCH(&i)); 633885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err != OPUS_OK || i>0 || i<-1)test_failed(); 634885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 635885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_PITCH ............................... OK.\n"); 636885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 637885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 638885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Reset the decoder*/ 639885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decoder_ctl(dec, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 640885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_RESET_STATE ............................. OK.\n"); 641885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 642885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 643885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_multistream_decoder_destroy(dec); 644885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 645885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 646885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec = opus_multistream_decoder_create(48000, 2, 1, 1, mapping, &err); 647885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || dec==NULL)test_failed(); 648885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 649885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 650885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(63<<2)+3; 651885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=49; 652885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=2;j<51;j++)packet[j]=0; 653885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(sbuf,sizeof(sbuf)); 654885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode(dec, packet, 51, sbuf, 960, 0)!=OPUS_INVALID_PACKET)test_failed(); 655885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 656885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(63<<2); 657885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=packet[2]=0; 658885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode(dec, packet, -1, sbuf, 960, 0)!=OPUS_BAD_ARG){printf("%d\n",opus_multistream_decode(dec, packet, -1, sbuf, 960, 0));test_failed();} 659885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 660885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode(dec, packet, 3, sbuf, 60, 0)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 661885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 662885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode(dec, packet, 3, sbuf, 480, 0)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 663885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 664885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode(dec, packet, 3, sbuf, 960, 0)!=960)test_failed(); 665885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 666885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_decode() .................... OK.\n"); 667885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef DISABLE_FLOAT_API 668885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(fbuf,sizeof(fbuf)); 669885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode_float(dec, packet, 3, fbuf, 960, 0)!=960)test_failed(); 670885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 671885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_decode_float() .............. OK.\n"); 672885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 673885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 674885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if 0 675885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*These tests are disabled because the library crashes with null states*/ 676885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decoder_ctl(0,OPUS_RESET_STATE) !=OPUS_INVALID_STATE)test_failed(); 677885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decoder_init(0,48000,1) !=OPUS_INVALID_STATE)test_failed(); 678885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode(0,packet,1,outbuf,2880,0) !=OPUS_INVALID_STATE)test_failed(); 679885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decode_float(0,packet,1,0,2880,0) !=OPUS_INVALID_STATE)test_failed(); 680885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_multistream_decoder_get_nb_samples(0,packet,1) !=OPUS_INVALID_STATE)test_failed(); 681885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 682885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_multistream_decoder_destroy(dec); 683885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 684885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," All multistream decoder interface tests passed\n"); 685885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," (%6d API invocations)\n",cfgs); 686885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return cfgs; 687885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 688885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 689885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef VALGRIND 690885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define UNDEFINE_FOR_PARSE toc=-1; \ 691885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org frames[0]=(unsigned char *)0; \ 692885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org frames[1]=(unsigned char *)0; \ 693885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org payload_offset=-1; \ 694885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&toc,sizeof(toc)); \ 695885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(frames,sizeof(frames));\ 696885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&payload_offset,sizeof(payload_offset)); 697885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#else 698885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define UNDEFINE_FOR_PARSE toc=-1; \ 699885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org frames[0]=(unsigned char *)0; \ 700885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org frames[1]=(unsigned char *)0; \ 701885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org payload_offset=-1; 702885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 703885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 704885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* This test exercises the heck out of the libopus parser. 705885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org It is much larger than the parser itself in part because 706885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org it tries to hit a lot of corner cases that could never 707885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fail with the libopus code, but might be problematic for 708885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org other implementations. */ 709885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_int32 test_parse(void) 710885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 711885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 i,j,jj,sz; 712885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char packet[1276]; 713885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 cfgs,cfgs_total; 714885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char toc; 715885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const unsigned char *frames[48]; 716885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org short size[48]; 717885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int payload_offset, ret; 718885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,"\n Packet header parsing tests\n"); 719885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," ---------------------------------------------------\n"); 720885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org memset(packet,0,sizeof(char)*1276); 721885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=63<<2; 722885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_packet_parse(packet,1,&toc,frames,0,&payload_offset)!=OPUS_BAD_ARG)test_failed(); 723885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total=cfgs=1; 724885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*code 0*/ 725885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 726885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 7273c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com packet[0]=i<<2; 728885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 729885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,4,&toc,frames,size,&payload_offset); 730885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 731885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=1)test_failed(); 732885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(size[0]!=3)test_failed(); 733885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(frames[0]!=packet+1)test_failed(); 734885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 735885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 0 (%2d cases) ............................ OK.\n",cfgs); 736885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total+=cfgs;cfgs=0; 737885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 738885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*code 1, two frames of the same size*/ 739885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 740885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 741885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(i<<2)+1; 742885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=0;jj<=1275*2+3;jj++) 743885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 744885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 745885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,jj,&toc,frames,size,&payload_offset); 746885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 747885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((jj&1)==1 && jj<=2551) 748885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 749885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /* Must pass if payload length even (packet length odd) and 750885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org size<=2551, must fail otherwise. */ 751885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=2)test_failed(); 752885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(size[0]!=size[1] || size[0]!=((jj-1)>>1))test_failed(); 753885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(frames[0]!=packet+1)test_failed(); 754885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(frames[1]!=frames[0]+size[0])test_failed(); 755885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 756885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else if(ret!=OPUS_INVALID_PACKET)test_failed(); 757885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 758885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 759885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 1 (%6d cases) ........................ OK.\n",cfgs); 760885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total+=cfgs;cfgs=0; 761885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 762885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 763885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 764885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*code 2, length code overflow*/ 765885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(i<<2)+2; 766885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 767885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,1,&toc,frames,size,&payload_offset); 768885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 769885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 770885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=252; 771885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 772885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2,&toc,frames,size,&payload_offset); 773885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 774885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 775885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<1275;j++) 776885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 777885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(j<252)packet[1]=j; 778885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org else{packet[1]=252+(j&3);packet[2]=(j-252)>>2;} 779885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Code 2, one too short*/ 780885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 781885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,j+(j<252?2:3)-1,&toc,frames,size,&payload_offset); 782885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 783885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 784885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Code 2, one too long*/ 785885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 786885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,j+(j<252?2:3)+1276,&toc,frames,size,&payload_offset); 787885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 788885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 789885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Code 2, second zero*/ 790885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 791885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,j+(j<252?2:3),&toc,frames,size,&payload_offset); 792885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 793885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=2)test_failed(); 794885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(size[0]!=j||size[1]!=0)test_failed(); 795885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(frames[1]!=frames[0]+size[0])test_failed(); 796885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 797885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Code 2, normal*/ 798885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 799885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,(j<<1)+4,&toc,frames,size,&payload_offset); 800885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 801885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=2)test_failed(); 802885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(size[0]!=j||size[1]!=(j<<1)+3-j-(j<252?1:2))test_failed(); 803885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(frames[1]!=frames[0]+size[0])test_failed(); 804885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 805885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 806885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 807885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 2 (%6d cases) ........................ OK.\n",cfgs); 808885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total+=cfgs;cfgs=0; 809885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 810885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 811885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 812885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(i<<2)+3; 813885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*code 3, length code overflow*/ 814885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 815885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,1,&toc,frames,size,&payload_offset); 816885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 817885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 818885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 819885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 3 m-truncation (%2d cases) ............... OK.\n",cfgs); 820885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total+=cfgs;cfgs=0; 821885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 822885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 823885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 824885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*code 3, m is zero or 49-63*/ 825885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(i<<2)+3; 826885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=49;jj<=64;jj++) 827885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 828885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=0+(jj&63); /*CBR, no padding*/ 829885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 830885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,1275,&toc,frames,size,&payload_offset); 831885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 832885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 833885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=128+(jj&63); /*VBR, no padding*/ 834885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 835885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,1275,&toc,frames,size,&payload_offset); 836885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 837885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 838885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=64+(jj&63); /*CBR, padding*/ 839885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 840885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,1275,&toc,frames,size,&payload_offset); 841885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 842885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 843885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=128+64+(jj&63); /*VBR, padding*/ 844885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 845885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,1275,&toc,frames,size,&payload_offset); 846885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 847885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 848885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 849885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 850885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 3 m=0,49-64 (%2d cases) ................ OK.\n",cfgs); 851885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total+=cfgs;cfgs=0; 852885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 853885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 854885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 855885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(i<<2)+3; 856885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*code 3, m is one, cbr*/ 857885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=1; 858885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<1276;j++) 859885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 860885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 861885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,j+2,&toc,frames,size,&payload_offset); 862885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 863885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=1)test_failed(); 864885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(size[0]!=j)test_failed(); 865885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 866885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 867885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 868885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,1276+2,&toc,frames,size,&payload_offset); 869885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 870885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 871885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 872885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 3 m=1 CBR (%2d cases) ................. OK.\n",cfgs); 873885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total+=cfgs;cfgs=0; 874885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 875885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 876885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 877885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int frame_samp; 878885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*code 3, m>1 CBR*/ 879885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(i<<2)+3; 880885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org frame_samp=opus_packet_get_samples_per_frame(packet,48000); 881885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=2;j<49;j++) 882885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 883885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=j; 884885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(sz=2;sz<((j+2)*1275);sz++) 885885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 886885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 887885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,sz,&toc,frames,size,&payload_offset); 888885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 889885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Must be <=120ms, must be evenly divisible, can't have frames>1275 bytes*/ 890885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(frame_samp*j<=5760 && (sz-2)%j==0 && (sz-2)/j<1276) 891885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 892885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=j)test_failed(); 893885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=1;jj<ret;jj++)if(frames[jj]!=frames[jj-1]+size[jj-1])test_failed(); 894885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 895885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else if(ret!=OPUS_INVALID_PACKET)test_failed(); 896885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 897885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 898885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Super jumbo packets*/ 899885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=5760/frame_samp; 900885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 901885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,1275*packet[1]+2,&toc,frames,size,&payload_offset); 902885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 903885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=packet[1])test_failed(); 904885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=0;jj<ret;jj++)if(size[jj]!=1275)test_failed(); 905885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 906885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 3 m=1-48 CBR (%2d cases) .......... OK.\n",cfgs); 907885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total+=cfgs;cfgs=0; 908885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 909885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 910885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 911885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int frame_samp; 912885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Code 3 VBR, m one*/ 913885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(i<<2)+3; 914885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=128+1; 915885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org frame_samp=opus_packet_get_samples_per_frame(packet,48000); 916885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=0;jj<1276;jj++) 917885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 918885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 919885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+jj,&toc,frames,size,&payload_offset); 920885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 921885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=1)test_failed(); 922885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(size[0]!=jj)test_failed(); 923885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 924885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 925885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 926885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+1276,&toc,frames,size,&payload_offset); 927885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 928885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 929885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=2;j<49;j++) 930885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 931885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=128+j; 932885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Length code overflow*/ 933885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 934885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+j-2,&toc,frames,size,&payload_offset); 935885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 936885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 937885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[2]=252; 938885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[3]=0; 939885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=4;jj<2+j;jj++)packet[jj]=0; 940885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 941885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+j,&toc,frames,size,&payload_offset); 942885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 943885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 944885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*One byte too short*/ 945885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=2;jj<2+j;jj++)packet[jj]=0; 946885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 947885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+j-2,&toc,frames,size,&payload_offset); 948885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 949885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 950885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*One byte too short thanks to length coding*/ 951885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[2]=252; 952885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[3]=0; 953885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=4;jj<2+j;jj++)packet[jj]=0; 954885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 955885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+j+252-1,&toc,frames,size,&payload_offset); 956885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 957885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 958885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Most expensive way of coding zeros*/ 959885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=2;jj<2+j;jj++)packet[jj]=0; 960885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 961885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+j-1,&toc,frames,size,&payload_offset); 962885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 963885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(frame_samp*j<=5760){ 964885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=j)test_failed(); 965885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=0;jj<j;jj++)if(size[jj]!=0)test_failed(); 966885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 967885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else if(ret!=OPUS_INVALID_PACKET)test_failed(); 968885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Quasi-CBR use of mode 3*/ 969885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(sz=0;sz<8;sz++) 970885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 971885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const int tsz[8]={50,201,403,700,1472,5110,20400,61298}; 972885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int pos=0; 973885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int as=(tsz[sz]+i-j-2)/j; 974885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=0;jj<j-1;jj++) 975885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 976885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(as<252){packet[2+pos]=as;pos++;} 977885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org else{packet[2+pos]=252+(as&3);packet[3+pos]=(as-252)>>2;pos+=2;} 978885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 979885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 980885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,tsz[sz]+i,&toc,frames,size,&payload_offset); 981885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 982885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(frame_samp*j<=5760 && as<1276 && (tsz[sz]+i-2-pos-as*(j-1))<1276){ 983885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=j)test_failed(); 984885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=0;jj<j-1;jj++)if(size[jj]!=as)test_failed(); 985885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(size[j-1]!=(tsz[sz]+i-2-pos-as*(j-1)))test_failed(); 986885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 987885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else if(ret!=OPUS_INVALID_PACKET)test_failed(); 988885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 989885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 990885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 991885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 3 m=1-48 VBR (%2d cases) ............. OK.\n",cfgs); 992885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs_total+=cfgs;cfgs=0; 993885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 994885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=0;i<64;i++) 995885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 996885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=(i<<2)+3; 997885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Padding*/ 998885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=128+1+64; 999885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Overflow the length coding*/ 1000885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=2;jj<127;jj++)packet[jj]=255; 1001885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 1002885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,127,&toc,frames,size,&payload_offset); 1003885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1004885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 1005885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1006885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(sz=0;sz<4;sz++) 1007885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1008885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const int tsz[4]={0,72,512,1275}; 1009885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(jj=sz;jj<65025;jj+=11) 1010885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1011885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int pos; 1012885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(pos=0;pos<jj/254;pos++)packet[2+pos]=255; 1013885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[2+pos]=jj%254; 1014885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org pos++; 1015885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(sz==0&&i==63) 1016885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1017885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Code more padding than there is room in the packet*/ 1018885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 1019885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+jj+pos-1,&toc,frames,size,&payload_offset); 1020885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1021885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_INVALID_PACKET)test_failed(); 1022885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1023885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org UNDEFINE_FOR_PARSE 1024885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_packet_parse(packet,2+jj+tsz[sz]+i+pos,&toc,frames,size,&payload_offset); 1025885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1026885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(tsz[sz]+i<1276) 1027885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1028885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=1)test_failed(); 1029885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(size[0]!=tsz[sz]+i)test_failed(); 1030885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((toc>>2)!=i)test_failed(); 1031885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else if (ret!=OPUS_INVALID_PACKET)test_failed(); 1032885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1033885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1034885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1035885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," code 3 padding (%2d cases) ............... OK.\n",cfgs); 1036e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs_total+=cfgs; 1037885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_packet_parse ............................ OK.\n"); 1038885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," All packet parsing tests passed\n"); 1039885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," (%d API invocations)\n",cfgs_total); 1040885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return cfgs_total; 1041885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 1042885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1043885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* This is a helper macro for the encoder tests. 1044885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org The encoder api tests all have a pattern of set-must-fail, set-must-fail, 1045885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org set-must-pass, get-and-compare, set-must-pass, get-and-compare. */ 1046885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define CHECK_SETGET(setcall,getcall,badv,badv2,goodv,goodv2,sok,gok) \ 1047885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=(badv);\ 1048885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,setcall)==OPUS_OK)test_failed();\ 1049885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=(badv2);\ 1050885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,setcall)==OPUS_OK)test_failed();\ 1051885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org j=i=(goodv);\ 1052885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,setcall)!=OPUS_OK)test_failed();\ 1053885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=-12345;\ 1054885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); \ 1055885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_encoder_ctl(enc,getcall);\ 1056885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || i!=j)test_failed();\ 1057885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org j=i=(goodv2);\ 1058885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,setcall)!=OPUS_OK)test_failed();\ 1059885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,sok);\ 1060885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=-12345;\ 1061885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); \ 1062885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_encoder_ctl(enc,getcall);\ 1063885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || i!=j)test_failed();\ 1064885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,gok);\ 1065885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs+=6; 1066885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1067885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgopus_int32 test_enc_api(void) 1068885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 1069885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_uint32 enc_final_range; 1070885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusEncoder *enc; 1071885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 i,j; 1072885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char packet[1276]; 1073885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef DISABLE_FLOAT_API 1074885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org float fbuf[960*2]; 1075885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1076885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org short sbuf[960*2]; 1077885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int c,err,cfgs; 1078885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1079885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs=0; 1080885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*First test invalid configurations which should fail*/ 1081885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,"\n Encoder basic API tests\n"); 1082885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," ---------------------------------------------------\n"); 1083885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(c=0;c<4;c++) 1084885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1085885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_encoder_get_size(c); 1086885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(((c==1||c==2)&&(i<=2048||i>1<<17))||((c!=1&&c!=2)&&i!=0))test_failed(); 1087885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_encoder_get_size(%d)=%d ...............%s OK.\n",c,i,i>0?"":"...."); 1088885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1089885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1090885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1091885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Test with unsupported sample rates, channel counts*/ 1092885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(c=0;c<4;c++) 1093885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1094885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=-7;i<=96000;i++) 1095885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1096885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int fs; 1097885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((i==8000||i==12000||i==16000||i==24000||i==48000)&&(c==1||c==2))continue; 1098885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org switch(i) 1099885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-5):fs=-8000;break; 1101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-6):fs=INT32_MAX;break; 1102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org case(-7):fs=INT32_MIN;break; 1103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org default:fs=i; 1104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = OPUS_OK; 1106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 1107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc = opus_encoder_create(fs, c, OPUS_APPLICATION_VOIP, &err); 1108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG || enc!=NULL)test_failed(); 1109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 11106b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org enc = opus_encoder_create(fs, c, OPUS_APPLICATION_VOIP, 0); 11116b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org if(enc!=NULL)test_failed(); 11126b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org cfgs++; 1113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_encoder_destroy(enc); 1114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc=malloc(opus_encoder_get_size(2)); 1115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(enc==NULL)test_failed(); 1116885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = opus_encoder_init(enc, fs, c, OPUS_APPLICATION_VOIP); 1117885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1118885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1119885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(enc); 1120885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc = opus_encoder_create(48000, 2, OPUS_AUTO, NULL); 1124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(enc!=NULL)test_failed(); 1125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 1128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc = opus_encoder_create(48000, 2, OPUS_AUTO, &err); 1129885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_BAD_ARG || enc!=NULL)test_failed(); 1130885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1131885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 1133885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_VOIP, NULL); 1134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(enc==NULL)test_failed(); 1135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_encoder_destroy(enc); 1136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 1139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_RESTRICTED_LOWDELAY, &err); 1140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || enc==NULL)test_failed(); 1141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_LOOKAHEAD(&i)); 1143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || i<0 || i>32766)test_failed(); 1144885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1145e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org opus_encoder_destroy(enc); 1146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1147885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 1148885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_AUDIO, &err); 1149885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || enc==NULL)test_failed(); 1150885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1151885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_LOOKAHEAD(&i)); 1152885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || i<0 || i>32766)test_failed(); 1153885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_encoder_destroy(enc); 1154885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1155885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1156885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 1157885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc = opus_encoder_create(48000, 2, OPUS_APPLICATION_VOIP, &err); 1158885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || enc==NULL)test_failed(); 1159885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1160885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1161885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_encoder_create() ........................ OK.\n"); 1162885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_encoder_init() .......................... OK.\n"); 1163885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1164885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=-12345; 1165885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 1166885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_LOOKAHEAD(&i)); 1167885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || i<0 || i>32766)test_failed(); 1168885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1169e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_LOOKAHEAD((opus_int32 *)NULL)); 1170e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1171e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1172885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_LOOKAHEAD ........................... OK.\n"); 1173885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1174e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_SAMPLE_RATE(&i)); 1175e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_OK || i!=48000)test_failed(); 1176e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1177e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_SAMPLE_RATE((opus_int32 *)NULL)); 1178e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1179e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1180e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org fprintf(stdout," OPUS_GET_SAMPLE_RATE ......................... OK.\n"); 1181e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org 1182885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_UNIMPLEMENTED)!=OPUS_UNIMPLEMENTED)test_failed(); 1183885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_UNIMPLEMENTED ........................... OK.\n"); 1184885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1185885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1186e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_APPLICATION((opus_int32 *)NULL)); 1187e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1188e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1189885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_APPLICATION(i),OPUS_GET_APPLICATION(&i),-1,OPUS_AUTO, 1190885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OPUS_APPLICATION_AUDIO,OPUS_APPLICATION_RESTRICTED_LOWDELAY, 1191885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_APPLICATION ......................... OK.\n", 1192885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_APPLICATION ......................... OK.\n") 1193885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1194e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_BITRATE((opus_int32 *)NULL)); 1195e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1196e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1197885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_BITRATE(1073741832))!=OPUS_OK)test_failed(); 1198885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1199885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 1200885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_GET_BITRATE(&i))!=OPUS_OK)test_failed(); 1201885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(i>700000||i<256000)test_failed(); 1202885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1203885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_BITRATE(i),OPUS_GET_BITRATE(&i),-12345,0, 1204885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 500,256000, 1205885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_BITRATE ............................. OK.\n", 1206885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_BITRATE ............................. OK.\n") 1207885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1208e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_FORCE_CHANNELS((opus_int32 *)NULL)); 1209e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1210e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1211885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_FORCE_CHANNELS(i),OPUS_GET_FORCE_CHANNELS(&i),-1,3, 1212885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1,OPUS_AUTO, 1213885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_FORCE_CHANNELS ...................... OK.\n", 1214885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_FORCE_CHANNELS ...................... OK.\n") 1215885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1216885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=-2; 1217885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))==OPUS_OK)test_failed(); 1218885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1219885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_FULLBAND+1; 1220885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))==OPUS_OK)test_failed(); 1221885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1222885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_NARROWBAND; 1223885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))!=OPUS_OK)test_failed(); 1224885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1225885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_FULLBAND; 1226885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))!=OPUS_OK)test_failed(); 1227885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1228885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_WIDEBAND; 1229885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))!=OPUS_OK)test_failed(); 1230885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1231885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_MEDIUMBAND; 1232885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(i))!=OPUS_OK)test_failed(); 1233885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1234885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_SET_BANDWIDTH ........................... OK.\n"); 1235885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*We don't test if the bandwidth has actually changed. 1236885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org because the change may be delayed until the encoder is advanced.*/ 1237885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=-12345; 1238885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 1239885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_BANDWIDTH(&i)); 1240885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || (i!=OPUS_BANDWIDTH_NARROWBAND&& 1241885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i!=OPUS_BANDWIDTH_MEDIUMBAND&&i!=OPUS_BANDWIDTH_WIDEBAND&& 1242885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i!=OPUS_BANDWIDTH_FULLBAND&&i!=OPUS_AUTO))test_failed(); 1243885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1244885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_BANDWIDTH(OPUS_AUTO))!=OPUS_OK)test_failed(); 1245885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1246e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_BANDWIDTH((opus_int32 *)NULL)); 1247e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1248e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1249885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_BANDWIDTH ........................... OK.\n"); 1250885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1251885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=-2; 1252885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))==OPUS_OK)test_failed(); 1253885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1254885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_FULLBAND+1; 1255885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))==OPUS_OK)test_failed(); 1256885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1257885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_NARROWBAND; 1258885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))!=OPUS_OK)test_failed(); 1259885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1260885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_FULLBAND; 1261885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))!=OPUS_OK)test_failed(); 1262885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1263885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_WIDEBAND; 1264885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))!=OPUS_OK)test_failed(); 1265885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1266885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=OPUS_BANDWIDTH_MEDIUMBAND; 1267885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_SET_MAX_BANDWIDTH(i))!=OPUS_OK)test_failed(); 1268885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1269885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_SET_MAX_BANDWIDTH ....................... OK.\n"); 1270885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*We don't test if the bandwidth has actually changed. 1271885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org because the change may be delayed until the encoder is advanced.*/ 1272885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=-12345; 1273885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&i,sizeof(i)); 1274885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_MAX_BANDWIDTH(&i)); 1275885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(err!=OPUS_OK || (i!=OPUS_BANDWIDTH_NARROWBAND&& 1276885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i!=OPUS_BANDWIDTH_MEDIUMBAND&&i!=OPUS_BANDWIDTH_WIDEBAND&& 1277885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i!=OPUS_BANDWIDTH_FULLBAND))test_failed(); 1278885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1279e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_MAX_BANDWIDTH((opus_int32 *)NULL)); 1280e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1281e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1282885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_MAX_BANDWIDTH ....................... OK.\n"); 1283885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1284e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_DTX((opus_int32 *)NULL)); 1285e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1286e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1287885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_DTX(i),OPUS_GET_DTX(&i),-1,2, 1288885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1,0, 1289885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_DTX ................................. OK.\n", 1290885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_DTX ................................. OK.\n") 1291885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1292e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_COMPLEXITY((opus_int32 *)NULL)); 1293e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1294e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1295885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_COMPLEXITY(i),OPUS_GET_COMPLEXITY(&i),-1,11, 1296885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 0,10, 1297885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_COMPLEXITY .......................... OK.\n", 1298885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_COMPLEXITY .......................... OK.\n") 1299885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1300e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_INBAND_FEC((opus_int32 *)NULL)); 1301e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1302e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1303885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_INBAND_FEC(i),OPUS_GET_INBAND_FEC(&i),-1,2, 1304885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1,0, 1305885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_INBAND_FEC .......................... OK.\n", 1306885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_INBAND_FEC .......................... OK.\n") 1307885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1308e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_PACKET_LOSS_PERC((opus_int32 *)NULL)); 1309e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1310e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1311885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_PACKET_LOSS_PERC(i),OPUS_GET_PACKET_LOSS_PERC(&i),-1,101, 1312885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 100,0, 1313885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_PACKET_LOSS_PERC .................... OK.\n", 1314885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_PACKET_LOSS_PERC .................... OK.\n") 1315885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1316e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_VBR((opus_int32 *)NULL)); 1317e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1318e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1319885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_VBR(i),OPUS_GET_VBR(&i),-1,2, 1320885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1,0, 1321885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_VBR ................................. OK.\n", 1322885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_VBR ................................. OK.\n") 1323885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1324e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org/* err=opus_encoder_ctl(enc,OPUS_GET_VOICE_RATIO((opus_int32 *)NULL)); 1325e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1326e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1327e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org CHECK_SETGET(OPUS_SET_VOICE_RATIO(i),OPUS_GET_VOICE_RATIO(&i),-2,101, 1328885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 0,50, 1329885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_VOICE_RATIO ......................... OK.\n", 1330e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org " OPUS_GET_VOICE_RATIO ......................... OK.\n")*/ 1331885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1332e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_VBR_CONSTRAINT((opus_int32 *)NULL)); 1333e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1334e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1335885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_VBR_CONSTRAINT(i),OPUS_GET_VBR_CONSTRAINT(&i),-1,2, 1336885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1,0, 1337885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_VBR_CONSTRAINT ...................... OK.\n", 1338885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_VBR_CONSTRAINT ...................... OK.\n") 1339885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1340e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_SIGNAL((opus_int32 *)NULL)); 1341e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1342e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1343885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_SIGNAL(i),OPUS_GET_SIGNAL(&i),-12345,0x7FFFFFFF, 1344885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OPUS_SIGNAL_MUSIC,OPUS_AUTO, 1345885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_SIGNAL .............................. OK.\n", 1346885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_SIGNAL .............................. OK.\n") 1347885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1348e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_LSB_DEPTH((opus_int32 *)NULL)); 1349e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1350e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1351885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org CHECK_SETGET(OPUS_SET_LSB_DEPTH(i),OPUS_GET_LSB_DEPTH(&i),7,25,16,24, 1352885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_SET_LSB_DEPTH ........................... OK.\n", 1353885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org " OPUS_GET_LSB_DEPTH ........................... OK.\n") 1354885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 13553c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com err=opus_encoder_ctl(enc,OPUS_GET_PREDICTION_DISABLED(&i)); 13563c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(i!=0)test_failed(); 13573c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 13583c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com err=opus_encoder_ctl(enc,OPUS_GET_PREDICTION_DISABLED((opus_int32 *)NULL)); 13593c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(err!=OPUS_BAD_ARG)test_failed(); 13603c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 13613c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com CHECK_SETGET(OPUS_SET_PREDICTION_DISABLED(i),OPUS_GET_PREDICTION_DISABLED(&i),-1,2,1,0, 13623c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com " OPUS_SET_PREDICTION_DISABLED ................. OK.\n", 13633c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com " OPUS_GET_PREDICTION_DISABLED ................. OK.\n") 13643c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com 1365e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_EXPERT_FRAME_DURATION((opus_int32 *)NULL)); 1366e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1367e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1368e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_2_5_MS)); 1369e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_OK)test_failed(); 1370e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1371e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_5_MS)); 1372e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_OK)test_failed(); 1373e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1374e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_10_MS)); 1375e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_OK)test_failed(); 1376e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1377e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_20_MS)); 1378e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_OK)test_failed(); 1379e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1380e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_40_MS)); 1381e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_OK)test_failed(); 1382e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1383e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_SET_EXPERT_FRAME_DURATION(OPUS_FRAMESIZE_60_MS)); 1384e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_OK)test_failed(); 1385e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1386e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org CHECK_SETGET(OPUS_SET_EXPERT_FRAME_DURATION(i),OPUS_GET_EXPERT_FRAME_DURATION(&i),0,-1, 13873c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com OPUS_FRAMESIZE_60_MS,OPUS_FRAMESIZE_ARG, 1388e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org " OPUS_SET_EXPERT_FRAME_DURATION ............... OK.\n", 1389e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org " OPUS_GET_EXPERT_FRAME_DURATION ............... OK.\n") 1390e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org 1391885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*OPUS_SET_FORCE_MODE is not tested here because it's not a public API, however the encoder tests use it*/ 1392885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1393e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org err=opus_encoder_ctl(enc,OPUS_GET_FINAL_RANGE((opus_uint32 *)NULL)); 1394e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org if(err!=OPUS_BAD_ARG)test_failed(); 1395e3ea049fcaee2247e45f0ce793d4313babb4ef69tlegrand@chromium.org cfgs++; 1396885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc,OPUS_GET_FINAL_RANGE(&enc_final_range))!=OPUS_OK)test_failed(); 1397885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1398885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_GET_FINAL_RANGE ......................... OK.\n"); 1399885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1400885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Reset the encoder*/ 1401885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(enc, OPUS_RESET_STATE)!=OPUS_OK)test_failed(); 1402885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1403885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," OPUS_RESET_STATE ............................. OK.\n"); 1404885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1405885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org memset(sbuf,0,sizeof(short)*2*960); 1406885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(packet,sizeof(packet)); 1407885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_encode(enc, sbuf, 960, packet, sizeof(packet)); 1408885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(i<1 || (i>(opus_int32)sizeof(packet)))test_failed(); 1409885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(packet,i); 1410885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1411885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_encode() ................................ OK.\n"); 1412885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifndef DISABLE_FLOAT_API 1413885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org memset(fbuf,0,sizeof(float)*2*960); 1414885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(packet,sizeof(packet)); 1415885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_encode_float(enc, fbuf, 960, packet, sizeof(packet)); 1416885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(i<1 || (i>(opus_int32)sizeof(packet)))test_failed(); 1417885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_CHECK(packet,i); 1418885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1419885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_encode_float() .......................... OK.\n"); 1420885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1421885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1422885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if 0 1423885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*These tests are disabled because the library crashes with null states*/ 1424885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_ctl(0,OPUS_RESET_STATE) !=OPUS_INVALID_STATE)test_failed(); 1425885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encoder_init(0,48000,1,OPUS_APPLICATION_VOIP) !=OPUS_INVALID_STATE)test_failed(); 1426885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encode(0,sbuf,960,packet,sizeof(packet)) !=OPUS_INVALID_STATE)test_failed(); 1427885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_encode_float(0,fbuf,960,packet,sizeof(packet))!=OPUS_INVALID_STATE)test_failed(); 1428885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1429885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_encoder_destroy(enc); 1430885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1431885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," All encoder interface tests passed\n"); 1432885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," (%d API invocations)\n",cfgs); 1433885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return cfgs; 1434885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 1435885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1436885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define max_out (1276*48+48*2+2) 1437885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint test_repacketizer_api(void) 1438885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 1439885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int ret,cfgs,i,j,k; 1440885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusRepacketizer *rp; 1441885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char *packet; 1442885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char *po; 1443885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs=0; 1444885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,"\n Repacketizer tests\n"); 1445885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," ---------------------------------------------------\n"); 1446885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1447885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet=malloc(max_out); 1448885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(packet==NULL)test_failed(); 1449885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org memset(packet,0,max_out); 14503c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com po=malloc(max_out+256); 14513c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(po==NULL)test_failed(); 1452885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1453885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_repacketizer_get_size(); 1454885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(i<=0)test_failed(); 1455885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1456885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_get_size()=%d ............. OK.\n",i); 1457885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1458885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rp=malloc(i); 1459885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rp=opus_repacketizer_init(rp); 1460885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(rp==NULL)test_failed(); 1461885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1462885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(rp); 1463885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_init ....................... OK.\n"); 1464885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1465885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rp=opus_repacketizer_create(); 1466885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(rp==NULL)test_failed(); 1467885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1468885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_create ..................... OK.\n"); 1469885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1470885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_get_nb_frames(rp)!=0)test_failed(); 1471885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1472885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_get_nb_frames .............. OK.\n"); 1473885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1474885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Length overflows*/ 1475885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(packet,4); 1476885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,0)!=OPUS_INVALID_PACKET)test_failed(); /* Zero len */ 1477885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1478885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=1; 1479885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,2)!=OPUS_INVALID_PACKET)test_failed(); /* Odd payload code 1 */ 1480885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1481885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=2; 1482885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,1)!=OPUS_INVALID_PACKET)test_failed(); /* Code 2 overflow one */ 1483885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1484885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=3; 1485885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,1)!=OPUS_INVALID_PACKET)test_failed(); /* Code 3 no count */ 1486885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1487885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=2; 1488885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=255; 1489885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,2)!=OPUS_INVALID_PACKET)test_failed(); /* Code 2 overflow two */ 1490885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1491885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=2; 1492885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=250; 1493885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,251)!=OPUS_INVALID_PACKET)test_failed(); /* Code 2 overflow three */ 1494885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1495885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=3; 1496885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=0; 1497885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,2)!=OPUS_INVALID_PACKET)test_failed(); /* Code 3 m=0 */ 1498885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1499885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=49; 1500885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,100)!=OPUS_INVALID_PACKET)test_failed(); /* Code 3 m=49 */ 1501885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1502885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=0; 1503885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,3)!=OPUS_OK)test_failed(); 1504885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1505885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=1<<2; 1506885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,3)!=OPUS_INVALID_PACKET)test_failed(); /* Change in TOC */ 1507885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1508885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1509885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /* Code 0,1,3 CBR -> Code 0,1,3 CBR */ 1510885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_init(rp); 1511885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<32;j++) 1512885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1513885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /* TOC types, test half with stereo */ 1514885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int maxi; 1515885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=((j<<1)+(j&1))<<2; 1516885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org maxi=960/opus_packet_get_samples_per_frame(packet,8000); 1517885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=1;i<=maxi;i++) 1518885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1519885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /* Number of CBR frames in the input packets */ 1520885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int maxp; 1521885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=((j<<1)+(j&1))<<2; 1522885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(i>1)packet[0]+=i==2?1:3; 1523885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=i>2?i:0; 1524885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org maxp=960/(i*opus_packet_get_samples_per_frame(packet,8000)); 1525885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(k=0;k<=(1275+75);k+=3) 1526885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1527885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Payload size*/ 1528885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 cnt,rcnt; 1529885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(k%i!=0)continue; /* Only testing CBR here, payload must be a multiple of the count */ 1530885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(cnt=0;cnt<maxp+2;cnt++) 1531885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1532885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(cnt>0) 1533885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1534885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_repacketizer_cat(rp,packet,k+(i>2?2:1)); 1535885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((cnt<=maxp&&k<=(1275*i))?ret!=OPUS_OK:ret!=OPUS_INVALID_PACKET)test_failed(); 1536885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1537885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1538885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rcnt=k<=(1275*i)?(cnt<maxp?cnt:maxp):0; 1539885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_get_nb_frames(rp)!=rcnt*i)test_failed(); 1540885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1541885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_repacketizer_out_range(rp,0,rcnt*i,po,max_out); 1542885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(rcnt>0) 1543885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1544885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int len; 1545885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org len=k*rcnt+((rcnt*i)>2?2:1); 1546885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=len)test_failed(); 1547885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((rcnt*i)<2&&(po[0]&3)!=0)test_failed(); /* Code 0 */ 1548885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((rcnt*i)==2&&(po[0]&3)!=1)test_failed(); /* Code 1 */ 1549885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((rcnt*i)>2&&(((po[0]&3)!=3)||(po[1]!=rcnt*i)))test_failed(); /* Code 3 CBR */ 1550885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1551885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,len)!=len)test_failed(); 1552885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 15533c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_unpad(po,len)!=len)test_failed(); 15543c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 15553c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(po,len,len+1)!=OPUS_OK)test_failed(); 15563c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 15573c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(po,len+1,len+256)!=OPUS_OK)test_failed(); 15583c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 15593c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_unpad(po,len+256)!=len)test_failed(); 15603c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 15613c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_unpad(po,len,1)!=len)test_failed(); 15623c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 15633c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(po,len,len+1,1)!=OPUS_OK)test_failed(); 15643c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 15653c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(po,len+1,len+256,1)!=OPUS_OK)test_failed(); 15663c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 15673c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_unpad(po,len+256,1)!=len)test_failed(); 15683c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 1569885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,len-1)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 1570885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1571885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(len>1) 1572885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1573885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,1)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 1574885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1575885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1576885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,0)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 1577885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1578885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else if (ret!=OPUS_BAD_ARG)test_failed(); /* M must not be 0 */ 1579885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1580885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_init(rp); 1581885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1582885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1583885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1584885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1585885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Change in input count code, CBR out*/ 1586885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_init(rp); 1587885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=0; 1588885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,5)!=OPUS_OK)test_failed(); 1589885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1590885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]+=1; 1591885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,9)!=OPUS_OK)test_failed(); 1592885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1593885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_repacketizer_out(rp,po,max_out); 1594885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((i!=(4+8+2))||((po[0]&3)!=3)||((po[1]&63)!=3)||((po[1]>>7)!=0))test_failed(); 1595885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1596885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_repacketizer_out_range(rp,0,1,po,max_out); 1597885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(i!=5||(po[0]&3)!=0)test_failed(); 1598885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1599885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_repacketizer_out_range(rp,1,2,po,max_out); 1600885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(i!=5||(po[0]&3)!=0)test_failed(); 1601885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1602885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1603885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Change in input count code, VBR out*/ 1604885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_init(rp); 1605885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=1; 1606885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,9)!=OPUS_OK)test_failed(); 1607885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1608885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=0; 1609885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,3)!=OPUS_OK)test_failed(); 1610885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1611885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_repacketizer_out(rp,po,max_out); 1612885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((i!=(2+8+2+2))||((po[0]&3)!=3)||((po[1]&63)!=3)||((po[1]>>7)!=1))test_failed(); 1613885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1614885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1615885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*VBR in, VBR out*/ 1616885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_init(rp); 1617885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=2; 1618885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=4; 1619885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,8)!=OPUS_OK)test_failed(); 1620885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1621885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,8)!=OPUS_OK)test_failed(); 1622885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1623885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_repacketizer_out(rp,po,max_out); 1624885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((i!=(2+1+1+1+4+2+4+2))||((po[0]&3)!=3)||((po[1]&63)!=4)||((po[1]>>7)!=1))test_failed(); 1625885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1626885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1627885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*VBR in, CBR out*/ 1628885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_init(rp); 1629885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=2; 1630885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[1]=4; 1631885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,10)!=OPUS_OK)test_failed(); 1632885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1633885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_cat(rp,packet,10)!=OPUS_OK)test_failed(); 1634885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1635885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i=opus_repacketizer_out(rp,po,max_out); 1636885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if((i!=(2+4+4+4+4))||((po[0]&3)!=3)||((po[1]&63)!=4)||((po[1]>>7)!=0))test_failed(); 1637885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1638885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1639885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*Count 0 in, VBR out*/ 1640885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(j=0;j<32;j++) 1641885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1642885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /* TOC types, test half with stereo */ 1643885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int maxi,sum,rcnt; 1644885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org packet[0]=((j<<1)+(j&1))<<2; 1645885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org maxi=960/opus_packet_get_samples_per_frame(packet,8000); 1646885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org sum=0; 1647885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rcnt=0; 1648885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_init(rp); 1649885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(i=1;i<=maxi+2;i++) 1650885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1651885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int len; 1652885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ret=opus_repacketizer_cat(rp,packet,i); 1653885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(rcnt<maxi) 1654885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1655885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ret!=OPUS_OK)test_failed(); 1656885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rcnt++; 1657885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org sum+=i-1; 1658885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else if (ret!=OPUS_INVALID_PACKET)test_failed(); 1659885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1660885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org len=sum+(rcnt<2?1:rcnt<3?2:2+rcnt-1); 1661885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,max_out)!=len)test_failed(); 1662885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(rcnt>2&&(po[1]&63)!=rcnt)test_failed(); 1663885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(rcnt==2&&(po[0]&3)!=2)test_failed(); 1664885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(rcnt==1&&(po[0]&3)!=0)test_failed(); 1665885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1666885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,len)!=len)test_failed(); 1667885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 16683c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_unpad(po,len)!=len)test_failed(); 16693c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 16703c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(po,len,len+1)!=OPUS_OK)test_failed(); 16713c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 16723c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(po,len+1,len+256)!=OPUS_OK)test_failed(); 16733c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 16743c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_unpad(po,len+256)!=len)test_failed(); 16753c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 16763c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_unpad(po,len,1)!=len)test_failed(); 16773c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 16783c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(po,len,len+1,1)!=OPUS_OK)test_failed(); 16793c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 16803c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(po,len+1,len+256,1)!=OPUS_OK)test_failed(); 16813c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 16823c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_unpad(po,len+256,1)!=len)test_failed(); 16833c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 1684885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,len-1)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 1685885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1686885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(len>1) 1687885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1688885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,1)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 1689885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1690885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1691885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_repacketizer_out(rp,po,0)!=OPUS_BUFFER_TOO_SMALL)test_failed(); 1692885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1693885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1694885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1695885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 16963c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com po[0]='O'; 16973c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com po[1]='p'; 16983c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(po,4,4)!=OPUS_OK)test_failed(); 16993c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17003c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(po,4,4,1)!=OPUS_OK)test_failed(); 17013c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17023c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(po,4,5)!=OPUS_BAD_ARG)test_failed(); 17033c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17043c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(po,4,5,1)!=OPUS_BAD_ARG)test_failed(); 17053c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17063c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(po,0,5)!=OPUS_BAD_ARG)test_failed(); 17073c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17083c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(po,0,5,1)!=OPUS_BAD_ARG)test_failed(); 17093c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17103c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_unpad(po,0)!=OPUS_BAD_ARG)test_failed(); 17113c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17123c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_unpad(po,0,1)!=OPUS_BAD_ARG)test_failed(); 17133c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17143c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_unpad(po,4)!=OPUS_INVALID_PACKET)test_failed(); 17153c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17163c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_unpad(po,4,1)!=OPUS_INVALID_PACKET)test_failed(); 17173c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17183c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com po[0]=0; 17193c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com po[1]=0; 17203c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com po[2]=0; 17213c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_packet_pad(po,5,4)!=OPUS_BAD_ARG)test_failed(); 17223c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17233c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(opus_multistream_packet_pad(po,5,4,1)!=OPUS_BAD_ARG)test_failed(); 17243c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com cfgs++; 17253c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com 1726885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_cat ........................ OK.\n"); 1727885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_out ........................ OK.\n"); 1728885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_out_range .................. OK.\n"); 17293c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com fprintf(stdout," opus_packet_pad .............................. OK.\n"); 17303c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com fprintf(stdout," opus_packet_unpad ............................ OK.\n"); 17313c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com fprintf(stdout," opus_multistream_packet_pad .................. OK.\n"); 17323c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com fprintf(stdout," opus_multistream_packet_unpad ................ OK.\n"); 1733885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1734885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_destroy(rp); 1735885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1736885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(packet); 1737885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org free(po); 1738885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," All repacketizer tests passed\n"); 1739885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," (%7d API invocations)\n",cfgs); 1740885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1741885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return cfgs; 1742885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 1743885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1744885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef MALLOC_FAIL 1745885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* GLIBC 2.14 declares __malloc_hook as deprecated, generating a warning 1746885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org * under GCC. However, this is the cleanest way to test malloc failure 17476b6bee25314cfac02cc555cddedb9680c63a26d6sergeyu@chromium.org * handling in our codebase, and the lack of thread safety isn't an 1748885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org * issue here. We therefore disable the warning for this function. 1749885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org */ 1750885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if OPUS_GNUC_PREREQ(4,6) 1751885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Save the current warning settings */ 1752885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#pragma GCC diagnostic push 1753885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1754885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#pragma GCC diagnostic ignored "-Wdeprecated-declarations" 1755885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1756885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgtypedef void *(*mhook)(size_t __size, __const __malloc_ptr_t); 1757885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1758885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1759885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint test_malloc_fail(void) 1760885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 1761885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef MALLOC_FAIL 1762885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusDecoder *dec; 1763885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusEncoder *enc; 1764885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusRepacketizer *rp; 1765885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char mapping[256] = {0,1}; 1766885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusMSDecoder *msdec; 1767885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusMSEncoder *msenc; 1768885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int rate,c,app,cfgs,err,useerr; 1769885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int *ep; 1770885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org mhook orig_malloc; 1771885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs=0; 1772885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1773885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,"\n malloc() failure tests\n"); 1774885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," ---------------------------------------------------\n"); 1775885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef MALLOC_FAIL 1776885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org orig_malloc=__malloc_hook; 1777885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __malloc_hook=malloc_hook; 1778885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ep=(int *)opus_alloc(sizeof(int)); 1779885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ep!=NULL) 1780885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1781885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(ep)free(ep); 1782885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __malloc_hook=orig_malloc; 1783885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1784885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_decoder_create() ................... SKIPPED.\n"); 1785885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_encoder_create() ................... SKIPPED.\n"); 1786885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_create() .............. SKIPPED.\n"); 1787885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_decoder_create() ....... SKIPPED.\n"); 1788885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_encoder_create() ....... SKIPPED.\n"); 1789885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout,"(Test only supported with GLIBC and without valgrind)\n"); 1790885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return 0; 1791885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef MALLOC_FAIL 1792885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1793885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(useerr=0;useerr<2;useerr++) 1794885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1795885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ep=useerr?&err:0; 1796885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(rate=0;rate<5;rate++) 1797885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1798885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(c=1;c<3;c++) 1799885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1800885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err=1; 1801885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(useerr) 1802885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1803885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 1804885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1805885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org dec=opus_decoder_create(opus_rates[rate], c, ep); 1806885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(dec!=NULL||(useerr&&err!=OPUS_ALLOC_FAIL)) 1807885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1808885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __malloc_hook=orig_malloc; 1809885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org test_failed(); 1810885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1811885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1812885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org msdec=opus_multistream_decoder_create(opus_rates[rate], c, 1, c-1, mapping, ep); 1813885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(msdec!=NULL||(useerr&&err!=OPUS_ALLOC_FAIL)) 1814885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1815885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __malloc_hook=orig_malloc; 1816885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org test_failed(); 1817885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1818885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1819885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for(app=0;app<3;app++) 1820885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1821885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(useerr) 1822885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1823885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org VG_UNDEF(&err,sizeof(err)); 1824885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1825885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org enc=opus_encoder_create(opus_rates[rate], c, opus_apps[app],ep); 1826885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(enc!=NULL||(useerr&&err!=OPUS_ALLOC_FAIL)) 1827885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1828885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __malloc_hook=orig_malloc; 1829885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org test_failed(); 1830885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1831885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1832885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org msenc=opus_multistream_encoder_create(opus_rates[rate], c, 1, c-1, mapping, opus_apps[app],ep); 1833885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(msenc!=NULL||(useerr&&err!=OPUS_ALLOC_FAIL)) 1834885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1835885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __malloc_hook=orig_malloc; 1836885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org test_failed(); 1837885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1838885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1839885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1840885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1841885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1842885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1843885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rp=opus_repacketizer_create(); 1844885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(rp!=NULL) 1845885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1846885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __malloc_hook=orig_malloc; 1847885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org test_failed(); 1848885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1849885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org cfgs++; 1850885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org __malloc_hook=orig_malloc; 1851885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_decoder_create() ........................ OK.\n"); 1852885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_encoder_create() ........................ OK.\n"); 1853885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_repacketizer_create() ................... OK.\n"); 1854885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_decoder_create() ............ OK.\n"); 1855885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," opus_multistream_encoder_create() ............ OK.\n"); 1856885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," All malloc failure tests passed\n"); 1857885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stdout," (%2d API invocations)\n",cfgs); 1858885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return cfgs; 1859885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1860885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 1861885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1862885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#ifdef MALLOC_FAIL 1863885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#if __GNUC_PREREQ(4,6) 1864885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#pragma GCC diagnostic pop /* restore -Wdeprecated-declarations */ 1865885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1866885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 1867885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1868885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint main(int _argc, char **_argv) 1869885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 1870885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_int32 total; 1871885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org const char * oversion; 1872885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(_argc>1) 1873885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 1874885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr,"Usage: %s\n",_argv[0]); 1875885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return 1; 1876885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 1877885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org iseed=0; 1878885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1879885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org oversion=opus_get_version_string(); 1880885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(!oversion)test_failed(); 1881885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr,"Testing the %s API deterministically\n", oversion); 1882885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_strerror(-32768)==NULL)test_failed(); 1883885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(opus_strerror(32767)==NULL)test_failed(); 1884885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(strlen(opus_strerror(0))<1)test_failed(); 1885885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org total=4; 1886885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1887885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org total+=test_dec_api(); 1888885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org total+=test_msdec_api(); 1889885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org total+=test_parse(); 1890885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org total+=test_enc_api(); 1891885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org total+=test_repacketizer_api(); 1892885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org total+=test_malloc_fail(); 1893885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1894885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr,"\nAll API tests passed.\nThe libopus API was invoked %d times.\n",total); 1895885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 1896885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return 0; 1897885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 1898