Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
1523e8a8
Commit
1523e8a8
authored
Jul 25, 2006
by
J. Alexander Treuman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Parse lame tag for encoder delay/padding so we can later implement gapless
git-svn-id:
https://svn.musicpd.org/mpd/trunk@4460
09075e82-0dd4-0310-85a5-a0d7c8717e4f
parent
a686436c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
67 additions
and
0 deletions
+67
-0
mp3_plugin.c
src/inputPlugins/mp3_plugin.c
+67
-0
No files found.
src/inputPlugins/mp3_plugin.c
View file @
1523e8a8
...
@@ -455,6 +455,18 @@ enum {
...
@@ -455,6 +455,18 @@ enum {
XING_SCALE
=
0x00000008L
,
XING_SCALE
=
0x00000008L
,
};
};
struct
lame
{
char
encoder
[
10
];
/* 9 byte encoder name/version ("LAME3.97b") */
#if 0
/* See related comment in parse_lame() */
float peak; /* replaygain peak */
float trackGain; /* replaygain track gain */
float albumGain; /* replaygain album gain */
#endif
int
encoderDelay
;
/* # of added samples at start of mp3 */
int
encoderPadding
;
/* # of added samples at end of mp3 */
};
static
int
parse_xing
(
struct
xing
*
xing
,
struct
mad_bitptr
*
ptr
,
int
*
oldbitlen
)
static
int
parse_xing
(
struct
xing
*
xing
,
struct
mad_bitptr
*
ptr
,
int
*
oldbitlen
)
{
{
unsigned
long
bits
;
unsigned
long
bits
;
...
@@ -528,13 +540,67 @@ static int parse_xing(struct xing *xing, struct mad_bitptr *ptr, int *oldbitlen)
...
@@ -528,13 +540,67 @@ static int parse_xing(struct xing *xing, struct mad_bitptr *ptr, int *oldbitlen)
return
0
;
return
0
;
}
}
static
int
parse_lame
(
struct
lame
*
lame
,
struct
mad_bitptr
*
ptr
,
int
*
bitlen
)
{
int
i
;
/* Unlike the xing header, the lame tag has a fixed length. Fail if
* not all 36 bytes (288 bits) are there. */
if
(
*
bitlen
<
288
)
return
0
;
for
(
i
=
0
;
i
<
9
;
i
++
)
lame
->
encoder
[
i
]
=
(
char
)
mad_bit_read
(
ptr
,
8
);
lame
->
encoder
[
9
]
=
'\0'
;
/* This is technically incorrect, since the encoder might not be lame.
* But there's no other way to determine if this is a lame tag, and we
* wouldn't want to go reading a tag that's not there. */
if
(
strncmp
(
lame
->
encoder
,
"LAME"
,
4
)
!=
0
)
return
0
;
#if 0
/* Apparently lame versions <3.97b1 do not calculate replaygain. I'm
* using lame 3.97b2, and while it does calculate replaygain, it's
* setting the values to 0. Using --replaygain-(fast|accurate) doesn't
* make any difference. Leaving this code unused until we have a way
* of testing it. -- jat */
mad_bit_read(ptr, 16);
mad_bit_read(ptr, 32); /* peak */
mad_bit_read(ptr, 6); /* header */
bits = mad_bit_read(ptr, 1); /* sign bit */
lame->trackGain = mad_bit_read(ptr, 9); /* gain*10 */
lame->trackGain = (bits ? -lame->trackGain : lame->trackGain) / 10;
mad_bit_read(ptr, 6); /* header */
bits = mad_bit_read(ptr, 1); /* sign bit */
lame->albumGain = mad_bit_read(ptr, 9); /* gain*10 */
lame->albumGain = (bits ? -lame->albumGain : lame->albumGain) / 10;
mad_bit_read(ptr, 16);
#else
mad_bit_read
(
ptr
,
96
);
#endif
lame
->
encoderDelay
=
mad_bit_read
(
ptr
,
12
);
lame
->
encoderPadding
=
mad_bit_read
(
ptr
,
12
);
mad_bit_read
(
ptr
,
96
);
*
bitlen
-=
288
;
return
1
;
}
static
int
decodeFirstFrame
(
mp3DecodeData
*
data
,
DecoderControl
*
dc
,
static
int
decodeFirstFrame
(
mp3DecodeData
*
data
,
DecoderControl
*
dc
,
MpdTag
**
tag
,
ReplayGainInfo
**
replayGainInfo
)
MpdTag
**
tag
,
ReplayGainInfo
**
replayGainInfo
)
{
{
struct
xing
xing
;
struct
xing
xing
;
struct
lame
lame
;
struct
mad_bitptr
ptr
;
struct
mad_bitptr
ptr
;
int
bitlen
;
int
bitlen
;
int
found_xing
;
int
found_xing
;
int
found_lame
;
int
ret
;
int
ret
;
int
skip
;
int
skip
;
...
@@ -557,6 +623,7 @@ static int decodeFirstFrame(mp3DecodeData * data, DecoderControl * dc,
...
@@ -557,6 +623,7 @@ static int decodeFirstFrame(mp3DecodeData * data, DecoderControl * dc,
bitlen
=
data
->
stream
.
anc_bitlen
;
bitlen
=
data
->
stream
.
anc_bitlen
;
found_xing
=
parse_xing
(
&
xing
,
&
ptr
,
&
bitlen
);
found_xing
=
parse_xing
(
&
xing
,
&
ptr
,
&
bitlen
);
found_lame
=
(
found_xing
?
parse_lame
(
&
lame
,
&
ptr
,
&
bitlen
)
:
0
);
if
(
found_xing
)
{
if
(
found_xing
)
{
if
(
xing
.
flags
&
XING_FRAMES
)
{
if
(
xing
.
flags
&
XING_FRAMES
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment