summaryrefslogtreecommitdiff
path: root/tools/avinfo.c
diff options
context:
space:
mode:
authorPali Rohár <pali.rohar@gmail.com>2018-12-23 11:40:16 +0100
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2018-12-28 15:09:41 -0300
commit86c7f72b0d150386f06ca07279dce40591d29921 (patch)
tree0f4271c88f943e522d04f79550bd13507d98e3fb /tools/avinfo.c
parent9f2ccfce8f0beec061554aabf2ff880b03ecdfcc (diff)
downloadbluez-86c7f72b0d150386f06ca07279dce40591d29921.tar.gz
a2dp-codecs & avinfo: Fix parsing MPEG bit rate values
Redefine bitrate field in a2dp_mpeg_t struct in endian neutral way and separate vbr field according to A2DP specification. Define new macros MPEG_GET_BITRATE() and MPEG_SET_BITRATE() for manipulating with bitrate like for a2dp_aac_t struct. And fix meaning of bitrate field. According to A2DP specification, it is bitrate index, not bitrate itself. According to MPEG specification, each MPEG layer have different bitrates for bitrate indexes. Therefore define correctly bitrates for Layers 1, 2 and 3. This fixes problems with parsing bitrate field in a2dp_mpeg_t struct as it was broken due to endianity and it was broken for Layer 1 and 2 as bitrate definitions was for Layer 3.
Diffstat (limited to 'tools/avinfo.c')
-rw-r--r--tools/avinfo.c135
1 files changed, 101 insertions, 34 deletions
diff --git a/tools/avinfo.c b/tools/avinfo.c
index 61bcdab0b..2398cc5e0 100644
--- a/tools/avinfo.c
+++ b/tools/avinfo.c
@@ -303,11 +303,15 @@ static void print_mpeg24(a2dp_aac_t *aac, uint8_t size)
static void print_mpeg12(a2dp_mpeg_t *mpeg, uint8_t size)
{
+ uint16_t bitrate;
+
if (size < sizeof(*mpeg)) {
printf("\tMedia Codec: MPEG12 (broken)\n");
return;
}
+ bitrate = MPEG_GET_BITRATE(*mpeg);
+
printf("\tMedia Codec: MPEG12\n\t\tChannel Modes: ");
if (mpeg->channel_mode & MPEG_CHANNEL_MODE_MONO)
@@ -343,42 +347,105 @@ static void print_mpeg12(a2dp_mpeg_t *mpeg, uint8_t size)
if (mpeg->layer & MPEG_LAYER_MP3)
printf("3 ");
- printf("\n\t\tBit Rate: ");
- if (mpeg->bitrate & MPEG_BIT_RATE_FREE)
- printf("Free format");
- else {
- if (mpeg->bitrate & MPEG_BIT_RATE_32000)
- printf("32kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_40000)
- printf("40kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_48000)
- printf("48kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_56000)
- printf("56kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_64000)
- printf("64kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_80000)
- printf("80kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_96000)
- printf("96kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_112000)
- printf("112kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_128000)
- printf("128kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_160000)
- printf("160kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_192000)
- printf("192kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_224000)
- printf("224kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_256000)
- printf("256kbps ");
- if (mpeg->bitrate & MPEG_BIT_RATE_320000)
- printf("320kbps ");
+ if (bitrate & MPEG_BIT_RATE_FREE) {
+ printf("\n\t\tBit Rate: Free format");
+ } else {
+ if (mpeg->layer & MPEG_LAYER_MP1) {
+ printf("\n\t\tLayer 1 Bit Rate: ");
+ if (bitrate & MPEG_MP1_BIT_RATE_32000)
+ printf("32kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_64000)
+ printf("64kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_96000)
+ printf("96kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_128000)
+ printf("128kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_160000)
+ printf("160kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_192000)
+ printf("192kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_224000)
+ printf("224kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_256000)
+ printf("256kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_320000)
+ printf("320kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_352000)
+ printf("352kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_384000)
+ printf("384kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_416000)
+ printf("416kbps ");
+ if (bitrate & MPEG_MP1_BIT_RATE_448000)
+ printf("448kbps ");
+ }
+
+ if (mpeg->layer & MPEG_LAYER_MP2) {
+ printf("\n\t\tLayer 2 Bit Rate: ");
+ if (bitrate & MPEG_MP2_BIT_RATE_32000)
+ printf("32kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_48000)
+ printf("48kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_56000)
+ printf("56kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_64000)
+ printf("64kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_80000)
+ printf("80kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_96000)
+ printf("96kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_112000)
+ printf("112kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_128000)
+ printf("128kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_160000)
+ printf("160kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_192000)
+ printf("192kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_224000)
+ printf("224kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_256000)
+ printf("256kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_320000)
+ printf("320kbps ");
+ if (bitrate & MPEG_MP2_BIT_RATE_384000)
+ printf("384kbps ");
+ }
+
+ if (mpeg->layer & MPEG_LAYER_MP3) {
+ printf("\n\t\tLayer 3 Bit Rate: ");
+ if (bitrate & MPEG_MP3_BIT_RATE_32000)
+ printf("32kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_40000)
+ printf("40kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_48000)
+ printf("48kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_56000)
+ printf("56kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_64000)
+ printf("64kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_80000)
+ printf("80kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_96000)
+ printf("96kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_112000)
+ printf("112kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_128000)
+ printf("128kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_160000)
+ printf("160kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_192000)
+ printf("192kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_224000)
+ printf("224kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_256000)
+ printf("256kbps ");
+ if (bitrate & MPEG_MP3_BIT_RATE_320000)
+ printf("320kbps ");
+ }
}
- printf("\n\t\tVBR: %s", mpeg->bitrate & MPEG_BIT_RATE_VBR ? "Yes" :
- "No");
+ printf("\n\t\tVBR: %s", mpeg->vbr ? "Yes" : "No");
printf("\n\t\tPayload Format: ");
if (mpeg->mpf)