Merge pull request #1970 from google/dev-v2-r2.0.4

r2.0.4
This commit is contained in:
ojw28 2016-10-20 12:33:44 +01:00 committed by GitHub
commit d79f8f64de
7 changed files with 36 additions and 22 deletions

View File

@ -1,22 +1,27 @@
# Release notes # # Release notes #
### r2.0.4 ###
This release contains important bug fixes. Users of earlier r2.0.x versions
should proactively update to this version.
* Fix crash on Jellybean devices when using playback controls
([#1965](https://github.com/google/ExoPlayer/issues/1965)).
### r2.0.3 ### ### r2.0.3 ###
This release contains important bug fixes. Users of r2.0.0, r2.0.1 and r2.0.2
should proactively update to this version.
* Fixed NullPointerException in ExtractorMediaSource * Fixed NullPointerException in ExtractorMediaSource
([#1914](https://github.com/google/ExoPlayer/issues/1914). ([#1914](https://github.com/google/ExoPlayer/issues/1914)).
* Fixed NullPointerException in HlsMediaPeriod * Fixed NullPointerException in HlsMediaPeriod
([#1907](https://github.com/google/ExoPlayer/issues/1907). ([#1907](https://github.com/google/ExoPlayer/issues/1907)).
* Fixed memory leak in PlaybackControlView * Fixed memory leak in PlaybackControlView
([#1908](https://github.com/google/ExoPlayer/issues/1908). ([#1908](https://github.com/google/ExoPlayer/issues/1908)).
* Fixed strict mode violation when using * Fixed strict mode violation when using
SimpleExoPlayer.setVideoPlayerTextureView(). SimpleExoPlayer.setVideoPlayerTextureView().
* Fixed L3 Widevine provisioning * Fixed L3 Widevine provisioning
([#1925](https://github.com/google/ExoPlayer/issues/1925). ([#1925](https://github.com/google/ExoPlayer/issues/1925)).
* Fixed hiding of controls with use_controller="false" * Fixed hiding of controls with use_controller="false"
([#1919](https://github.com/google/ExoPlayer/issues/1919). ([#1919](https://github.com/google/ExoPlayer/issues/1919)).
* Improvements to Cronet network stack extension. * Improvements to Cronet network stack extension.
* Misc bug fixes. * Misc bug fixes.

View File

@ -35,7 +35,7 @@ allprojects {
releaseRepoName = 'exoplayer' releaseRepoName = 'exoplayer'
releaseUserOrg = 'google' releaseUserOrg = 'google'
releaseGroupId = 'com.google.android.exoplayer' releaseGroupId = 'com.google.android.exoplayer'
releaseVersion = 'r2.0.3' releaseVersion = 'r2.0.4'
releaseWebsite = 'https://github.com/google/ExoPlayer' releaseWebsite = 'https://github.com/google/ExoPlayer'
} }
} }

View File

@ -16,8 +16,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.google.android.exoplayer2.demo" package="com.google.android.exoplayer2.demo"
android:versionCode="2003" android:versionCode="2004"
android:versionName="2.0.3"> android:versionName="2.0.4">
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

View File

@ -23,7 +23,7 @@ public interface ExoPlayerLibraryInfo {
/** /**
* The version of the library, expressed as a string. * The version of the library, expressed as a string.
*/ */
String VERSION = "2.0.3"; String VERSION = "2.0.4";
/** /**
* The version of the library, expressed as an integer. * The version of the library, expressed as an integer.
@ -32,7 +32,7 @@ public interface ExoPlayerLibraryInfo {
* corresponding integer version 1002003 (001-002-003), and "123.45.6" has the corresponding * corresponding integer version 1002003 (001-002-003), and "123.45.6" has the corresponding
* integer version 123045006 (123-045-006). * integer version 123045006 (123-045-006).
*/ */
int VERSION_INT = 2000003; int VERSION_INT = 2000004;
/** /**
* Whether the library was compiled with {@link com.google.android.exoplayer2.util.Assertions} * Whether the library was compiled with {@link com.google.android.exoplayer2.util.Assertions}

View File

@ -44,6 +44,7 @@ import java.util.Collections;
private static final int SUFFIX_SEI_NUT = 40; private static final int SUFFIX_SEI_NUT = 40;
private TrackOutput output; private TrackOutput output;
private SampleReader sampleReader;
private SeiReader seiReader; private SeiReader seiReader;
// State that should not be reset on seek. // State that should not be reset on seek.
@ -56,7 +57,6 @@ import java.util.Collections;
private final NalUnitTargetBuffer pps; private final NalUnitTargetBuffer pps;
private final NalUnitTargetBuffer prefixSei; private final NalUnitTargetBuffer prefixSei;
private final NalUnitTargetBuffer suffixSei; // TODO: Are both needed? private final NalUnitTargetBuffer suffixSei; // TODO: Are both needed?
private final SampleReader sampleReader;
private long totalBytesWritten; private long totalBytesWritten;
// Per packet state that gets reset at the start of each packet. // Per packet state that gets reset at the start of each packet.
@ -72,7 +72,6 @@ import java.util.Collections;
pps = new NalUnitTargetBuffer(PPS_NUT, 128); pps = new NalUnitTargetBuffer(PPS_NUT, 128);
prefixSei = new NalUnitTargetBuffer(PREFIX_SEI_NUT, 128); prefixSei = new NalUnitTargetBuffer(PREFIX_SEI_NUT, 128);
suffixSei = new NalUnitTargetBuffer(SUFFIX_SEI_NUT, 128); suffixSei = new NalUnitTargetBuffer(SUFFIX_SEI_NUT, 128);
sampleReader = new SampleReader(output);
seiWrapper = new ParsableByteArray(); seiWrapper = new ParsableByteArray();
} }
@ -91,6 +90,7 @@ import java.util.Collections;
@Override @Override
public void init(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) { public void init(ExtractorOutput extractorOutput, TrackIdGenerator idGenerator) {
output = extractorOutput.track(idGenerator.getNextId()); output = extractorOutput.track(idGenerator.getNextId());
sampleReader = new SampleReader(output);
seiReader = new SeiReader(extractorOutput.track(idGenerator.getNextId())); seiReader = new SeiReader(extractorOutput.track(idGenerator.getNextId()));
} }

View File

@ -15,6 +15,7 @@
*/ */
package com.google.android.exoplayer2.ui; package com.google.android.exoplayer2.ui;
import android.annotation.TargetApi;
import android.content.Context; import android.content.Context;
import android.content.res.TypedArray; import android.content.res.TypedArray;
import android.os.SystemClock; import android.os.SystemClock;
@ -75,6 +76,7 @@ public class PlaybackControlView extends FrameLayout {
private ExoPlayer player; private ExoPlayer player;
private VisibilityListener visibilityListener; private VisibilityListener visibilityListener;
private boolean isAttachedToWindow;
private boolean dragging; private boolean dragging;
private int rewindMs; private int rewindMs;
private int fastForwardMs; private int fastForwardMs;
@ -264,7 +266,7 @@ public class PlaybackControlView extends FrameLayout {
removeCallbacks(hideAction); removeCallbacks(hideAction);
if (showTimeoutMs > 0) { if (showTimeoutMs > 0) {
hideAtMs = SystemClock.uptimeMillis() + showTimeoutMs; hideAtMs = SystemClock.uptimeMillis() + showTimeoutMs;
if (isAttachedToWindow()) { if (isAttachedToWindow) {
postDelayed(hideAction, showTimeoutMs); postDelayed(hideAction, showTimeoutMs);
} }
} else { } else {
@ -279,7 +281,7 @@ public class PlaybackControlView extends FrameLayout {
} }
private void updatePlayPauseButton() { private void updatePlayPauseButton() {
if (!isVisible() || !isAttachedToWindow()) { if (!isVisible() || !isAttachedToWindow) {
return; return;
} }
boolean playing = player != null && player.getPlayWhenReady(); boolean playing = player != null && player.getPlayWhenReady();
@ -291,7 +293,7 @@ public class PlaybackControlView extends FrameLayout {
} }
private void updateNavigation() { private void updateNavigation() {
if (!isVisible() || !isAttachedToWindow()) { if (!isVisible() || !isAttachedToWindow) {
return; return;
} }
Timeline currentTimeline = player != null ? player.getCurrentTimeline() : null; Timeline currentTimeline = player != null ? player.getCurrentTimeline() : null;
@ -315,7 +317,7 @@ public class PlaybackControlView extends FrameLayout {
} }
private void updateProgress() { private void updateProgress() {
if (!isVisible() || !isAttachedToWindow()) { if (!isVisible() || !isAttachedToWindow) {
return; return;
} }
long duration = player == null ? 0 : player.getDuration(); long duration = player == null ? 0 : player.getDuration();
@ -350,13 +352,18 @@ public class PlaybackControlView extends FrameLayout {
private void setButtonEnabled(boolean enabled, View view) { private void setButtonEnabled(boolean enabled, View view) {
view.setEnabled(enabled); view.setEnabled(enabled);
if (Util.SDK_INT >= 11) { if (Util.SDK_INT >= 11) {
view.setAlpha(enabled ? 1f : 0.3f); setViewAlphaV11(view, enabled ? 1f : 0.3f);
view.setVisibility(VISIBLE); view.setVisibility(VISIBLE);
} else { } else {
view.setVisibility(enabled ? VISIBLE : INVISIBLE); view.setVisibility(enabled ? VISIBLE : INVISIBLE);
} }
} }
@TargetApi(11)
private void setViewAlphaV11(View view, float alpha) {
view.setAlpha(alpha);
}
private String stringForTime(long timeMs) { private String stringForTime(long timeMs) {
if (timeMs == C.TIME_UNSET) { if (timeMs == C.TIME_UNSET) {
timeMs = 0; timeMs = 0;
@ -426,6 +433,7 @@ public class PlaybackControlView extends FrameLayout {
@Override @Override
public void onAttachedToWindow() { public void onAttachedToWindow() {
super.onAttachedToWindow(); super.onAttachedToWindow();
isAttachedToWindow = true;
if (hideAtMs != C.TIME_UNSET) { if (hideAtMs != C.TIME_UNSET) {
long delayMs = hideAtMs - SystemClock.uptimeMillis(); long delayMs = hideAtMs - SystemClock.uptimeMillis();
if (delayMs <= 0) { if (delayMs <= 0) {
@ -440,6 +448,7 @@ public class PlaybackControlView extends FrameLayout {
@Override @Override
public void onDetachedFromWindow() { public void onDetachedFromWindow() {
super.onDetachedFromWindow(); super.onDetachedFromWindow();
isAttachedToWindow = false;
removeCallbacks(updateProgressAction); removeCallbacks(updateProgressAction);
removeCallbacks(hideAction); removeCallbacks(hideAction);
} }

View File

@ -17,8 +17,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
package="com.google.android.exoplayer2.playbacktests" package="com.google.android.exoplayer2.playbacktests"
android:versionCode="2003" android:versionCode="2004"
android:versionName="2.0.3"> android:versionName="2.0.4">
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.WAKE_LOCK"/>