Codebase list asterisk-opus / a500d69
Add a 'opus show' CLI command. Ripping off codec_dahdi in a major way. Sean Bright 9 years ago
1 changed file(s) with 51 addition(s) and 4 deletion(s). Raw diff Collapse all Expand all
4242
4343 #include "asterisk/translate.h"
4444 #include "asterisk/module.h"
45 #include "asterisk/cli.h"
4546 #include "asterisk/config.h"
4647 #include "asterisk/utils.h"
4748
5455 #include "asterisk/slin.h"
5556 #include "ex_opus.h"
5657
57 static int encoder_id;
58 static int decoder_id;
58 static struct codec_usage {
59 int encoder_id;
60 int decoder_id;
61 int encoders;
62 int decoders;
63 } usage;
5964
6065 /* Private structures */
6166 struct opus_coder_pvt {
112117
113118 opus_encoder_ctl(opvt->opus, OPUS_SET_INBAND_FEC(opvt->fec));
114119 opvt->framesize = sampling_rate/50;
115 opvt->id = ast_atomic_fetchadd_int(&encoder_id, 1) + 1;
120 opvt->id = ast_atomic_fetchadd_int(&usage.encoder_id, 1) + 1;
121
122 ast_atomic_fetchadd_int(&usage.encoders, +1);
116123
117124 ast_debug(3, "Created encoder #%d (%d -> opus)\n", opvt->id, sampling_rate);
118125
139146 return -1;
140147 }
141148
142 opvt->id = ast_atomic_fetchadd_int(&decoder_id, 1) + 1;
149 opvt->id = ast_atomic_fetchadd_int(&usage.decoder_id, 1) + 1;
150
151 ast_atomic_fetchadd_int(&usage.decoders, +1);
143152
144153 ast_debug(3, "Created decoder #%d (opus -> %d)\n", opvt->id, sampling_rate);
145154
250259 opus_encoder_destroy(opvt->opus);
251260 opvt->opus = NULL;
252261
262 ast_atomic_fetchadd_int(&usage.encoders, -1);
263
253264 ast_debug(3, "Destroyed encoder #%d (%d->opus)\n", opvt->id, opvt->sampling_rate);
254265 }
255266
264275 opus_decoder_destroy(opvt->opus);
265276 opvt->opus = NULL;
266277
278 ast_atomic_fetchadd_int(&usage.decoders, -1);
279
267280 ast_debug(3, "Destroyed decoder #%d (opus->%d)\n", opvt->id, opvt->sampling_rate);
281 }
282
283 static char *handle_cli_opus_show(struct ast_cli_entry *e, int cmd, struct ast_cli_args *a)
284 {
285 struct codec_usage copy;
286
287 switch (cmd) {
288 case CLI_INIT:
289 e->command = "opus show";
290 e->usage =
291 "Usage: opus show\n"
292 " Displays Opus encoder/decoder utilization.\n";
293 return NULL;
294 case CLI_GENERATE:
295 return NULL;
296 }
297
298 if (a->argc != 2) {
299 return CLI_SHOWUSAGE;
300 }
301
302 copy = usage;
303
304 ast_cli(a->fd, "%d/%d encoders/decoders are in use.\n", copy.encoders, copy.decoders);
305
306 return CLI_SUCCESS;
268307 }
269308
270309 /* Translators */
488527 .desc_size = sizeof(struct opus_coder_pvt),
489528 .buffer_samples = BUFFER_SAMPLES,
490529 .buf_size = BUFFER_SAMPLES * 2,
530 };
531
532 static struct ast_cli_entry cli[] = {
533 AST_CLI_DEFINE(handle_cli_opus_show, "Display Opus codec utilization.")
491534 };
492535
493536 static int reload(void)
511554 res |= ast_unregister_translator(&opustolin48);
512555 res |= ast_unregister_translator(&lin48toopus);
513556
557 ast_cli_unregister_multiple(cli, ARRAY_LEN(cli));
558
514559 return res;
515560 }
516561
529574 res |= ast_register_translator(&opustolin48);
530575 res |= ast_register_translator(&lin48toopus);
531576
577 ast_cli_register_multiple(cli, ARRAY_LEN(cli));
578
532579 return res;
533580 }
534581