1ea0bad0574451212591841ba84f477ecc216003aHuahui Wu/*
2ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * Copyright (C) 2011 The Android Open Source Project
3ea0bad0574451212591841ba84f477ecc216003aHuahui Wu *
4ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * Licensed under the Apache License, Version 2.0 (the "License");
5ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * you may not use this file except in compliance with the License.
6ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * You may obtain a copy of the License at
7ea0bad0574451212591841ba84f477ecc216003aHuahui Wu *
8ea0bad0574451212591841ba84f477ecc216003aHuahui Wu *      http://www.apache.org/licenses/LICENSE-2.0
9ea0bad0574451212591841ba84f477ecc216003aHuahui Wu *
10ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * Unless required by applicable law or agreed to in writing, software
11ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * distributed under the License is distributed on an "AS IS" BASIS,
12ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * See the License for the specific language governing permissions and
14ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * limitations under the License.
15ea0bad0574451212591841ba84f477ecc216003aHuahui Wu */
16ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
17ea0bad0574451212591841ba84f477ecc216003aHuahui Wupackage com.android.mediadump;
18ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
19ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.io.BufferedReader;
20ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.io.File;
21ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.io.FileInputStream;
22ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.io.FileReader;
23ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.io.FilenameFilter;
24ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.lang.Integer;
25ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.nio.ByteBuffer;
26ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.nio.ShortBuffer;
27ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.util.ArrayList;
28ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.util.List;
29ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.util.Properties;
30ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.util.Random;
31ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.util.Timer;
32ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport java.util.TimerTask;
33ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
34ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.app.Activity;
35ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.content.Context;
36ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.content.Intent;
37ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.content.SharedPreferences;
38ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.graphics.Bitmap;
39ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.graphics.BitmapFactory;
40ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.graphics.Canvas;
41ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.os.Bundle;
42ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.os.Handler;
43ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.os.Message;
44ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.util.Log;
45ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.view.Gravity;
46ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.view.MotionEvent;
47ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.view.View;
48ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.widget.ImageView;
49ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.widget.LinearLayout;
50ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.widget.MediaController;
51ea0bad0574451212591841ba84f477ecc216003aHuahui Wuimport android.widget.MediaController.MediaPlayerControl;
52ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
53ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
54ea0bad0574451212591841ba84f477ecc216003aHuahui Wu/**
55ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * A simple player to display the raw rgb files that are generated from
56ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * VideDumpView class. It reads the "/sdcard/mediadump/prop.xml" to get
57ea0bad0574451212591841ba84f477ecc216003aHuahui Wu * the meta data such as width, height, frame rate, and bytes per pixel.
58ea0bad0574451212591841ba84f477ecc216003aHuahui Wu */
59ea0bad0574451212591841ba84f477ecc216003aHuahui Wupublic class RgbPlayerActivity extends Activity {
60ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
61ea0bad0574451212591841ba84f477ecc216003aHuahui Wu    @Override
62ea0bad0574451212591841ba84f477ecc216003aHuahui Wu    protected void onCreate(Bundle savedInstanceState) {
63ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        super.onCreate(savedInstanceState);
64ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
65ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        setContentView(new RgbView(this));
66ea0bad0574451212591841ba84f477ecc216003aHuahui Wu    }
67ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
68ea0bad0574451212591841ba84f477ecc216003aHuahui Wu    private static class RgbView extends View implements MediaPlayerControl {
69ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private static final String TAG = "RgbView";
70ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private Bitmap mBitmap;
71ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mStartX = 0;
72ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mStartY = 0;
73ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mWidth = 0;
74ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mHeight = 0;
75ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mBytesPerPixel = 0;
76ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mBytesPerLine = 0;
77ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mBytesPerImage = 0;
78ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private byte[] mImageBytes;
79ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private ByteBuffer mFlipBuf;
80ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
81ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mFrameRate = 0;
82ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
83ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private MediaController mMediaController;
84ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private boolean mMediaControllerAttached;
85ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private boolean mIsPlaying = false;
86ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private int mImageIndex = 0;
87ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private List<String> mImageList;
88ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private Timer mTimer;
89ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private TimerTask mImageTask = new TimerTask() {
90ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            @Override
91ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            public void run() {
92ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                if (mIsPlaying) {
93ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mImageIndex++;
94ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    LoadImage();
95ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                }
96ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            }
97ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        };
98ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private Handler mHandler = new Handler() {
99ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            @Override
100ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            public void handleMessage(Message msg) {
101ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                super.handleMessage(msg);
102ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                invalidate();
103ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            }
104ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        };
105ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
106ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
107ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public RgbView(Context context) {
108ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            super(context);
109ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
110ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            // read properties
111ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            Properties prop = new Properties();
112ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            try {
113ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                prop.loadFromXML(new FileInputStream("/sdcard/mediadump/prop.xml"));
114ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            } catch (java.io.IOException e) {
115ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                Log.e(TAG, e.getMessage(), e);
116ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            }
117ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
118ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            try {
119ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mStartX = Integer.parseInt(prop.getProperty("startX"));
120ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mStartY = Integer.parseInt(prop.getProperty("startY"));
121ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mWidth = Integer.parseInt(prop.getProperty("width"));
122ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mHeight = Integer.parseInt(prop.getProperty("height"));
123ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mBytesPerPixel = Integer.parseInt(prop.getProperty("bytesPerPixel"));
124ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mFrameRate = Integer.parseInt(prop.getProperty("frameRate"));
125ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            } catch (java.lang.NumberFormatException e) {
126ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                Log.e(TAG, e.getMessage(), e);
127ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            }
128ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
129ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mBytesPerLine = mWidth * mBytesPerPixel;
130ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mBytesPerImage = mHeight * mBytesPerLine;
131ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mFlipBuf = ByteBuffer.allocate(mBytesPerImage);
132ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mBitmap = Bitmap.createBitmap(mWidth, mHeight,
133ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                                          mBytesPerPixel == 2
134ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                                          ? Bitmap.Config.RGB_565
135ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                                          : Bitmap.Config.ARGB_8888);
136ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
137ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mImageList = new ArrayList<String>();
138ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            try {
139ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                BufferedReader reader = new BufferedReader(
140ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    new FileReader("/sdcard/mediadump/images.lst"));
141ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                String line;
142ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                while ((line = reader.readLine()) != null) {
143ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mImageList.add(line);
144ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                }
145ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                reader.close();
146ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            } catch (java.io.IOException e) {
147ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                Log.e(TAG, e.getMessage(), e);
148ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            }
149ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
150ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mMediaController = new MediaController(context);
151ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mTimer = new Timer();
152ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            LoadImage();
153ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
154ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
155ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private void attachMediaController() {
156ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            if (mMediaController != null) {
157ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                if (!mMediaControllerAttached) {
158ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mMediaController.setMediaPlayer(this);
159ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    View anchorView = this.getParent() instanceof View ?
160ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                            (View)this.getParent() : this;
161ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mMediaController.setAnchorView(anchorView);
162ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mMediaController.setEnabled(true);
163ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mMediaControllerAttached = true;
164ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mTimer.scheduleAtFixedRate(mImageTask, 0, 1000 / mFrameRate);
165ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                }
166ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mMediaController.show();
167ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            }
168ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
169ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
170ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        @Override
171ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public boolean onTouchEvent(MotionEvent event) {
172ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            attachMediaController();
173ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            return true;
174ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
175ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
176ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        private void LoadImage() {
177ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            try {
178ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                if (mImageIndex < 0 || mImageIndex >= mImageList.size()) {
179ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mImageIndex = 0;
180ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                    mIsPlaying = false;
181ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                }
182ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
183ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                String filename = mImageList.get(mImageIndex);
184ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
185ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                FileInputStream in = new FileInputStream(filename);
186ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mImageBytes = new byte[mBytesPerImage];
187ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                in.read(mImageBytes);
188ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            } catch (Exception e) {
189ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                Log.e("Error reading file", e.toString());
190ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            }
191ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
192ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            // Flip the image vertically since the image from MediaDump is
193ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            // upside down.
194ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            for (int i = mHeight - 1; i >= 0; i--) {
195ea0bad0574451212591841ba84f477ecc216003aHuahui Wu                mFlipBuf.put(mImageBytes, i * mBytesPerLine, mBytesPerLine);
196ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            }
197ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mFlipBuf.rewind();
198ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mBitmap.copyPixelsFromBuffer(mFlipBuf);
199ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mFlipBuf.rewind();
200ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mHandler.sendEmptyMessage(0);
201ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
202ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
203ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        @Override
204ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        protected void onDraw(Canvas canvas) {
205ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            canvas.drawBitmap(mBitmap, mStartX, mStartY, null);
206ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
207ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
208ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public boolean canPause() {
209ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            return true;
210ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
211ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
212ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public boolean canSeekBackward() {
213ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            return true;
214ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
215ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
216ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public boolean canSeekForward() {
217ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            return true;
218ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
219ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
220ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public int getBufferPercentage() {
221ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            return 1;
222ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
223ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
224ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public int getCurrentPosition() {
225ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            return mImageIndex * 1000 / mFrameRate;
226ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
227ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
228ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public int getDuration() {
229ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            return mImageList.size() * 1000 / mFrameRate;
230ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
231ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
232ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public boolean isPlaying() {
233ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            return mIsPlaying;
234ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
235ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
236ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public void pause() {
237ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mIsPlaying = false;
238ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
239ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
240ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public void seekTo(int pos) {
241ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mImageIndex = pos * mFrameRate / 1000;
242ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
243ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
244ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        public void start() {
245ea0bad0574451212591841ba84f477ecc216003aHuahui Wu            mIsPlaying = true;
246ea0bad0574451212591841ba84f477ecc216003aHuahui Wu        }
247ff9a2437975414c97e0ac03246d93419c7a83259Marco Nelissen
248ff9a2437975414c97e0ac03246d93419c7a83259Marco Nelissen        @Override
249ff9a2437975414c97e0ac03246d93419c7a83259Marco Nelissen        public int getAudioSessionId() {
250ff9a2437975414c97e0ac03246d93419c7a83259Marco Nelissen            return 0;
251ff9a2437975414c97e0ac03246d93419c7a83259Marco Nelissen        }
252ea0bad0574451212591841ba84f477ecc216003aHuahui Wu    }
253ea0bad0574451212591841ba84f477ecc216003aHuahui Wu
254ea0bad0574451212591841ba84f477ecc216003aHuahui Wu}
255