1885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org/* Copyright (c) 2011 Xiph.Org Foundation 2885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org Written by Jean-Marc Valin */ 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#ifdef HAVE_CONFIG_H 29885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "config.h" 30885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#endif 31885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 32885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include "opus.h" 33885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdio.h> 34885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <stdlib.h> 35885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#include <string.h> 36885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 37885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org#define MAX_PACKETOUT 32000 38885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 39885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgvoid usage(char *argv0) 40885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 41885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "usage: %s [options] input_file output_file\n", argv0); 42885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 43885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 44885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgstatic void int_to_char(opus_uint32 i, unsigned char ch[4]) 45885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 46885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ch[0] = i>>24; 47885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ch[1] = (i>>16)&0xFF; 48885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ch[2] = (i>>8)&0xFF; 49885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org ch[3] = i&0xFF; 50885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 51885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 52885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgstatic opus_uint32 char_to_int(unsigned char ch[4]) 53885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 54885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return ((opus_uint32)ch[0]<<24) | ((opus_uint32)ch[1]<<16) 55885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org | ((opus_uint32)ch[2]<< 8) | (opus_uint32)ch[3]; 56885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 57885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 58885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.orgint main(int argc, char *argv[]) 59885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org{ 60885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int i, eof=0; 61885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org FILE *fin, *fout; 62885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char packets[48][1500]; 63885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int len[48]; 64885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int rng[48]; 65885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org OpusRepacketizer *rp; 66885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char output_packet[MAX_PACKETOUT]; 67885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int merge = 1, split=0; 68885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 69885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (argc < 3) 70885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 71885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org usage(argv[0]); 72885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 73885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 74885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for (i=1;i<argc-2;i++) 75885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 76885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (strcmp(argv[i], "-merge")==0) 77885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 78885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org merge = atoi(argv[i+1]); 79885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(merge<1) 80885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 81885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "-merge parameter must be at least 1.\n"); 82885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 83885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 843c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com if(merge>48) 853c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com { 863c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com fprintf(stderr, "-merge parameter must be less than 48.\n"); 873c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com return EXIT_FAILURE; 883c3902f0ac13428394f14f78f0fab05ef3468d69tlegrand@google.com } 89885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org i++; 90885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else if (strcmp(argv[i], "-split")==0) 91885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org split = 1; 92885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org else 93885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 94885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Unknown option: %s\n", argv[i]); 95885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org usage(argv[0]); 96885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 97885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 98885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 99885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fin = fopen(argv[argc-2], "r"); 100885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(fin==NULL) 101885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 102885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Error opening input file: %s\n", argv[argc-2]); 103885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 104885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 105885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fout = fopen(argv[argc-1], "w"); 106885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(fout==NULL) 107885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 108885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Error opening output file: %s\n", argv[argc-1]); 109885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fclose(fin); 110885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 111885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 112885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 113885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rp = opus_repacketizer_create(); 114885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org while (!eof) 115885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 116885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int err; 117885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int nb_packets=merge; 118885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org opus_repacketizer_init(rp); 119885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for (i=0;i<nb_packets;i++) 120885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 121885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char ch[4]; 122885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = fread(ch, 1, 4, fin); 123885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org len[i] = char_to_int(ch); 124885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*fprintf(stderr, "in len = %d\n", len[i]);*/ 125885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (len[i]>1500 || len[i]<0) 126885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 127885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (feof(fin)) 128885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 129885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org eof = 1; 130885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else { 131885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Invalid payload length\n"); 132885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fclose(fin); 133885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fclose(fout); 134885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 135885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 136885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org break; 137885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 138885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = fread(ch, 1, 4, fin); 139885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org rng[i] = char_to_int(ch); 140885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = fread(packets[i], 1, len[i], fin); 141885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (feof(fin)) 142885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 143885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org eof = 1; 144885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org break; 145885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 146885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = opus_repacketizer_cat(rp, packets[i], len[i]); 147885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (err!=OPUS_OK) 148885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 149885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "opus_repacketizer_cat() failed: %s\n", opus_strerror(err)); 150885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org break; 151885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 152885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 153885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org nb_packets = i; 154885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 155885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (eof) 156885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org break; 157885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 158885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (!split) 159885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 160885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = opus_repacketizer_out(rp, output_packet, MAX_PACKETOUT); 161885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (err>0) { 162885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char int_field[4]; 163885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int_to_char(err, int_field); 164885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if(fwrite(int_field, 1, 4, fout)!=4){ 165885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Error writing.\n"); 166885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 167885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 168885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int_to_char(rng[nb_packets-1], int_field); 169885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (fwrite(int_field, 1, 4, fout)!=4) { 170885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Error writing.\n"); 171885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 172885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 173885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (fwrite(output_packet, 1, err, fout)!=(unsigned)err) { 174885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Error writing.\n"); 175885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 176885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 177885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*fprintf(stderr, "out len = %d\n", err);*/ 178885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else { 179885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "opus_repacketizer_out() failed: %s\n", opus_strerror(err)); 180885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 181885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else { 182885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int nb_frames = opus_repacketizer_get_nb_frames(rp); 183885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org for (i=0;i<nb_frames;i++) 184885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org { 185885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org err = opus_repacketizer_out_range(rp, i, i+1, output_packet, MAX_PACKETOUT); 186885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (err>0) { 187885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org unsigned char int_field[4]; 188885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int_to_char(err, int_field); 189885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (fwrite(int_field, 1, 4, fout)!=4) { 190885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Error writing.\n"); 191885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 192885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 193885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (i==nb_frames-1) 194885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int_to_char(rng[nb_packets-1], int_field); 195885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org else 196885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org int_to_char(0, int_field); 197885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (fwrite(int_field, 1, 4, fout)!=4) { 198885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Error writing.\n"); 199885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 200885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 201885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org if (fwrite(output_packet, 1, err, fout)!=(unsigned)err) { 202885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "Error writing.\n"); 203885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_FAILURE; 204885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 205885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org /*fprintf(stderr, "out len = %d\n", err);*/ 206885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } else { 207885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fprintf(stderr, "opus_repacketizer_out() failed: %s\n", opus_strerror(err)); 208885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 209885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 210885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 211885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 212885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org } 213885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org 214885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fclose(fin); 215885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org fclose(fout); 216885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org return EXIT_SUCCESS; 217885f2ff5a7a7d6a73432d26a6c0ae9147e6b452sergeyu@chromium.org} 218