Wireshark 4.7.0
The Wireshark network protocol analyzer
Loading...
Searching...
No Matches
Classes | Macros | Enumerations | Functions
mpeg-audio.h File Reference
#include <stdint.h>
#include "ws_symbol_export.h"

Go to the source code of this file.

Classes

struct  mpa
 

Macros

#define MPA_UNMARSHAL_SYNC(n)   ((n) >> 21 & 0x7ff)
 
#define MPA_UNMARSHAL_VERSION(n)   ((n) >> 19 & 0x3)
 
#define MPA_UNMARSHAL_LAYER(n)   ((n) >> 17 & 0x3)
 
#define MPA_UNMARSHAL_PROTECTION(n)   ((n) >> 16 & 0x1)
 
#define MPA_UNMARSHAL_BITRATE(n)   ((n) >> 12 & 0xf)
 
#define MPA_UNMARSHAL_FREQUENCY(n)   ((n) >> 10 & 0x3)
 
#define MPA_UNMARSHAL_PADDING(n)   ((n) >> 9 & 0x1)
 
#define MPA_UNMARSHAL_PRIVATE(n)   ((n) >> 8 & 0x1)
 
#define MPA_UNMARSHAL_MODE(n)   ((n) >> 6 & 0x3)
 
#define MPA_UNMARSHAL_MODEEXT(n)   ((n) >> 4 & 0x3)
 
#define MPA_UNMARSHAL_COPYRIGHT(n)   ((n) >> 3 & 0x1)
 
#define MPA_UNMARSHAL_ORIGINAL(n)   ((n) >> 2 & 0x1)
 
#define MPA_UNMARSHAL_EMPHASIS(n)   ((n) >> 0 & 0x3)
 
#define MPA_UNMARSHAL(mpa, n)
 
#define MPA_DATA_BYTES(mpa)
 Calculates the number of data bytes in an MPEG audio frame.
 
#define MPA_BYTES(mpa)   (MPA_DATA_BYTES(mpa) + mpa_padding(mpa))
 Calculates the total number of bytes in an MPEG audio frame.
 
#define MPA_DURATION_NS(mpa)    (1000000000 / mpa_frequency(mpa) * mpa_samples(mpa))
 Calculates the duration of an MPEG audio frame in nanoseconds.
 
#define MPA_SYNC_VALID(mpa)   ((mpa)->sync == MPA_SYNC)
 
#define MPA_VERSION_VALID(mpa)   (mpa_version(mpa) >= 0)
 
#define MPA_LAYER_VALID(mpa)   (mpa_layer(mpa) >= 0)
 
#define MPA_BITRATE_VALID(mpa)   (mpa_bitrate(mpa) > 0)
 
#define MPA_FREQUENCY_VALID(mpa)   (mpa_frequency(mpa) > 0)
 
#define MPA_VALID(mpa)
 

Enumerations

enum  { MPA_SYNC = 0x7ff }
 

Functions

WS_DLL_PUBLIC int mpa_version (const struct mpa *mpa)
 Extracts the MPEG audio version from the given header.
 
WS_DLL_PUBLIC int mpa_layer (const struct mpa *mpa)
 Extracts the MPEG audio layer from the given header.
 
WS_DLL_PUBLIC unsigned int mpa_samples (const struct mpa *mpa)
 Returns the number of audio samples per frame.
 
WS_DLL_PUBLIC unsigned int mpa_bitrate (const struct mpa *mpa)
 Extracts the bitrate from the MPEG audio header.
 
WS_DLL_PUBLIC unsigned int mpa_frequency (const struct mpa *mpa)
 Extracts the sampling frequency from the MPEG audio header.
 
WS_DLL_PUBLIC unsigned int mpa_padding (const struct mpa *mpa)
 Checks whether padding is present in the MPEG audio frame.
 
WS_DLL_PUBLIC uint32_t decode_synchsafe_int (uint32_t val)
 Decodes a synchsafe integer from ID3 metadata.
 

Detailed Description

MPEG Audio header dissection Written by Shaun Jackman sjack.nosp@m.man@.nosp@m.gmail.nosp@m..com Copyright 2007 Shaun Jackman

Wiretap Library SPDX-License-Identifier: GPL-2.0-or-later

Macro Definition Documentation

◆ MPA_BYTES

#define MPA_BYTES (   mpa)    (MPA_DATA_BYTES(mpa) + mpa_padding(mpa))

Calculates the total number of bytes in an MPEG audio frame.

Includes both the audio payload and any padding bytes.

Parameters
mpaPointer to the MPEG audio header structure.
Returns
The total number of bytes in the frame.

◆ MPA_DATA_BYTES

#define MPA_DATA_BYTES (   mpa)
Value:
WS_DLL_PUBLIC unsigned int mpa_samples(const struct mpa *mpa)
Returns the number of audio samples per frame.
Definition mpeg-audio.c:61
WS_DLL_PUBLIC unsigned int mpa_bitrate(const struct mpa *mpa)
Extracts the bitrate from the MPEG audio header.
Definition mpeg-audio.c:67
WS_DLL_PUBLIC unsigned int mpa_frequency(const struct mpa *mpa)
Extracts the sampling frequency from the MPEG audio header.
Definition mpeg-audio.c:73
Definition mpeg-audio.h:17

