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