Bug 1154194 - Fix regression by bug 1132832 and remove VideoResourceListener. r=sotaro

This commit is contained in:
Benjamin Chen 2015-05-26 15:52:38 +08:00
Родитель 9a3bbcae4e
Коммит 29b4ee90d8
2 изменённых файлов: 10 добавлений и 95 удалений

Просмотреть файл

@ -67,33 +67,6 @@ IsValidTimestampUs(int64_t aTimestamp)
return aTimestamp >= INT64_C(0);
}
MediaCodecReader::VideoResourceListener::VideoResourceListener(
MediaCodecReader* aReader)
: mReader(aReader)
{
}
MediaCodecReader::VideoResourceListener::~VideoResourceListener()
{
mReader = nullptr;
}
void
MediaCodecReader::VideoResourceListener::codecReserved()
{
if (mReader) {
mReader->VideoCodecReserved();
}
}
void
MediaCodecReader::VideoResourceListener::codecCanceled()
{
if (mReader) {
mReader->VideoCodecCanceled();
}
}
MediaCodecReader::TrackInputCopier::~TrackInputCopier()
{
}
@ -276,7 +249,6 @@ MediaCodecReader::MediaCodecReader(AbstractMediaDecoder* aDecoder)
, mNextParserPosition(INT64_C(0))
, mParsedDataLength(INT64_C(0))
{
mVideoListener = new VideoResourceListener(this);
}
MediaCodecReader::~MediaCodecReader()
@ -676,14 +648,6 @@ MediaCodecReader::ReadMetadata(MediaInfo* aInfo,
return NS_OK;
}
// Configure video codec after the codecReserved.
if (mVideoTrack.mSource != nullptr) {
if (!ConfigureMediaCodec(mVideoTrack)) {
DestroyMediaCodec(mVideoTrack);
return NS_ERROR_FAILURE;
}
}
// TODO: start streaming
if (!UpdateDuration()) {
@ -1295,8 +1259,8 @@ MediaCodecReader::CreateTaskQueues()
bool
MediaCodecReader::CreateMediaCodecs()
{
if (CreateMediaCodec(mLooper, mAudioTrack, false, nullptr) &&
CreateMediaCodec(mLooper, mVideoTrack, true, mVideoListener)) {
if (CreateMediaCodec(mLooper, mAudioTrack, nullptr) &&
CreateMediaCodec(mLooper, mVideoTrack, nullptr)) {
return true;
}
@ -1306,7 +1270,6 @@ MediaCodecReader::CreateMediaCodecs()
bool
MediaCodecReader::CreateMediaCodec(sp<ALooper>& aLooper,
Track& aTrack,
bool aAsync,
wp<MediaCodecProxy::CodecResourceListener> aListener)
{
if (aTrack.mSource != nullptr && aTrack.mCodec == nullptr) {
@ -1321,6 +1284,10 @@ MediaCodecReader::CreateMediaCodec(sp<ALooper>& aLooper,
NS_WARNING("Couldn't create MediaCodecProxy");
return false;
}
if (!aTrack.mCodec->AskMediaCodecAndWait()) {
NS_WARNING("AskMediaCodecAndWait fail");
return false;
}
if (!strcasecmp(mime, MEDIA_MIMETYPE_AUDIO_VORBIS)) {
aTrack.mInputCopier = new VorbisInputCopier;
@ -1343,14 +1310,10 @@ MediaCodecReader::CreateMediaCodec(sp<ALooper>& aLooper,
#endif
}
if (!aAsync) {
// Pending configure() and start() to codecReserved() if the creation
// should be asynchronous.
if (!aTrack.mCodec->allocated() || !ConfigureMediaCodec(aTrack)){
NS_WARNING("Couldn't create and configure MediaCodec synchronously");
DestroyMediaCodec(aTrack);
return false;
}
if (!aTrack.mCodec->allocated() || !ConfigureMediaCodec(aTrack)) {
NS_WARNING("Couldn't create and configure MediaCodec synchronously");
DestroyMediaCodec(aTrack);
return false;
}
}
@ -1912,22 +1875,4 @@ MediaCodecReader::ClearColorConverterBuffer()
mColorConverterBufferSize = 0;
}
// Called on Binder thread.
void
MediaCodecReader::VideoCodecReserved()
{
mDecoder->NotifyWaitingForResourcesStatusChanged();
}
// Called on Binder thread.
void
MediaCodecReader::VideoCodecCanceled()
{
if (mVideoTrack.mTaskQueue) {
RefPtr<nsIRunnable> task =
NS_NewRunnableMethod(this, &MediaCodecReader::ReleaseCriticalResources);
mVideoTrack.mTaskQueue->Dispatch(task.forget());
}
}
} // namespace mozilla

Просмотреть файл

@ -177,11 +177,6 @@ protected:
// Called on MediaCodecReader::mLooper thread.
void onMessageReceived(const android::sp<android::AMessage>& aMessage);
// Receive a notify from ResourceListener.
// Called on Binder thread.
virtual void VideoCodecReserved();
virtual void VideoCodecCanceled();
virtual bool CreateExtractor();
// Check the underlying HW resource is available and store the result in
@ -194,28 +189,6 @@ protected:
bool mIsWaitingResources;
private:
// An intermediary class that can be managed by android::sp<T>.
// Redirect codecReserved() and codecCanceled() to MediaCodecReader.
class VideoResourceListener : public android::MediaCodecProxy::CodecResourceListener
{
public:
VideoResourceListener(MediaCodecReader* aReader);
~VideoResourceListener();
virtual void codecReserved();
virtual void codecCanceled();
private:
// Forbidden
VideoResourceListener() = delete;
VideoResourceListener(const VideoResourceListener& rhs) = delete;
const VideoResourceListener& operator=(const VideoResourceListener& rhs) = delete;
MediaCodecReader* mReader;
};
friend class VideoResourceListener;
class VorbisInputCopier : public TrackInputCopier
{
virtual bool Copy(android::MediaBuffer* aSourceBuffer,
@ -354,7 +327,6 @@ private:
bool CreateMediaCodecs();
static bool CreateMediaCodec(android::sp<android::ALooper>& aLooper,
Track& aTrack,
bool aAsync,
android::wp<android::MediaCodecProxy::CodecResourceListener> aListener);
static bool ConfigureMediaCodec(Track& aTrack);
void DestroyMediaCodecs();
@ -415,8 +387,6 @@ private:
void ReleaseAllTextureClients();
android::sp<VideoResourceListener> mVideoListener;
android::sp<android::ALooper> mLooper;
android::sp<android::MetaData> mMetaData;