I was wondering when I used Media::Player::OpenBuffer if it release the buffer memory when I close the player or start a new buffer?
At the moment I keep a pointer to the buffer and release it manually when I stop the player. But I'm getting a rare crash on a consequent OpenBuffer calls on malloc_consolidate and I'm wondering if I'm doing a double delete.
This is a simplified version of my code:
result TizenMediaPlayer::StartAudio() { if (mCurrentByteBuffer != null) { AppAssertf(false, "Possible memory leak the buffer should be null"); delete mCurrentByteBuffer; } mCurrentByteBuffer = new (std::nothrow) Tizen::Base::ByteBuffer(); mCurrentByteBuffer->Construct(audioRequest.length); tFile.Construct(filename, L"rb"); tFile.Read(*mCurrentByteBuffer); r = mPlayer.OpenBuffer(*mCurrentByteBuffer, false); mPlayer.Play(); ... }
void TizenMediaPlayer::Stop(void) { PlayerState state = mPlayer.GetState(); if (state == PLAYER_STATE_PAUSED || state == PLAYER_STATE_PLAYING) { mPlayer.Stop(); } state = mPlayer.GetState(); if (state == PLAYER_STATE_OPENED || state == PLAYER_STATE_ENDOFCLIP || state == PLAYER_STATE_STOPPED) { mPlayer.Close(); } if (mCurrentByteBuffer) { AppLog("Delete Media buffer"); delete mCurrentByteBuffer; mCurrentByteBuffer = null; } ... }
As you can see I keep a pointer to mCurrentByteBuffer and then delte it when Stop() is called. Stop() is called by END_OF_FILE callback or if we decide to stop the player for any reason.
The documentation does not cover this topic so any information will help.
Thanks for your help.