1 /* l16decode.c
2 * 16-bit audio, mono codec
3 *
4 * Wireshark - Network traffic analyzer
5 * By Gerald Combs <gerald@wireshark.org>
6 * Copyright 1998 Gerald Combs
7 *
8 * SPDX-License-Identifier: GPL-2.0-or-later
9 */
10
11 #include "config.h"
12
13 #include <glib.h>
14 #include <string.h>
15
16 #include "wsutil/codecs.h"
17 #include "ws_attributes.h"
18
19 void codec_register_l16(void);
20
21 static void *
codec_l16_init(void)22 codec_l16_init(void)
23 {
24 return NULL;
25 }
26
27 static void
codec_l16_release(void * ctx _U_)28 codec_l16_release(void *ctx _U_)
29 {
30
31 }
32
33 static unsigned
codec_l16_get_channels(void * ctx _U_)34 codec_l16_get_channels(void *ctx _U_)
35 {
36 return 1;
37 }
38
39 static unsigned
codec_l16_get_frequency(void * ctx _U_)40 codec_l16_get_frequency(void *ctx _U_)
41 {
42 return 44100;
43 }
44
45 static size_t
codec_l16_decode(void * ctx _U_,const void * inputBytes,size_t inputBytesSize,void * outputSamples,size_t * outputSamplesSize)46 codec_l16_decode(void *ctx _U_, const void *inputBytes, size_t inputBytesSize,
47 void *outputSamples, size_t *outputSamplesSize)
48 {
49 const guint16 *dataIn = (const guint16 *)inputBytes;
50 guint16 *dataOut = (guint16 *)outputSamples;
51 size_t i;
52
53 if (!outputSamples || !outputSamplesSize)
54 {
55 return inputBytesSize;
56 }
57
58 for (i=0; i<inputBytesSize/2; i++)
59 {
60 dataOut[i] = g_ntohs(dataIn[i]);
61 }
62
63 *outputSamplesSize = inputBytesSize;
64 return *outputSamplesSize;
65 }
66
67 void
codec_register_l16(void)68 codec_register_l16(void)
69 {
70 register_codec("16-bit audio, monaural", codec_l16_init, codec_l16_release,
71 codec_l16_get_channels, codec_l16_get_frequency, codec_l16_decode);
72 }
73
74 /*
75 * Editor modelines - https://www.wireshark.org/tools/modelines.html
76 *
77 * Local variables:
78 * c-basic-offset: 4
79 * tab-width: 8
80 * indent-tabs-mode: nil
81 * End:
82 *
83 * vi: set shiftwidth=4 tabstop=8 expandtab:
84 * :indentSize=4:tabSize=8:noTabs=true:
85 */
86