8 #define MAX_PACKETOUT 32000
10 void usage(char *argv0)
12 fprintf(stderr, "usage: %s [options] input_file output_file\n", argv0);
15 static void int_to_char(opus_uint32 i, unsigned char ch[4])
23 static opus_uint32 char_to_int(unsigned char ch[4])
25 return ((opus_uint32)ch[0]<<24) | ((opus_uint32)ch[1]<<16)
26 | ((opus_uint32)ch[2]<< 8) | (opus_uint32)ch[3];
29 int main(int argc, char *argv[])
33 unsigned char packets[48][1500];
37 unsigned char output_packet[MAX_PACKETOUT];
38 int merge = 1, split=0;
45 for (i=1;i<argc-2;i++)
47 if (strcmp(argv[i], "-merge")==0)
49 merge = atoi(argv[i+1]);
51 } else if (strcmp(argv[i], "-split")==0)
55 fprintf(stderr, "Unknown option: %s\n", argv[i]);
60 fin = fopen(argv[argc-2], "r");
61 fout = fopen(argv[argc-1], "w");
63 rp = opus_repacketizer_create();
68 opus_repacketizer_init(rp);
69 for (i=0;i<nb_packets;i++)
72 err = fread(ch, 1, 4, fin);
73 len[i] = char_to_int(ch);
74 /*fprintf(stderr, "in len = %d\n", len[i]);*/
75 if (len[i]>1500 || len[i]<0)
80 fprintf(stderr, "Invalid payload length\n");
83 err = fread(ch, 1, 4, fin);
84 rng[i] = char_to_int(ch);
85 err = fread(packets[i], 1, len[i], fin);
91 err = opus_repacketizer_cat(rp, packets[i], len[i]);
94 fprintf(stderr, "opus_repacketizer_cat() failed: %s\n", opus_strerror(err));
105 err = opus_repacketizer_out(rp, output_packet, MAX_PACKETOUT);
107 unsigned char int_field[4];
108 int_to_char(err, int_field);
109 fwrite(int_field, 1, 4, fout);
110 int_to_char(rng[nb_packets-1], int_field);
111 fwrite(int_field, 1, 4, fout);
112 fwrite(output_packet, 1, err, fout);
113 /*fprintf(stderr, "out len = %d\n", err);*/
115 fprintf(stderr, "opus_repacketizer_out() failed: %s\n", opus_strerror(err));
118 int nb_frames = opus_repacketizer_get_nb_frames(rp);
119 for (i=0;i<nb_frames;i++)
121 err = opus_repacketizer_out_range(rp, i, i+1, output_packet, MAX_PACKETOUT);
123 unsigned char int_field[4];
124 int_to_char(err, int_field);
125 fwrite(int_field, 1, 4, fout);
127 int_to_char(rng[nb_packets-1], int_field);
129 int_to_char(0, int_field);
130 fwrite(int_field, 1, 4, fout);
131 fwrite(output_packet, 1, err, fout);
132 /*fprintf(stderr, "out len = %d\n", err);*/
134 fprintf(stderr, "opus_repacketizer_out() failed: %s\n", opus_strerror(err));