mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 872462 - OmxDecoder::Pause/Start didn't follow AOSP's definition. r=doublec
This commit is contained in:
parent
3a4ef126c5
commit
4d4f788735
@ -151,7 +151,8 @@ OmxDecoder::OmxDecoder(MediaResource *aResource,
|
|||||||
mAudioBuffer(nullptr),
|
mAudioBuffer(nullptr),
|
||||||
mIsVideoSeeking(false),
|
mIsVideoSeeking(false),
|
||||||
mAudioMetadataRead(false),
|
mAudioMetadataRead(false),
|
||||||
mPaused(false)
|
mAudioPaused(false),
|
||||||
|
mVideoPaused(false)
|
||||||
{
|
{
|
||||||
mLooper = new ALooper;
|
mLooper = new ALooper;
|
||||||
mLooper->setName("OmxDecoder");
|
mLooper->setName("OmxDecoder");
|
||||||
@ -736,33 +737,44 @@ bool OmxDecoder::ReadAudio(AudioFrame *aFrame, int64_t aSeekTimeUs)
|
|||||||
|
|
||||||
nsresult OmxDecoder::Play()
|
nsresult OmxDecoder::Play()
|
||||||
{
|
{
|
||||||
if (!mPaused) {
|
if (!mVideoPaused && !mAudioPaused) {
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
if (mVideoSource.get() && mVideoSource->start() != OK) {
|
|
||||||
return NS_ERROR_UNEXPECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mAudioSource.get()&& mAudioSource->start() != OK) {
|
if (mVideoPaused && mVideoSource.get() && mVideoSource->start() != OK) {
|
||||||
return NS_ERROR_UNEXPECTED;
|
return NS_ERROR_UNEXPECTED;
|
||||||
}
|
}
|
||||||
mPaused = false;
|
mVideoPaused = false;
|
||||||
|
|
||||||
|
if (mAudioPaused && mAudioSource.get() && mAudioSource->start() != OK) {
|
||||||
|
return NS_ERROR_UNEXPECTED;
|
||||||
|
}
|
||||||
|
mAudioPaused = false;
|
||||||
|
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AOSP didn't give implementation on OMXCodec::Pause() and not define
|
||||||
|
// OMXCodec::Start() should be called for resuming the decoding. Currently
|
||||||
|
// it is customized by a specific open source repository only.
|
||||||
|
// ToDo The one not supported OMXCodec::Pause() should return error code here,
|
||||||
|
// so OMXCodec::Start() doesn't be called again for resuming. But if someone
|
||||||
|
// implement the OMXCodec::Pause() and need a following OMXCodec::Read() with
|
||||||
|
// seek option (define in MediaSource.h) then it is still not supported here.
|
||||||
|
// We need to fix it until it is really happened.
|
||||||
void OmxDecoder::Pause()
|
void OmxDecoder::Pause()
|
||||||
{
|
{
|
||||||
if (mPaused) {
|
if (mVideoPaused || mAudioPaused) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (mVideoSource.get()) {
|
|
||||||
mVideoSource->pause();
|
if (mVideoSource.get() && mVideoSource->pause() == OK) {
|
||||||
|
mVideoPaused = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mAudioSource.get()) {
|
if (mAudioSource.get() && mAudioSource->pause() == OK) {
|
||||||
mAudioSource->pause();
|
mAudioPaused = true;
|
||||||
}
|
}
|
||||||
mPaused = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Called on ALooper thread.
|
// Called on ALooper thread.
|
||||||
|
@ -158,7 +158,8 @@ class OmxDecoder : public OMXCodecProxy::EventListener {
|
|||||||
int32_t aAudioChannels, int32_t aAudioSampleRate);
|
int32_t aAudioChannels, int32_t aAudioSampleRate);
|
||||||
|
|
||||||
//True if decoder is in a paused state
|
//True if decoder is in a paused state
|
||||||
bool mPaused;
|
bool mAudioPaused;
|
||||||
|
bool mVideoPaused;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
OmxDecoder(MediaResource *aResource, AbstractMediaDecoder *aDecoder);
|
OmxDecoder(MediaResource *aResource, AbstractMediaDecoder *aDecoder);
|
||||||
|
Loading…
Reference in New Issue
Block a user