From 84426ee5311a5988400ee6c1f1a54f6867635c9f Mon Sep 17 00:00:00 2001 From: Zhang Rui Date: Fri, 21 Aug 2015 16:48:39 +0800 Subject: [PATCH] android/ui: toggle render --- .../sample/activities/VideoActivity.java | 15 +- .../sample/widget/media/IRenderView.java | 4 + .../sample/widget/media/IjkVideoView.java | 160 +++++++++++++++--- .../sample/widget/media/MeasureHelper.java | 2 + .../widget/media/SurfaceRenderView.java | 10 ++ .../widget/media/TextureRenderView.java | 10 ++ .../drawable-hdpi/ic_action_dark_filter.png | Bin 0 -> 767 bytes .../drawable-mdpi/ic_action_dark_filter.png | Bin 0 -> 490 bytes .../drawable-xhdpi/ic_action_dark_filter.png | Bin 0 -> 929 bytes .../drawable-xxhdpi/ic_action_dark_filter.png | Bin 0 -> 1539 bytes .../ic_action_dark_filter.png | Bin 0 -> 2128 bytes .../src/main/res/layout/activity_player.xml | 2 +- .../sample/src/main/res/menu/menu_player.xml | 7 +- .../sample/src/main/res/values/strings.xml | 6 + 14 files changed, 191 insertions(+), 25 deletions(-) create mode 100755 android/ijkplayer/sample/src/main/res/drawable-hdpi/ic_action_dark_filter.png create mode 100755 android/ijkplayer/sample/src/main/res/drawable-mdpi/ic_action_dark_filter.png create mode 100755 android/ijkplayer/sample/src/main/res/drawable-xhdpi/ic_action_dark_filter.png create mode 100755 android/ijkplayer/sample/src/main/res/drawable-xxhdpi/ic_action_dark_filter.png create mode 100755 android/ijkplayer/sample/src/main/res/drawable-xxxhdpi/ic_action_dark_filter.png diff --git a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/activities/VideoActivity.java b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/activities/VideoActivity.java index 31d3f09d..46810222 100644 --- a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/activities/VideoActivity.java +++ b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/activities/VideoActivity.java @@ -38,7 +38,7 @@ public class VideoActivity extends AppCompatActivity { private AndroidMediaController mMediaController; private IjkVideoView mVideoView; - private TextView mScaleModeTextView; + private TextView mToastTextView; public static Intent newIntent(Context context, String videoPath, String videoTitle) { Intent intent = new Intent(context, VideoActivity.class); @@ -73,7 +73,7 @@ public class VideoActivity extends AppCompatActivity { mMediaController = new AndroidMediaController(this, false); mMediaController.setSupportActionBar(actionBar); - mScaleModeTextView = (TextView) findViewById(R.id.scale_mode_text_view); + mToastTextView = (TextView) findViewById(R.id.toast_text_view); // init player IjkMediaPlayer.loadLibrariesOnce(null); @@ -90,6 +90,7 @@ public class VideoActivity extends AppCompatActivity { super.onStop(); mVideoView.stopPlayback(); + mVideoView.release(true); IjkMediaPlayer.native_profileEnd(); } @@ -105,8 +106,14 @@ public class VideoActivity extends AppCompatActivity { if (id == R.id.action_toggle_ratio) { int aspectRatio = mVideoView.toggleAspectRatio(); String aspectRatioText = MeasureHelper.getAspectRatioText(this, aspectRatio); - mScaleModeTextView.setText(aspectRatioText); - mMediaController.showOnce(mScaleModeTextView); + mToastTextView.setText(aspectRatioText); + mMediaController.showOnce(mToastTextView); + return true; + } else if (id == R.id.action_toggle_render) { + int render = mVideoView.toggleRender(); + String renderText = IjkVideoView.getRenderText(this, render); + mToastTextView.setText(renderText); + mMediaController.showOnce(mToastTextView); return true; } diff --git a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/IRenderView.java b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/IRenderView.java index 31100207..310ea344 100644 --- a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/IRenderView.java +++ b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/IRenderView.java @@ -23,6 +23,8 @@ import android.view.Surface; import android.view.SurfaceHolder; import android.view.View; +import tv.danmaku.ijk.media.player.IMediaPlayer; + public interface IRenderView { static final int AR_ASPECT_FIT_PARENT = 0; // without clip static final int AR_ASPECT_FILL_PARENT = 1; // may clip @@ -44,6 +46,8 @@ public interface IRenderView { void removeRenderCallback(@NonNull IRenderCallback callback); interface ISurfaceHolder { + void bindToMediaPlayer(IMediaPlayer mp); + @NonNull IRenderView getRenderView(); diff --git a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/IjkVideoView.java b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/IjkVideoView.java index adf42f54..c24d5f04 100644 --- a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/IjkVideoView.java +++ b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/IjkVideoView.java @@ -37,6 +37,7 @@ import android.widget.FrameLayout; import android.widget.MediaController; import java.io.IOException; +import java.util.Locale; import java.util.Map; import tv.danmaku.ijk.media.player.AndroidMediaPlayer; @@ -132,23 +133,11 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl mSettings = new Settings(mAppContext); if (mSettings.getUsingTextureView() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - TextureRenderView renderView = new TextureRenderView(context); - mRenderView = renderView; + setRender(RENDER_TEXTURE_VIEW); } else { - SurfaceRenderView renderView = new SurfaceRenderView(context); - mRenderView = renderView; + setRender(RENDER_SURFACE_VIEW); } - View renderView = mRenderView.getView(); - FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( - FrameLayout.LayoutParams.WRAP_CONTENT, - FrameLayout.LayoutParams.WRAP_CONTENT, - Gravity.CENTER); - renderView.setLayoutParams(lp); - addView(renderView); - - mRenderView.addRenderCallback(mSHCallback); - mVideoWidth = 0; mVideoHeight = 0; // REMOVED: getHolder().addCallback(mSHCallback); @@ -161,6 +150,58 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl mTargetState = STATE_IDLE; } + public void setRenderView(IRenderView renderView) { + if (mRenderView != null) { + View renderUIView = mRenderView.getView(); + mRenderView.removeRenderCallback(mSHCallback); + mRenderView = null; + removeView(renderUIView); + if (mMediaPlayer != null) + mMediaPlayer.setDisplay(null); + } + + if (renderView == null) + return; + + mRenderView = renderView; + renderView.setAspectRatio(mCurrentAspectRatio); + if (mVideoWidth > 0 && mVideoHeight > 0) + renderView.setVideoSize(mVideoWidth, mVideoHeight); + if (mVideoSarNum > 0 && mVideoHeight > 0) + renderView.setVideoSampleAspectRatio(mVideoWidth, mVideoHeight); + + View renderUIView = mRenderView.getView(); + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.WRAP_CONTENT, + FrameLayout.LayoutParams.WRAP_CONTENT, + Gravity.CENTER); + renderUIView.setLayoutParams(lp); + addView(renderUIView); + + mRenderView.addRenderCallback(mSHCallback); + } + + public void setRender(int render) { + switch (render) { + case RENDER_NONE: + setRenderView(null); + break; + case RENDER_TEXTURE_VIEW: { + TextureRenderView renderView = new TextureRenderView(getContext()); + setRenderView(renderView); + break; + } + case RENDER_SURFACE_VIEW: { + SurfaceRenderView renderView = new SurfaceRenderView(getContext()); + setRenderView(renderView); + break; + } + default: + Log.e(TAG, String.format(Locale.getDefault(), "invalid render %d\n", render)); + break; + } + } + /** * Sets video path. * @@ -521,9 +562,26 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl } // REMOVED: mSHCallback + private void bindSurfaceHolder(IMediaPlayer mp, IRenderView.ISurfaceHolder holder) { + if (mp == null) + return; + + if (holder == null) { + mp.setDisplay(null); + return; + } + + holder.bindToMediaPlayer(mp); + } + IRenderView.IRenderCallback mSHCallback = new IRenderView.IRenderCallback() { @Override public void onSurfaceChanged(@NonNull IRenderView.ISurfaceHolder holder, int format, int w, int h) { + if (holder == null || holder.getRenderView() != mRenderView) { + Log.e(TAG, "onSurfaceChanged: unmatched render callback\n"); + return; + } + mSurfaceWidth = w; mSurfaceHeight = h; boolean isValidState = (mTargetState == STATE_PLAYING); @@ -538,23 +596,42 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl @Override public void onSurfaceCreated(@NonNull IRenderView.ISurfaceHolder holder, int width, int height) { + if (holder == null || holder.getRenderView() != mRenderView) { + Log.e(TAG, "onSurfaceCreated: unmatched render callback\n"); + return; + } + mSurfaceHolder = holder; - openVideo(); + if (mMediaPlayer != null) + bindSurfaceHolder(mMediaPlayer, holder); + else + openVideo(); } @Override public void onSurfaceDestroyed(@NonNull IRenderView.ISurfaceHolder holder) { + if (holder == null && holder.getRenderView() != mRenderView) { + Log.e(TAG, "onSurfaceDestroyed: unmatched render callback\n"); + return; + } + // after we return from this we can't use the surface any more mSurfaceHolder = null; - if (mMediaController != null) mMediaController.hide(); - release(true); + // REMOVED: if (mMediaController != null) mMediaController.hide(); + // REMOVED: release(true); + releaseWithoutStop(); } }; + public void releaseWithoutStop() { + if (mMediaPlayer != null) + mMediaPlayer.setDisplay(null); + } + /* * release the media player in any state */ - private void release(boolean cleartargetstate) { + public void release(boolean cleartargetstate) { if (mMediaPlayer != null) { mMediaPlayer.reset(); mMediaPlayer.release(); @@ -757,7 +834,52 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl mCurrentAspectRatioIndex %= s_allAspectRatio.length; mCurrentAspectRatio = s_allAspectRatio[mCurrentAspectRatioIndex]; - mRenderView.setAspectRatio(mCurrentAspectRatio); + if (mRenderView != null) + mRenderView.setAspectRatio(mCurrentAspectRatio); return mCurrentAspectRatio; } + + //------------------------- + // Extend: Render + //------------------------- + public static final int RENDER_NONE = 0; + public static final int RENDER_SURFACE_VIEW = 1; + public static final int RENDER_TEXTURE_VIEW = 2; + + private static final int[] s_allRender = { + RENDER_SURFACE_VIEW, + // RENDER_TEXTURE_VIEW, + RENDER_NONE + }; + private int mCurrentRenderIndex = 0; + private int mCurrentRender = s_allRender[0]; + + public int toggleRender() { + mCurrentRenderIndex++; + mCurrentRenderIndex %= s_allRender.length; + + mCurrentRender = s_allRender[mCurrentRenderIndex]; + setRender(mCurrentRender); + return mCurrentRender; + } + + @NonNull + public static String getRenderText(Context context, int render) { + String text; + switch (render) { + case RENDER_NONE: + text = context.getString(R.string.VideoView_render_none); + break; + case RENDER_SURFACE_VIEW: + text = context.getString(R.string.VideoView_render_surface_view); + break; + case RENDER_TEXTURE_VIEW: + text = context.getString(R.string.VideoView_render_texture_view); + break; + default: + text = context.getString(R.string.N_A); + break; + } + return text; + } } diff --git a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/MeasureHelper.java b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/MeasureHelper.java index 60b280dd..6d1ce815 100644 --- a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/MeasureHelper.java +++ b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/MeasureHelper.java @@ -17,6 +17,7 @@ package tv.danmaku.ijk.media.sample.widget.media; import android.content.Context; +import android.support.annotation.NonNull; import android.view.View; import java.lang.ref.WeakReference; @@ -201,6 +202,7 @@ public final class MeasureHelper { mCurrentAspectRatio = aspectRatio; } + @NonNull public static String getAspectRatioText(Context context, int aspectRatio) { String text; switch (aspectRatio) { diff --git a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/SurfaceRenderView.java b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/SurfaceRenderView.java index ae2105b8..644ec607 100644 --- a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/SurfaceRenderView.java +++ b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/SurfaceRenderView.java @@ -34,6 +34,8 @@ import java.lang.ref.WeakReference; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import tv.danmaku.ijk.media.player.IMediaPlayer; + public class SurfaceRenderView extends SurfaceView implements IRenderView { private MeasureHelper mMeasureHelper; @@ -116,6 +118,12 @@ public class SurfaceRenderView extends SurfaceView implements IRenderView { mSurfaceHolder = surfaceHolder; } + public void bindToMediaPlayer(IMediaPlayer mp) { + if (mp != null) { + mp.setDisplay(mSurfaceHolder); + } + } + @NonNull @Override public IRenderView getRenderView() { @@ -137,6 +145,8 @@ public class SurfaceRenderView extends SurfaceView implements IRenderView { @Nullable @Override public Surface openSurface() { + if (mSurfaceHolder == null) + return null; return mSurfaceHolder.getSurface(); } } diff --git a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/TextureRenderView.java b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/TextureRenderView.java index 8e34553e..69badab2 100644 --- a/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/TextureRenderView.java +++ b/android/ijkplayer/sample/src/main/java/tv/danmaku/ijk/media/sample/widget/media/TextureRenderView.java @@ -34,6 +34,8 @@ import java.lang.ref.WeakReference; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import tv.danmaku.ijk.media.player.IMediaPlayer; + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public class TextureRenderView extends TextureView implements IRenderView { private MeasureHelper mMeasureHelper; @@ -114,6 +116,12 @@ public class TextureRenderView extends TextureView implements IRenderView { mSurfaceTexture = surfaceTexture; } + public void bindToMediaPlayer(IMediaPlayer mp) { + if (mp != null) { + mp.setSurface(openSurface()); + } + } + @NonNull @Override public IRenderView getRenderView() { @@ -135,6 +143,8 @@ public class TextureRenderView extends TextureView implements IRenderView { @Nullable @Override public Surface openSurface() { + if (mSurfaceTexture == null) + return null; return new Surface(mSurfaceTexture); } } diff --git a/android/ijkplayer/sample/src/main/res/drawable-hdpi/ic_action_dark_filter.png b/android/ijkplayer/sample/src/main/res/drawable-hdpi/ic_action_dark_filter.png new file mode 100755 index 0000000000000000000000000000000000000000..b718839caf1f07911ca2dfabb895fc87ccb1fb64 GIT binary patch literal 767 zcmV?+2KO55z(6jTI35R8p{9GZx+Vy=PST`q`;f54rInu&=Z zqKRPO=^d8T(Yy4{?e6r<&SMXzlYLcH*VkRuQ~lM7bv{(ae=~EvO=WZ^&{>gWS^Yu) z%xn*E4mb>Koxqtgs(*k_z-vk0dj^sLnAv{d2C%)%>=o)P0grniiU7C_oT$)|Nld+$ z^xO>;0dNo4ImxUQ>i!01JSUO>nAry4KCmS?@fWx&>0gCTjWuOvk0Jq|_l~6H4#3px zKnRn*KXG_WeF&M^W{)YrV|{f58T`R^mjiX=fSK(AmLz#~TfQ1?BL~cEBXAw~De1-30q~3euuFJUo}33xhtIQ; z7RP~TGzZLV2XGOXlk_X=n3qRct}hT$KFvhES?kW#ww!fwE2&(dz(Yin(Q{7J)T!3UEAcmWF=+AnBRUwMyyv{iUI33yK@VxsByosyUR z4*2WL6tqx#Sd)8j{T^B3Wuwl;jBS?!us2*twl(GDn0bl=2+pI19nPXr>ya${T2}yn86hm#v{09{^c~91<@Rk4o002ovPDHLkV1i*CW+DIp literal 0 HcmV?d00001 diff --git a/android/ijkplayer/sample/src/main/res/drawable-mdpi/ic_action_dark_filter.png b/android/ijkplayer/sample/src/main/res/drawable-mdpi/ic_action_dark_filter.png new file mode 100755 index 0000000000000000000000000000000000000000..2e84926b5d03d3aca2cf81ef9cea009a187aa57c GIT binary patch literal 490 zcmV=+e^7scv=aRJzqc2M0kE2mgqUEtKwd3iJDQ(&V8^FlJD@HGYS3|Nid-j{Tg1IG6IsPkRYm(c*QJr7KE ziX!gR_PWCV0%*1W!ZzP^g)#KZy3Q>fDe+cdLgm_*q#F# zl71B?wnNw40w#gBq-HGuu}$v)6TnAF=e8e4^XV?rrlfW^MCAl*hyJk!EJoqe&{~1F zz>A(8ha(6_@uw@L{$?~x4cLAKgje@EOAIZ+{I(t{C1862SWgWy16uZNJyZgyZ5|lr z2&zKdH-Q%Lv#NRgeKBR-O+*6{m;rV(nU={MN;>F_WMu&H^Vh)38X$fHpCw%+0U|_5 zBKN)Ehoqa%1eQvmhMo6GjtsyXV5!C(54=|t2|NKdfd@4~qyb_b1c;DAxRB;vElI~^ gqRHEFZi+I!zrxLQFs04SsQ>@~07*qoM6N<$f?|Z$0ssI2 literal 0 HcmV?d00001 diff --git a/android/ijkplayer/sample/src/main/res/drawable-xhdpi/ic_action_dark_filter.png b/android/ijkplayer/sample/src/main/res/drawable-xhdpi/ic_action_dark_filter.png new file mode 100755 index 0000000000000000000000000000000000000000..64f91d6a326feffca3310c005e37e7a32ce0869a GIT binary patch literal 929 zcmV;S177@zP)H$lFIbQ$gqt#H6XM?xfuKPx+!!b+h#>ec zD1xsjxN#9~GJGL~Qp5blfw?gabANa4+&lNq_Fx+SEJkR+&=Q+=rbIujBylIxp z&&U95zX2=<-UZ^iZS8O1fuu)e6B`MD?UlfG;Jvm&jXGCZ?$~o%cgfr(y3lYT>u+1)$gGE#CG_;XA|lI*ad9pqV(CE zf0lG7uImE$6j)mTa81&gwn4G|UCEq&k#s!)NE(o~K(Yb<8A01C$}D@CVYB`E8A01? zfX|8+Q_|t$cL_k!fV2gY4S4N5!DIx}DUgoACO@C9%|(xqV_bRK~1cYv>eg}@8on52hQA+!=emROObKW7re_8j0Kuq=1q z1K>wV&#FLZ9RS-Ah1v_u1x`x(r=K9Uw*i|<`YVUv+X!F_usIW|uOPNR26oI4xjrlD z>L4v>6@V<8e4vm}Jtyf(UJ%=nZ9W9NIfH<)1%8tB+kkCUEiuycDPVhXX3XXnCLCMf zR4-L!JNm=u#r=a?7{f4%VH`_aD>NW8W+7A*Qk1n=&Et`zfiw;e#0 zWNNJD-9AQd5RdbcE|=Xjbq%l`S>&B{({O_%&-(lN2U7)LJ5)YYKhE=}TNuOe51tnc z>U4}?X3V|>mNYGS?)g_Gooxkx2?{;qP*dFkZGeyfRILzc+7X(THY5#bNCWl&Q7D;j zkAa~hHWSc{Vlh_?d0NuVxX2es43ii51c*;pTU3kQ9|b@JD8A{a^uGf~B}KtxJq?H- z+KxKm^&Nu{LZ6UyuQ%^nTOb1v5uK`SLMDVg!`M#vh*mGTVyiX!6Zksza@HQ5~dG z?h!LW8Yg*4b1lWDtNSG@v6FRl^e>zrp6B`H`QdrJp4aPrb_;!z9$_H?0Q6{7uWd6K z@>8?4XZ*vp7-s5KqTKme!IJUNmvo&u(3(Lggl-eP3 znN~#XdIhe^ezxZh;2^x{_O7`v#_;05o)#7y1@U=AB|{R^ZfojmTT4F1c`ktaINoQ< z*q*Wdab92Ktv(gN)5ktmIhtqxpo{&EYE#6?(H00#MM1x^I>x|a@n{k=0w~~>aR7;JX!i(039e&E^}$Y;;ZzA*c09N` zil;OtbjX|ZmgrgQHrknaKDD3E!%<7FsZ->gm-v!1bWq`obg~mkU@-^kPBthIgwmbi zeqb@ABC*|gY==iyJn#quNA-b)rcL8yD>GiX!7<~gDILhdSZa6|&@%Y{%h^jaG9!V# z{9CYI*|v7rvXw@YhL6+19gd~k`n?M{$6LuFB_m)3ZBu4>JoRb6k=QJ^&z0k}bLK;orvnNhw_%bQ zq?~qGewE1le6YH{huuDAM&sm!R@SmbKg7J@Uf+pf%Bu&872v= z=jM{ND<9uN$_ZHAG;PoZ3Ps;bC?XOlcWwM`-OlyTVly|}WYyqAQHEGJ$<@VfPLOkP zktCIvcG;yn&c>#^jc3-dWB8xB1T53&5*FR!zdDZkWz^b=mUxe@R;BLkQ%^X$YWg&% z{0}-BY4F5R{dX)N$L5H&-Z_dD#LnsdQeeO6@s;Lu-CMOvzCiCbdimFaz9*6sGSAbc zi(GAU3-*05JJoCc$=g&Pl^MfGA+6XjNoeazz9pAj>6zMfI#Qn^mbbp%<*PvYB#r-a zmNvOet$8-5e<4O3wzvDVSmb{v>um(}(6~3*EA3jJ3B{$YtuM^>MDvkie}mDb5g+)i zzv9d1%7i8P->KbFk zgipVihJ{A3YBj{Srp-kY2AAPAzxvVk^$+DX*FIK_2sW&_q;xa}D+9J$^F!T5 z=WR#$gb@E$jeyROt>~3xs`A%4Fx&)%3l*H5(d!-;yeQepz4>6OIv;DoCDj!5p9;M2 zoXdP<@mL9X}ZVr;Y{SHbZfE!*Pa2W^D*wq^t6c`9Pnf~Vm6Z^fuwi4L+-F$iX zq+6q~;}4k literal 0 HcmV?d00001 diff --git a/android/ijkplayer/sample/src/main/res/drawable-xxxhdpi/ic_action_dark_filter.png b/android/ijkplayer/sample/src/main/res/drawable-xxxhdpi/ic_action_dark_filter.png new file mode 100755 index 0000000000000000000000000000000000000000..e2a3b5b50af1fc423860a3aacc38bc38d9ba6c6e GIT binary patch literal 2128 zcmd6pX*|^X0>*#;SSLq{Lx(U3SqrBjjIpaYmXK|%6)B?Rk2`gC#MGL0Nvat@jhjzkmw zfe6bOKGb)EZDhyQN9nsLxfzE+=Hdr-7l(CyckIcU%D?n3<~;SjOz?wC-$*3SO+# zoBq;n+SF;9B*#i?gjYINU#D6D+beu10i57;Xx9EFODBH| z9H334gg=_npV)1g<4YOqz2hC1bsw4{@y$nq60&0m!vRu3D8o#i9|`akJj+w0Mwo?H z#$RxVmjgvF5N-1OpYZj|X7*m_rmXZkIqgkk$q~w;Oj$KbS{SwxQnzx- ztOc>ieEy~csN$qc{8Kg&^m@dXuLpMvtP$wHhK1_M05LJ=Vu4}nv+8PZ;VJHY$@l#J zYnloG8tn?O+F=K5dN_4-8g&^WcrN2f_als-Gdaa97e;-yQmYi5&7@If@#xfr2Cc4Mp|i- z9tg@N6?H=i1x&r)!y^R{w(v35tG0elLHBV+P{VKr)|iCm#{iG~=8S%!dVce+idWE0 z_FkGuv=iyo(AT>h3E3?lDtem;1`T(mt|XdXs3&7pVF9R=ljdz7BoZA$k6+g!%=jfL z5Ek3qj;L6=qlt|B9(caWHrj&sQ@vxxbKWu0#`i**H1g=IJ4mh=O(Lc@>#nChJ0k^o zUWL_riswX?`?^$bTtc%I&8yu0`a_>DJ^-#&iDMWWIFK`Uz=F3}-JuF=;;xS$3eN3D z>TL5{=kzyY`n!1AsW^BHIUpN7S6&(z_RkHcVza!~B9zpPR(|A#}NUfQkYl0udRC*A3x&qBZ~V{Sf;$WFa2%1GVJ@~-2K~jYKO^Z0j@O1 zak><|XJ9S&7AQv!m{}Iv$nviqE!!E!Ip{i1N&ptZ?10-<80nN^3v#Ie!`;EZu3b|E zlj#v7N}nm8en6NLNN{Ey0f>(~E1Olu?--xoq%1-jwVEM^dsu5p&YK)N`-5X~z&Z9& zjbn({*v-%{AEcD%c+hPp_ zL4`aBPYKv4o?HN0DRvSWD-g5d8Qh61e2I?PEd|vRhf?R;5ubO!S4s9o_0!j6qF0lg zzw?Fa&&}>8j|!d5=W*h}fb`bY5~s}D(}Z%=2|OHVI@MDATl(1K_bjHN>j6Y`1#fUv z7Ue0@XK!34X(K6w;_(r3P|cfKe{?s7J1nGE+D6CYbiq`U3i`76MZ?~%x|1J18=;A4 zHY{DowVqymmaA=DKjtCvUtTj_Qvx4;wzZXaJJ=HVxaX7w8(ttEkDzz3=+UvNaG286 zF1|K+-_aR+l%m5rx4yoSXs!jZVaiXL*8)jLm+DF-B?D~fLttQHs%E2BQ3P=x`DnEm zSB6x+o20$uR4p*8Q-gZqR=J#e6RBCAhmBaycs{_Ud2;oEyF%o(n-~47=h|eZ$26N^EcN!Sxo$`Adlt6cpT5ceRcRNdsHU zy)w?K37}yeiR@_X@JC58lKt?Er0>?6n$5|328Q4WquL4Nqgds?unFK3UfKcQJTDq3 z&d8sIbe*7Az4bv)Smi!!bMQgWuHbJ}vlpAMC&hS><4sYFHe}0JN`9ZMy@Zw^`M-4+ zjh9pUJCqEbSK;Rv>~tUpv#AaYuMy3m`CPvzE6+xHMnmxJx*a(G^}JvLIk`;^!~S)! h{?06(@}HE~1G!!p7G6f4e!BG(0L{_Efn$Fn>tA5&!5IJm literal 0 HcmV?d00001 diff --git a/android/ijkplayer/sample/src/main/res/layout/activity_player.xml b/android/ijkplayer/sample/src/main/res/layout/activity_player.xml index 9a916678..58a7c885 100644 --- a/android/ijkplayer/sample/src/main/res/layout/activity_player.xml +++ b/android/ijkplayer/sample/src/main/res/layout/activity_player.xml @@ -23,7 +23,7 @@ tools:context=".toolbar_widget" /> + \ No newline at end of file diff --git a/android/ijkplayer/sample/src/main/res/values/strings.xml b/android/ijkplayer/sample/src/main/res/values/strings.xml index 2c8055c6..4f5a0e76 100644 --- a/android/ijkplayer/sample/src/main/res/values/strings.xml +++ b/android/ijkplayer/sample/src/main/res/values/strings.xml @@ -5,6 +5,8 @@ N/A Settings + Toggle Render + Toggle Ratio Invalid progressive playback Unknown @@ -17,4 +19,8 @@ 16:9 / Fit parent 4:3 / Fit parent + Render: None + Render: SurfaceView + Render: TextureView + -- GitLab