Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
SDK
/
exoplayer
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Pipelines
Wiki
Snippets
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
7e352295
authored
Oct 18, 2016
by
Oliver Woodman
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Propagate ID3 data for MP3
parent
7594f5b7
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
46 additions
and
38 deletions
demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java
library/src/androidTest/java/com/google/android/exoplayer2/metadata/id3/Id3DecoderTest.java
library/src/main/java/com/google/android/exoplayer2/extractor/mp3/Mp3Extractor.java
demo/src/main/java/com/google/android/exoplayer2/demo/EventLogger.java
View file @
7e352295
...
@@ -40,10 +40,10 @@ import com.google.android.exoplayer2.source.AdaptiveMediaSourceEventListener;
...
@@ -40,10 +40,10 @@ import com.google.android.exoplayer2.source.AdaptiveMediaSourceEventListener;
import
com.google.android.exoplayer2.source.ExtractorMediaSource
;
import
com.google.android.exoplayer2.source.ExtractorMediaSource
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroup
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.source.TrackGroupArray
;
import
com.google.android.exoplayer2.trackselection.MappingTrackSelector
;
import
com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo
;
import
com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo
;
import
com.google.android.exoplayer2.trackselection.TrackSelection
;
import
com.google.android.exoplayer2.trackselection.TrackSelection
;
import
com.google.android.exoplayer2.trackselection.TrackSelections
;
import
com.google.android.exoplayer2.trackselection.TrackSelections
;
import
com.google.android.exoplayer2.trackselection.TrackSelector
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
com.google.android.exoplayer2.upstream.DataSpec
;
import
com.google.android.exoplayer2.video.VideoRendererEventListener
;
import
com.google.android.exoplayer2.video.VideoRendererEventListener
;
import
java.io.IOException
;
import
java.io.IOException
;
...
@@ -56,7 +56,7 @@ import java.util.Locale;
...
@@ -56,7 +56,7 @@ import java.util.Locale;
/* package */
final
class
EventLogger
implements
ExoPlayer
.
EventListener
,
/* package */
final
class
EventLogger
implements
ExoPlayer
.
EventListener
,
AudioRendererEventListener
,
VideoRendererEventListener
,
AdaptiveMediaSourceEventListener
,
AudioRendererEventListener
,
VideoRendererEventListener
,
AdaptiveMediaSourceEventListener
,
ExtractorMediaSource
.
EventListener
,
StreamingDrmSessionManager
.
EventListener
,
ExtractorMediaSource
.
EventListener
,
StreamingDrmSessionManager
.
EventListener
,
Mapping
TrackSelector
.
EventListener
<
MappedTrackInfo
>,
MetadataRenderer
.
Output
{
TrackSelector
.
EventListener
<
MappedTrackInfo
>,
MetadataRenderer
.
Output
{
private
static
final
String
TAG
=
"EventLogger"
;
private
static
final
String
TAG
=
"EventLogger"
;
private
static
final
int
MAX_TIMELINE_ITEM_LINES
=
3
;
private
static
final
int
MAX_TIMELINE_ITEM_LINES
=
3
;
...
@@ -183,38 +183,9 @@ import java.util.Locale;
...
@@ -183,38 +183,9 @@ import java.util.Locale;
@Override
@Override
public
void
onMetadata
(
Metadata
metadata
)
{
public
void
onMetadata
(
Metadata
metadata
)
{
Log
.
i
(
TAG
,
"metadata ["
);
Log
.
d
(
TAG
,
"onMetadata ["
);
for
(
int
i
=
0
;
i
<
metadata
.
length
();
i
++)
{
printMetadata
(
metadata
);
Metadata
.
Entry
entry
=
metadata
.
get
(
i
);
Log
.
d
(
TAG
,
"]"
);
if
(
entry
instanceof
TxxxFrame
)
{
TxxxFrame
txxxFrame
=
(
TxxxFrame
)
entry
;
Log
.
i
(
TAG
,
String
.
format
(
" %s: description=%s, value=%s"
,
txxxFrame
.
id
,
txxxFrame
.
description
,
txxxFrame
.
value
));
}
else
if
(
entry
instanceof
PrivFrame
)
{
PrivFrame
privFrame
=
(
PrivFrame
)
entry
;
Log
.
i
(
TAG
,
String
.
format
(
" %s: owner=%s"
,
privFrame
.
id
,
privFrame
.
owner
));
}
else
if
(
entry
instanceof
GeobFrame
)
{
GeobFrame
geobFrame
=
(
GeobFrame
)
entry
;
Log
.
i
(
TAG
,
String
.
format
(
" %s: mimeType=%s, filename=%s, description=%s"
,
geobFrame
.
id
,
geobFrame
.
mimeType
,
geobFrame
.
filename
,
geobFrame
.
description
));
}
else
if
(
entry
instanceof
ApicFrame
)
{
ApicFrame
apicFrame
=
(
ApicFrame
)
entry
;
Log
.
i
(
TAG
,
String
.
format
(
" %s: mimeType=%s, description=%s"
,
apicFrame
.
id
,
apicFrame
.
mimeType
,
apicFrame
.
description
));
}
else
if
(
entry
instanceof
TextInformationFrame
)
{
TextInformationFrame
textInformationFrame
=
(
TextInformationFrame
)
entry
;
Log
.
i
(
TAG
,
String
.
format
(
" %s: description=%s"
,
textInformationFrame
.
id
,
textInformationFrame
.
description
));
}
else
if
(
entry
instanceof
CommentFrame
)
{
CommentFrame
commentFrame
=
(
CommentFrame
)
entry
;
Log
.
i
(
TAG
,
String
.
format
(
" %s: language=%s description=%s"
,
commentFrame
.
id
,
commentFrame
.
language
,
commentFrame
.
description
));
}
else
if
(
entry
instanceof
Id3Frame
)
{
Id3Frame
id3Frame
=
(
Id3Frame
)
entry
;
Log
.
i
(
TAG
,
String
.
format
(
" %s"
,
id3Frame
.
id
));
}
}
Log
.
i
(
TAG
,
"]"
);
}
}
// AudioRendererEventListener
// AudioRendererEventListener
...
@@ -237,8 +208,13 @@ import java.util.Locale;
...
@@ -237,8 +208,13 @@ import java.util.Locale;
@Override
@Override
public
void
onAudioInputFormatChanged
(
Format
format
)
{
public
void
onAudioInputFormatChanged
(
Format
format
)
{
boolean
hasMetadata
=
format
.
metadata
!=
null
;
Log
.
d
(
TAG
,
"audioFormatChanged ["
+
getSessionTimeString
()
+
", "
+
getFormatString
(
format
)
Log
.
d
(
TAG
,
"audioFormatChanged ["
+
getSessionTimeString
()
+
", "
+
getFormatString
(
format
)
+
"]"
);
+
(
hasMetadata
?
""
:
"]"
));
if
(
hasMetadata
)
{
printMetadata
(
format
.
metadata
);
Log
.
d
(
TAG
,
"]"
);
}
}
}
@Override
@Override
...
@@ -359,6 +335,39 @@ import java.util.Locale;
...
@@ -359,6 +335,39 @@ import java.util.Locale;
Log
.
e
(
TAG
,
"internalError ["
+
getSessionTimeString
()
+
", "
+
type
+
"]"
,
e
);
Log
.
e
(
TAG
,
"internalError ["
+
getSessionTimeString
()
+
", "
+
type
+
"]"
,
e
);
}
}
private
void
printMetadata
(
Metadata
metadata
)
{
for
(
int
i
=
0
;
i
<
metadata
.
length
();
i
++)
{
Metadata
.
Entry
entry
=
metadata
.
get
(
i
);
if
(
entry
instanceof
TxxxFrame
)
{
TxxxFrame
txxxFrame
=
(
TxxxFrame
)
entry
;
Log
.
d
(
TAG
,
String
.
format
(
" %s: description=%s, value=%s"
,
txxxFrame
.
id
,
txxxFrame
.
description
,
txxxFrame
.
value
));
}
else
if
(
entry
instanceof
PrivFrame
)
{
PrivFrame
privFrame
=
(
PrivFrame
)
entry
;
Log
.
d
(
TAG
,
String
.
format
(
" %s: owner=%s"
,
privFrame
.
id
,
privFrame
.
owner
));
}
else
if
(
entry
instanceof
GeobFrame
)
{
GeobFrame
geobFrame
=
(
GeobFrame
)
entry
;
Log
.
d
(
TAG
,
String
.
format
(
" %s: mimeType=%s, filename=%s, description=%s"
,
geobFrame
.
id
,
geobFrame
.
mimeType
,
geobFrame
.
filename
,
geobFrame
.
description
));
}
else
if
(
entry
instanceof
ApicFrame
)
{
ApicFrame
apicFrame
=
(
ApicFrame
)
entry
;
Log
.
d
(
TAG
,
String
.
format
(
" %s: mimeType=%s, description=%s"
,
apicFrame
.
id
,
apicFrame
.
mimeType
,
apicFrame
.
description
));
}
else
if
(
entry
instanceof
TextInformationFrame
)
{
TextInformationFrame
textInformationFrame
=
(
TextInformationFrame
)
entry
;
Log
.
d
(
TAG
,
String
.
format
(
" %s: description=%s"
,
textInformationFrame
.
id
,
textInformationFrame
.
description
));
}
else
if
(
entry
instanceof
CommentFrame
)
{
CommentFrame
commentFrame
=
(
CommentFrame
)
entry
;
Log
.
d
(
TAG
,
String
.
format
(
" %s: language=%s description=%s"
,
commentFrame
.
id
,
commentFrame
.
language
,
commentFrame
.
description
));
}
else
if
(
entry
instanceof
Id3Frame
)
{
Id3Frame
id3Frame
=
(
Id3Frame
)
entry
;
Log
.
d
(
TAG
,
String
.
format
(
" %s"
,
id3Frame
.
id
));
}
}
}
private
String
getSessionTimeString
()
{
private
String
getSessionTimeString
()
{
return
getTimeString
(
SystemClock
.
elapsedRealtime
()
-
startTimeMs
);
return
getTimeString
(
SystemClock
.
elapsedRealtime
()
-
startTimeMs
);
}
}
...
...
library/src/androidTest/java/com/google/android/exoplayer2/metadata/id3/Id3DecoderTest.java
View file @
7e352295
...
@@ -16,9 +16,8 @@
...
@@ -16,9 +16,8 @@
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
id3
;
package
com
.
google
.
android
.
exoplayer2
.
metadata
.
id3
;
import
android.test.MoreAsserts
;
import
android.test.MoreAsserts
;
import
com.google.android.exoplayer2.metadata.MetadataDecoderException
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
com.google.android.exoplayer2.metadata.Metadata
;
import
java.util.List
;
import
com.google.android.exoplayer2.metadata.MetadataDecoderException
;
import
junit.framework.TestCase
;
import
junit.framework.TestCase
;
/**
/**
...
...
library/src/main/java/com/google/android/exoplayer2/extractor/mp3/Mp3Extractor.java
View file @
7e352295
...
@@ -163,7 +163,7 @@ public final class Mp3Extractor implements Extractor {
...
@@ -163,7 +163,7 @@ public final class Mp3Extractor implements Extractor {
trackOutput
.
format
(
Format
.
createAudioSampleFormat
(
null
,
synchronizedHeader
.
mimeType
,
null
,
trackOutput
.
format
(
Format
.
createAudioSampleFormat
(
null
,
synchronizedHeader
.
mimeType
,
null
,
Format
.
NO_VALUE
,
MpegAudioHeader
.
MAX_FRAME_SIZE_BYTES
,
synchronizedHeader
.
channels
,
Format
.
NO_VALUE
,
MpegAudioHeader
.
MAX_FRAME_SIZE_BYTES
,
synchronizedHeader
.
channels
,
synchronizedHeader
.
sampleRate
,
Format
.
NO_VALUE
,
gaplessInfoHolder
.
encoderDelay
,
synchronizedHeader
.
sampleRate
,
Format
.
NO_VALUE
,
gaplessInfoHolder
.
encoderDelay
,
gaplessInfoHolder
.
encoderPadding
,
null
,
null
,
0
,
null
,
null
));
gaplessInfoHolder
.
encoderPadding
,
null
,
null
,
0
,
null
,
metadata
));
}
}
return
readSample
(
input
);
return
readSample
(
input
);
}
}
...
...
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