Calculates the number of data bytes in an MPEG audio frame.

Computes the size of the audio payload (excluding padding) based on bitrate, sample count, and sampling frequency.

Parameters
mpaPointer to the MPEG audio header structure.
Returns
The number of data bytes in the frame.

◆ MPA_DURATION_NS

#define MPA_DURATION_NS (   mpa)     (1000000000 / mpa_frequency(mpa) * mpa_samples(mpa))

Calculates the duration of an MPEG audio frame in nanoseconds.

Uses the sample count and sampling frequency to compute the frame duration.

Parameters
mpaPointer to the MPEG audio header structure.
Returns
The duration of the frame in nanoseconds.

◆ MPA_UNMARSHAL

#define MPA_UNMARSHAL (   mpa,
 
)
Value:
do { \
(mpa)->sync = MPA_UNMARSHAL_SYNC(n); \
(mpa)->version = MPA_UNMARSHAL_VERSION(n); \
(mpa)->layer = MPA_UNMARSHAL_LAYER(n); \
(mpa)->protection = MPA_UNMARSHAL_PROTECTION(n); \
(mpa)->bitrate = MPA_UNMARSHAL_BITRATE(n); \
(mpa)->frequency = MPA_UNMARSHAL_FREQUENCY(n); \
(mpa)->padding = MPA_UNMARSHAL_PADDING(n); \
(mpa)->priv = MPA_UNMARSHAL_PRIVATE(n); \
(mpa)->mode = MPA_UNMARSHAL_MODE(n); \
(mpa)->modeext = MPA_UNMARSHAL_MODEEXT(n); \
(mpa)->copyright = MPA_UNMARSHAL_COPYRIGHT(n); \
(mpa)->original = MPA_UNMARSHAL_ORIGINAL(n); \
(mpa)->emphasis = MPA_UNMARSHAL_EMPHASIS(n); \
} while (0)

◆ MPA_VALID

#define MPA_VALID (   mpa)
Value:
(MPA_SYNC_VALID(mpa) \
&& MPA_VERSION_VALID(mpa) && MPA_LAYER_VALID(mpa) \
&& MPA_BITRATE_VALID(mpa) && MPA_FREQUENCY_VALID(mpa))

Function Documentation

◆ decode_synchsafe_int()

WS_DLL_PUBLIC uint32_t decode_synchsafe_int ( uint32_t  val)

Decodes a synchsafe integer from ID3 metadata.

Converts a 32-bit synchsafe integer (used in ID3v2 tags) to its raw integer value. Synchsafe integers avoid false MPEG syncs by ensuring no byte has all bits set.

Parameters
valThe synchsafe encoded 32-bit integer.
Returns
The decoded raw integer value.

◆ mpa_bitrate()

WS_DLL_PUBLIC unsigned int mpa_bitrate ( const struct mpa mpa)

Extracts the bitrate from the MPEG audio header.

Parses the header to determine the encoded bitrate in kilobits per second.

Parameters
mpaPointer to the MPEG audio header structure.
Returns
The bitrate in kbps.

◆ mpa_frequency()

WS_DLL_PUBLIC unsigned int mpa_frequency ( const struct mpa mpa)

Extracts the sampling frequency from the MPEG audio header.

Parses the header to determine the sample rate in Hz.

Parameters
mpaPointer to the MPEG audio header structure.
Returns
The sampling frequency in Hz.

◆ mpa_layer()

WS_DLL_PUBLIC int mpa_layer ( const struct mpa mpa)

Extracts the MPEG audio layer from the given header.

Parses the MPEG audio header and returns the layer identifier (e.g., Layer I, II, III).

Parameters
mpaPointer to the MPEG audio header structure.
Returns
The MPEG layer as an integer code.

◆ mpa_padding()

WS_DLL_PUBLIC unsigned int mpa_padding ( const struct mpa mpa)

Checks whether padding is present in the MPEG audio frame.

Determines if the frame includes padding bits used to adjust frame size.

Parameters
mpaPointer to the MPEG audio header structure.
Returns
1 if padding is present, 0 otherwise.

◆ mpa_samples()

WS_DLL_PUBLIC unsigned int mpa_samples ( const struct mpa mpa)

Returns the number of audio samples per frame.

Determines the sample count based on MPEG version and layer.

Parameters
mpaPointer to the MPEG audio header structure.
Returns
The number of samples per frame.

◆ mpa_version()

WS_DLL_PUBLIC int mpa_version ( const struct mpa mpa)

Extracts the MPEG audio version from the given header.

Parses the MPEG audio header and returns the version identifier (e.g., MPEG-1, MPEG-2).

Parameters
mpaPointer to the MPEG audio header structure.
Returns
The MPEG version as an integer code.