Hi Megha,
I am successfully using your classes to capture and view video files. But, can't seem to reliable reuse the same surface when returning from a subactivity. I tried playing a video file in onActivityResult(), and although managed to play it on rare occasions, most of the time the video is not shown. Since I've been running the same code over and over again (and only sometimes successfully), I am assuming that the surface is not ready to receive the video sequence. How can I make sure surfaceCreated() has already done its job? Should I add something to onResume() or onRestart() in my main activity? The relevant code: public class mediaclass extends Activity implements SurfaceHolder.Callback { private SurfaceView mSF; private SurfaceHolder mHolder = null; private boolean mHasSurface; private MediaPlayer myPlayer; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); mSF = (SurfaceView) findViewById(R.id.preview); mSF.getHolder().addCallback(this); mHasSurface = false; } public void surfaceCreated(SurfaceHolder holder) { mHolder = holder; mHasSurface = true; } public void surfaceDestroyed(SurfaceHolder holder) { mHolder = null; mHasSurface = false; } @Override protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras) { super.onActivityResult(requestCode, resultCode, data, extras); myPlayer = new MediaPlayer(); if (mHasSurface == true){ myPlayer.setDisplay(mHolder.getSurface()); } try { myPlayer.setDataSource(data); // data contains the full path/ filename (from SD card) myPlayer.prepare(); } catch (IOException e) { Log.e(TAG, e.getMessage(), e); } myPlayer.start(); } As you can see, I am checking mHasSurface, before attaching to the surface. I even tried waiting for mHasSurface to become true in an "infinite" loop, but no luck with that either :( What else can I try? This is how the surface is defined in main.xml: <SurfaceView android:id="@+id/preview" android:layout_width="176dip" android:layout_height="144dip" android:layout_alignParentTop="true" android:layout_marginLeft="4px" /> Also can you suggest a way to display a PNG image from SD card on a SurfaceView? Seems that MediaPlayer was not designed for this. Thanks and regards Robert On Apr 8, 1:19 am, "Megha Joshi" <[EMAIL PROTECTED]> wrote: > Hi, > > This is because the surface is not yet ready for the mediaplayer, please > call the mediaPlayer initialization code in or after OnSurfaceCreate() > callback.. > > Thanks, > Megha > > On Mon, Apr 7, 2008 at 9:45 AM, fubin <[EMAIL PROTECTED]> wrote: > > > In Sample given by google There is a button to invoke a file. > > private void playVideo(Integer Media) { > > try { > > // If the path has not changed, just start the media > > player > > path = "/data/room.mp4"; > > > // Create a new media player and set the listeners > > mp = new MediaPlayer(); > > mp.setDataSource(path); > > mp.setDisplay(holder.getSurface()); > > mp.prepare(); > > mp.setOnBufferingUpdateListener(this); > > mp.setOnCompletionListener(this); > > mp.setOnPreparedListener(this); > > mp.setAudioStreamType(AudioSystem.STREAM_MUSIC); > > Log.d("\n\nCREATE", "mediaplayer"); > > mp.start(); > > } catch (Exception e) { > > Log.e(TAG, "error: " + e.getMessage(), e); > > } > > } > > > private OnClickListener mPlayListener = new OnClickListener() { > > public void onClick(View v) { > > playVideo(extras.getInt(MEDIA)); > > > } > > }; > > > When I copy the code directly to onCreate like the following program > > creshed...: > > > public void onCreate(Bundle icicle) { > > super.onCreate(icicle); > > setContentView(R.layout.mediaplayer); > > mPreview = (SurfaceView) findViewById(R.id.surface); > > > // Set the transparency > > getWindow().setFormat(PixelFormat.TRANSPARENT); > > // Set a size for the video screen > > holder = mPreview.getHolder(); > > holder.addCallback(this); > > try { > > // If the path has not changed, just start the media > > player > > path = "/data/room.mp4"; > > > // Create a new media player and set the listeners > > mp = new MediaPlayer(); > > mp.setDataSource(path); > > mp.setDisplay(holder.getSurface()); > > mp.prepare(); > > mp.setOnBufferingUpdateListener(this); > > > mp.setOnCompletionListener(this); > > mp.setOnPreparedListener(this); > > mp.setAudioStreamType(AudioSystem.STREAM_MUSIC); > > Log.d("\n\nCREATE", "mediaplayer"); > > mp.start(); > > } catch (Exception e) { > > Log.e(TAG, "error: " + e.getMessage(), e); > > } > > } > > > There is no error information for debug. > > Anyone have the same problem? > > Thanks in advance. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to android-developers@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] Announcing the new M5 SDK! http://android-developers.blogspot.com/2008/02/android-sdk-m5-rc14-now-available.html For more options, visit this group at http://groups.google.com/group/android-developers?hl=en -~----------~----~----~----~------~----~------~--~---