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
5ebaafde
authored
Jan 22, 2022
by
Dustin
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
Fix Avc Seek
parent
4c76bf1a
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
17 additions
and
6 deletions
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AvcAviTrack.java
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviSeekMap.java
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviTrack.java
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AvcAviTrack.java
View file @
5ebaafde
...
@@ -21,7 +21,7 @@ public class AvcAviTrack extends AviTrack{
...
@@ -21,7 +21,7 @@ public class AvcAviTrack extends AviTrack{
private
NalUnitUtil
.
SpsData
spsData
;
private
NalUnitUtil
.
SpsData
spsData
;
//The frame as a calculated from the picCount
//The frame as a calculated from the picCount
private
int
picFrame
;
private
int
picFrame
;
private
int
lastPic
Frame
;
private
int
lastPic
Count
;
//Largest picFrame, used when we hit an I frame
//Largest picFrame, used when we hit an I frame
private
int
maxPicFrame
=-
1
;
private
int
maxPicFrame
=-
1
;
private
int
maxPicCount
;
private
int
maxPicCount
;
...
@@ -56,7 +56,7 @@ public class AvcAviTrack extends AviTrack{
...
@@ -56,7 +56,7 @@ public class AvcAviTrack extends AviTrack{
}
}
private
void
processIdr
()
{
private
void
processIdr
()
{
lastPic
Frame
=
0
;
lastPic
Count
=
0
;
picFrame
=
maxPicFrame
+
1
;
picFrame
=
maxPicFrame
+
1
;
}
}
...
@@ -97,6 +97,13 @@ public class AvcAviTrack extends AviTrack{
...
@@ -97,6 +97,13 @@ public class AvcAviTrack extends AviTrack{
return
picFrame
;
return
picFrame
;
}
}
@Override
void
seekFrame
(
int
frame
)
{
super
.
seekFrame
(
frame
);
this
.
picFrame
=
frame
;
lastPicCount
=
0
;
}
int
getPicOrderCountLsb
(
byte
[]
peek
)
{
int
getPicOrderCountLsb
(
byte
[]
peek
)
{
if
(
peek
[
3
]
!=
1
)
{
if
(
peek
[
3
]
!=
1
)
{
return
0
;
return
0
;
...
@@ -136,15 +143,15 @@ public class AvcAviTrack extends AviTrack{
...
@@ -136,15 +143,15 @@ public class AvcAviTrack extends AviTrack{
case
2
:
case
2
:
case
3
:
case
3
:
case
4
:
{
case
4
:
{
final
int
myP
icCount
=
getPicOrderCountLsb
(
peek
);
final
int
p
icCount
=
getPicOrderCountLsb
(
peek
);
int
delta
=
myPicCount
-
lastPicFrame
;
int
delta
=
picCount
-
lastPicCount
;
if
(
delta
<
negHalf
)
{
if
(
delta
<
negHalf
)
{
delta
+=
maxPicCount
;
delta
+=
maxPicCount
;
}
else
if
(
delta
>
posHalf
)
{
}
else
if
(
delta
>
posHalf
)
{
delta
-=
maxPicCount
;
delta
-=
maxPicCount
;
}
}
picFrame
+=
delta
/
2
;
picFrame
+=
delta
/
2
;
lastPic
Frame
=
myP
icCount
;
lastPic
Count
=
p
icCount
;
if
(
maxPicFrame
<
picFrame
)
{
if
(
maxPicFrame
<
picFrame
)
{
maxPicFrame
=
picFrame
;
maxPicFrame
=
picFrame
;
}
}
...
...
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviSeekMap.java
View file @
5ebaafde
...
@@ -63,7 +63,7 @@ public class AviSeekMap implements SeekMap {
...
@@ -63,7 +63,7 @@ public class AviSeekMap implements SeekMap {
public
void
setFrames
(
final
long
position
,
final
long
timeUs
,
final
SparseArray
<
AviTrack
>
idTrackMap
)
{
public
void
setFrames
(
final
long
position
,
final
long
timeUs
,
final
SparseArray
<
AviTrack
>
idTrackMap
)
{
final
int
seekFrameIndex
=
getSeekFrameIndex
(
timeUs
);
final
int
seekFrameIndex
=
getSeekFrameIndex
(
timeUs
);
videoTrack
.
frame
=
seekFrameIndex
*
seekIndexFactor
;
videoTrack
.
seekFrame
(
seekFrameIndex
*
seekIndexFactor
)
;
for
(
int
i
=
0
;
i
<
audioIdMap
.
size
();
i
++)
{
for
(
int
i
=
0
;
i
<
audioIdMap
.
size
();
i
++)
{
final
int
audioId
=
audioIdMap
.
keyAt
(
i
);
final
int
audioId
=
audioIdMap
.
keyAt
(
i
);
final
int
[]
video2AudioFrameMap
=
audioIdMap
.
get
(
audioId
);
final
int
[]
video2AudioFrameMap
=
audioIdMap
.
get
(
audioId
);
...
...
library/extractor/src/main/java/com/google/android/exoplayer2/extractor/avi/AviTrack.java
View file @
5ebaafde
...
@@ -95,6 +95,10 @@ public class AviTrack {
...
@@ -95,6 +95,10 @@ public class AviTrack {
return
frame
;
return
frame
;
}
}
void
seekFrame
(
int
frame
)
{
this
.
frame
=
frame
;
}
public
boolean
newChunk
(
int
tag
,
int
size
,
ExtractorInput
input
)
throws
IOException
{
public
boolean
newChunk
(
int
tag
,
int
size
,
ExtractorInput
input
)
throws
IOException
{
final
int
remaining
=
size
-
trackOutput
.
sampleData
(
input
,
size
,
false
);
final
int
remaining
=
size
-
trackOutput
.
sampleData
(
input
,
size
,
false
);
if
(
remaining
==
0
)
{
if
(
remaining
==
0
)
{
...
...
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