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