Dave Sparks 0f9a53d499 Set metadata retriever thread group to the caller's group.
This patch modifies the native binder interface to the metadata
retriever to pass the caller's thread group across the binder
interface. On the server side, the thread scheduler group is
set to the caller's scheduler group temporarily and restored
after the request has completed. This patch also reverts a
previous patch where the priority of the thread was forced to
a low priority foreground thread.

This should give apps more control over the priority of their
metadata retrieval, particularly allow background process to
run without hogging the CPU.
2009-11-23 16:51:15 -08:00

76 lines
2.5 KiB
C++

/*
**
** Copyright (C) 2008 The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
** http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/
#ifndef ANDROID_MEDIAMETADATARETRIEVERSERVICE_H
#define ANDROID_MEDIAMETADATARETRIEVERSERVICE_H
#include <utils/Log.h>
#include <utils/threads.h>
#include <utils/List.h>
#include <utils/Errors.h>
#include <utils/KeyedVector.h>
#include <binder/IMemory.h>
#include <media/MediaMetadataRetrieverInterface.h>
namespace android {
class IMediaPlayerService;
class MemoryDealer;
class MetadataRetrieverClient : public BnMediaMetadataRetriever
{
public:
MetadataRetrieverClient(const sp<IMediaPlayerService>& service, pid_t pid, int32_t connId);
// Implements IMediaMetadataRetriever interface
// These methods are called in IMediaMetadataRetriever.cpp?
virtual void disconnect();
virtual status_t setDataSource(const char *url);
virtual status_t setDataSource(int fd, int64_t offset, int64_t length);
virtual status_t setMode(int mode);
virtual status_t getMode(int* mode) const;
virtual sp<IMemory> captureFrame();
virtual sp<IMemory> extractAlbumArt();
virtual const char* extractMetadata(int keyCode);
virtual status_t dump(int fd, const Vector<String16>& args) const;
private:
friend class MediaPlayerService;
explicit MetadataRetrieverClient(pid_t pid);
virtual ~MetadataRetrieverClient();
mutable Mutex mLock;
sp<MediaMetadataRetrieverBase> mRetriever;
pid_t mPid;
int mMode;
// Keep the shared memory copy of album art and capture frame (for thumbnail)
sp<MemoryDealer> mAlbumArtDealer;
sp<MemoryDealer> mThumbnailDealer;
sp<IMemory> mAlbumArt;
sp<IMemory> mThumbnail;
};
}; // namespace android
#endif // ANDROID_MEDIAMETADATARETRIEVERSERVICE_H