VideoFragment.java revision aa49439ba6276137f94fcdc1bf4f69b78833dad6
14702556bfd15c9819a7b2af759aee0f719cd631fsusnata/* 24702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Copyright (C) 2016 The Android Open Source Project 34702556bfd15c9819a7b2af759aee0f719cd631fsusnata * 44702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 54702556bfd15c9819a7b2af759aee0f719cd631fsusnata * in compliance with the License. You may obtain a copy of the License at 64702556bfd15c9819a7b2af759aee0f719cd631fsusnata * 74702556bfd15c9819a7b2af759aee0f719cd631fsusnata * http://www.apache.org/licenses/LICENSE-2.0 84702556bfd15c9819a7b2af759aee0f719cd631fsusnata * 94702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Unless required by applicable law or agreed to in writing, software distributed under the License 104702556bfd15c9819a7b2af759aee0f719cd631fsusnata * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 114702556bfd15c9819a7b2af759aee0f719cd631fsusnata * or implied. See the License for the specific language governing permissions and limitations under 124702556bfd15c9819a7b2af759aee0f719cd631fsusnata * the License. 134702556bfd15c9819a7b2af759aee0f719cd631fsusnata */ 144702556bfd15c9819a7b2af759aee0f719cd631fsusnatapackage android.support.v17.leanback.app; 154702556bfd15c9819a7b2af759aee0f719cd631fsusnata 164702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.os.Bundle; 174702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.support.v17.leanback.R; 184702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.LayoutInflater; 194702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.SurfaceHolder; 204702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.SurfaceView; 214702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.View; 224702556bfd15c9819a7b2af759aee0f719cd631fsusnataimport android.view.ViewGroup; 234702556bfd15c9819a7b2af759aee0f719cd631fsusnata 244702556bfd15c9819a7b2af759aee0f719cd631fsusnata/** 254702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Subclass of {@link PlaybackFragment} that is responsible for providing a {@link SurfaceView} 264702556bfd15c9819a7b2af759aee0f719cd631fsusnata * and rendering video. 274702556bfd15c9819a7b2af759aee0f719cd631fsusnata */ 284702556bfd15c9819a7b2af759aee0f719cd631fsusnatapublic class VideoFragment extends PlaybackFragment { 29aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata static final int SURFACE_NOT_CREATED = 0; 30aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata static final int SURFACE_CREATED = 1; 31aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata 32aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata SurfaceView mVideoSurface; 33aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata SurfaceHolder.Callback mMediaPlaybackCallback; 34aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata 35aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata int mState = SURFACE_NOT_CREATED; 364702556bfd15c9819a7b2af759aee0f719cd631fsusnata 374702556bfd15c9819a7b2af759aee0f719cd631fsusnata @Override 384702556bfd15c9819a7b2af759aee0f719cd631fsusnata public View onCreateView( 394702556bfd15c9819a7b2af759aee0f719cd631fsusnata LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 40c2168ad5902b189f3c634e47cd956f99df17fbabsusnata ViewGroup root = (ViewGroup) super.onCreateView(inflater, container, savedInstanceState); 41aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata mVideoSurface = (SurfaceView) getActivity().getLayoutInflater().inflate( 42aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata R.layout.lb_video_surface, root, false); 43c2168ad5902b189f3c634e47cd956f99df17fbabsusnata root.addView(mVideoSurface, 0); 44aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata mVideoSurface.getHolder().addCallback(new SurfaceHolder.Callback() { 45aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata 46aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata @Override 47aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata public void surfaceCreated(SurfaceHolder holder) { 48aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata if (mMediaPlaybackCallback != null) { 49aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata mMediaPlaybackCallback.surfaceCreated(holder); 50aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata } 51aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata mState = SURFACE_CREATED; 52aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata } 53aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata 54aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata @Override 55aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 56aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata if (mMediaPlaybackCallback != null) { 57aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata mMediaPlaybackCallback.surfaceChanged(holder, format, width, height); 58aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata } 59aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata } 60aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata 61aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata @Override 62aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata public void surfaceDestroyed(SurfaceHolder holder) { 63aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata if (mMediaPlaybackCallback != null) { 64aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata mMediaPlaybackCallback.surfaceDestroyed(holder); 65aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata } 66aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata mState = SURFACE_NOT_CREATED; 67aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata } 68aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata }); 694702556bfd15c9819a7b2af759aee0f719cd631fsusnata setBackgroundType(PlaybackFragment.BG_LIGHT); 704702556bfd15c9819a7b2af759aee0f719cd631fsusnata return root; 714702556bfd15c9819a7b2af759aee0f719cd631fsusnata } 724702556bfd15c9819a7b2af759aee0f719cd631fsusnata 734702556bfd15c9819a7b2af759aee0f719cd631fsusnata /** 744702556bfd15c9819a7b2af759aee0f719cd631fsusnata * Adds {@link SurfaceHolder.Callback} to {@link android.view.SurfaceView}. 754702556bfd15c9819a7b2af759aee0f719cd631fsusnata */ 764702556bfd15c9819a7b2af759aee0f719cd631fsusnata public void setSurfaceHolderCallback(SurfaceHolder.Callback callback) { 774702556bfd15c9819a7b2af759aee0f719cd631fsusnata mMediaPlaybackCallback = callback; 78aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata 79aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata if (callback != null) { 80aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata if (mState == SURFACE_CREATED) { 81aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata mMediaPlaybackCallback.surfaceCreated(mVideoSurface.getHolder()); 82aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata } 834702556bfd15c9819a7b2af759aee0f719cd631fsusnata } 844702556bfd15c9819a7b2af759aee0f719cd631fsusnata } 85aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata 86aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata /** 87aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata * Returns the surface view. 88aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata */ 89aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata public SurfaceView getSurfaceView() { 90aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata return mVideoSurface; 91aa49439ba6276137f94fcdc1bf4f69b78833dad6susnata } 924702556bfd15c9819a7b2af759aee0f719cd631fsusnata} 93