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
20816675
authored
Oct 24, 2017
by
Drew Hill
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
cleanups for videoframereleasetimehelper
parent
3830307c
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
33 additions
and
47 deletions
library/core/src/main/java/com/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper.java
library/core/src/main/java/com/google/android/exoplayer2/video/VideoFrameReleaseTimeHelper.java
View file @
20816675
...
@@ -24,6 +24,7 @@ import android.os.HandlerThread;
...
@@ -24,6 +24,7 @@ import android.os.HandlerThread;
import
android.os.Message
;
import
android.os.Message
;
import
android.view.Choreographer
;
import
android.view.Choreographer
;
import
android.view.Choreographer.FrameCallback
;
import
android.view.Choreographer.FrameCallback
;
import
android.view.Display
;
import
android.view.WindowManager
;
import
android.view.WindowManager
;
import
com.google.android.exoplayer2.C
;
import
com.google.android.exoplayer2.C
;
...
@@ -33,7 +34,6 @@ import com.google.android.exoplayer2.C;
...
@@ -33,7 +34,6 @@ import com.google.android.exoplayer2.C;
@TargetApi
(
16
)
@TargetApi
(
16
)
public
final
class
VideoFrameReleaseTimeHelper
{
public
final
class
VideoFrameReleaseTimeHelper
{
private
static
final
int
DISPLAY_ID_UNKNOWN
=
-
1
;
private
static
final
double
DISPLAY_REFRESH_RATE_UNKNOWN
=
-
1
;
private
static
final
double
DISPLAY_REFRESH_RATE_UNKNOWN
=
-
1
;
private
static
final
long
CHOREOGRAPHER_SAMPLE_DELAY_MILLIS
=
500
;
private
static
final
long
CHOREOGRAPHER_SAMPLE_DELAY_MILLIS
=
500
;
private
static
final
long
MAX_ALLOWED_DRIFT_NS
=
20000000
;
private
static
final
long
MAX_ALLOWED_DRIFT_NS
=
20000000
;
...
@@ -41,10 +41,10 @@ public final class VideoFrameReleaseTimeHelper {
...
@@ -41,10 +41,10 @@ public final class VideoFrameReleaseTimeHelper {
private
static
final
long
VSYNC_OFFSET_PERCENTAGE
=
80
;
private
static
final
long
VSYNC_OFFSET_PERCENTAGE
=
80
;
private
static
final
int
MIN_FRAMES_FOR_ADJUSTMENT
=
6
;
private
static
final
int
MIN_FRAMES_FOR_ADJUSTMENT
=
6
;
private
DisplayManager
.
DisplayListener
displayListener
=
null
;
private
Context
context
=
null
;
private
Context
context
=
null
;
private
VSyncSampler
vsyncSampler
=
null
;
private
final
DefaultDisplayListener
defaultDisplayListener
;
private
final
VSyncSampler
vsyncSampler
;
private
final
boolean
useDefaultDisplayVsync
;
private
final
boolean
useDefaultDisplayVsync
;
private
long
vsyncDurationNs
=
-
1
;
// Value unused.
private
long
vsyncDurationNs
=
-
1
;
// Value unused.
private
long
vsyncOffsetNs
=
-
1
;
// Value unused.
private
long
vsyncOffsetNs
=
-
1
;
// Value unused.
...
@@ -63,7 +63,10 @@ public final class VideoFrameReleaseTimeHelper {
...
@@ -63,7 +63,10 @@ public final class VideoFrameReleaseTimeHelper {
* the default display's vsync signal.
* the default display's vsync signal.
*/
*/
public
VideoFrameReleaseTimeHelper
()
{
public
VideoFrameReleaseTimeHelper
()
{
this
(
DISPLAY_REFRESH_RATE_UNKNOWN
);
defaultDisplayListener
=
null
;
useDefaultDisplayVsync
=
false
;
vsyncSampler
=
null
;
context
=
null
;
}
}
/**
/**
...
@@ -73,16 +76,13 @@ public final class VideoFrameReleaseTimeHelper {
...
@@ -73,16 +76,13 @@ public final class VideoFrameReleaseTimeHelper {
* @param context A context from which information about the default display can be retrieved.
* @param context A context from which information about the default display can be retrieved.
*/
*/
public
VideoFrameReleaseTimeHelper
(
Context
context
)
{
public
VideoFrameReleaseTimeHelper
(
Context
context
)
{
this
(
getDefaultDisplayRefreshRate
(
context
));
this
.
context
=
context
.
getApplicationContext
();
this
.
context
=
context
.
getApplicationContext
();
}
defaultDisplayListener
=
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
?
new
DefaultDisplayListener
(
context
)
:
null
;
private
VideoFrameReleaseTimeHelper
(
double
defaultDisplayRefreshRate
)
{
useDefaultDisplayVsync
=
true
;
useDefaultDisplayVsync
=
defaultDisplayRefreshRate
!=
DISPLAY_REFRESH_RATE_UNKNOWN
;
if
(
useDefaultDisplayVsync
)
{
vsyncSampler
=
VSyncSampler
.
getInstance
();
vsyncSampler
=
VSyncSampler
.
getInstance
();
}
}
}
/**
/**
* Enables the helper.
* Enables the helper.
...
@@ -92,7 +92,8 @@ public final class VideoFrameReleaseTimeHelper {
...
@@ -92,7 +92,8 @@ public final class VideoFrameReleaseTimeHelper {
if
(
useDefaultDisplayVsync
)
{
if
(
useDefaultDisplayVsync
)
{
vsyncSampler
.
addObserver
();
vsyncSampler
.
addObserver
();
setSync
(
getDefaultDisplayRefreshRate
(
context
));
setSync
(
getDefaultDisplayRefreshRate
(
context
));
registerDisplayListener
();
if
(
defaultDisplayListener
!=
null
)
defaultDisplayListener
.
register
();
}
}
}
}
...
@@ -102,39 +103,15 @@ public final class VideoFrameReleaseTimeHelper {
...
@@ -102,39 +103,15 @@ public final class VideoFrameReleaseTimeHelper {
public
void
disable
()
{
public
void
disable
()
{
if
(
useDefaultDisplayVsync
)
{
if
(
useDefaultDisplayVsync
)
{
vsyncSampler
.
removeObserver
();
vsyncSampler
.
removeObserver
();
unregisterDisplayListener
();
if
(
defaultDisplayListener
!=
null
)
}
defaultDisplayListener
.
unregister
();
}
private
void
registerDisplayListener
()
{
if
(
displayListener
==
null
&&
context
!=
null
&&
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
DisplayManager
displayManager
=
context
.
getSystemService
(
DisplayManager
.
class
);
if
(
displayManager
!=
null
)
{
displayListener
=
new
DefaultDisplayListener
(
context
);
displayManager
.
registerDisplayListener
(
displayListener
,
null
);
}
}
}
private
void
unregisterDisplayListener
()
{
if
(
context
!=
null
&&
displayListener
!=
null
&&
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
M
)
{
DisplayManager
displayManager
=
context
.
getSystemService
(
DisplayManager
.
class
);
if
(
displayManager
!=
null
)
{
displayManager
.
unregisterDisplayListener
(
displayListener
);
displayListener
=
null
;
}
}
}
}
}
private
void
setSync
(
double
defaultDisplayRefreshRate
)
{
private
void
setSync
(
double
defaultDisplayRefreshRate
)
{
if
(
useDefaultDisplayVsync
)
{
vsyncDurationNs
=
(
long
)
(
C
.
NANOS_PER_SECOND
/
defaultDisplayRefreshRate
);
vsyncDurationNs
=
(
long
)
(
C
.
NANOS_PER_SECOND
/
defaultDisplayRefreshRate
);
vsyncOffsetNs
=
(
vsyncDurationNs
*
VSYNC_OFFSET_PERCENTAGE
)
/
100
;
vsyncOffsetNs
=
(
vsyncDurationNs
*
VSYNC_OFFSET_PERCENTAGE
)
/
100
;
}
}
}
/**
/**
* Adjusts a frame release timestamp.
* Adjusts a frame release timestamp.
...
@@ -234,12 +211,6 @@ public final class VideoFrameReleaseTimeHelper {
...
@@ -234,12 +211,6 @@ public final class VideoFrameReleaseTimeHelper {
return
snappedAfterDiff
<
snappedBeforeDiff
?
snappedAfterNs
:
snappedBeforeNs
;
return
snappedAfterDiff
<
snappedBeforeDiff
?
snappedAfterNs
:
snappedBeforeNs
;
}
}
private
static
int
getDefaultDisplayId
(
Context
context
)
{
WindowManager
manager
=
(
WindowManager
)
context
.
getSystemService
(
Context
.
WINDOW_SERVICE
);
return
manager
!=
null
&&
manager
.
getDefaultDisplay
()
!=
null
?
manager
.
getDefaultDisplay
().
getDisplayId
()
:
DISPLAY_ID_UNKNOWN
;
}
private
static
double
getDefaultDisplayRefreshRate
(
Context
context
)
{
private
static
double
getDefaultDisplayRefreshRate
(
Context
context
)
{
WindowManager
manager
=
(
WindowManager
)
context
.
getSystemService
(
Context
.
WINDOW_SERVICE
);
WindowManager
manager
=
(
WindowManager
)
context
.
getSystemService
(
Context
.
WINDOW_SERVICE
);
return
manager
!=
null
&&
manager
.
getDefaultDisplay
()
!=
null
?
return
manager
!=
null
&&
manager
.
getDefaultDisplay
()
!=
null
?
...
@@ -341,12 +312,16 @@ public final class VideoFrameReleaseTimeHelper {
...
@@ -341,12 +312,16 @@ public final class VideoFrameReleaseTimeHelper {
}
}
@TargetApi
(
17
)
@TargetApi
(
Build
.
VERSION_CODES
.
JELLY_BEAN_MR1
)
private
class
DefaultDisplayListener
implements
DisplayManager
.
DisplayListener
{
private
class
DefaultDisplayListener
implements
DisplayManager
.
DisplayListener
{
private
final
Context
context
;
private
final
Context
context
;
private
final
DisplayManager
displayManager
;
DefaultDisplayListener
(
Context
context
)
{
DefaultDisplayListener
(
Context
context
)
{
this
.
context
=
context
;
this
.
context
=
context
;
displayManager
=
context
!=
null
?
(
DisplayManager
)
context
.
getSystemService
(
Context
.
DISPLAY_SERVICE
)
:
null
;
}
}
@Override
@Override
...
@@ -359,12 +334,23 @@ public final class VideoFrameReleaseTimeHelper {
...
@@ -359,12 +334,23 @@ public final class VideoFrameReleaseTimeHelper {
@Override
@Override
public
void
onDisplayChanged
(
int
displayId
)
{
public
void
onDisplayChanged
(
int
displayId
)
{
final
int
defaultDisplayId
=
getDefaultDisplayId
(
context
);
if
(
displayId
==
Display
.
DEFAULT_DISPLAY
)
{
if
(
displayId
==
defaultDisplayId
||
defaultDisplayId
==
DISPLAY_ID_UNKNOWN
)
{
setSync
(
getDefaultDisplayRefreshRate
(
context
));
setSync
(
getDefaultDisplayRefreshRate
(
context
));
}
}
}
}
public
void
register
()
{
if
(
displayManager
!=
null
&&
context
!=
null
)
{
// context is used on callback
displayManager
.
registerDisplayListener
(
this
,
null
);
}
}
public
void
unregister
()
{
if
(
displayManager
!=
null
)
{
displayManager
.
unregisterDisplayListener
(
this
);
}
}
}
}
}
}
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