本文整理汇总了C++中sp类的典型用法代码示例。如果您正苦于以下问题:C++ sp类的具体用法?C++ sp怎么用?C++ sp使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了sp类的9个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: c_plus_plus_grabPartialWakeLock
namespace android {
#define ANDROID_WAKE_LOCK_NAME "libcodec_audio"
static sp<IPowerManager> gPowerManager;
static sp<IBinder> gWakeLockToken;
extern "C" void c_plus_plus_grabPartialWakeLock();
extern "C" void c_plus_plus_releaseWakeLock();
void c_plus_plus_releaseWakeLock()
{
if (gWakeLockToken != 0) {
ALOGV("releaseWakeLock_l() %s", ANDROID_WAKE_LOCK_NAME);
if (gPowerManager != 0) {
gPowerManager->releaseWakeLock(gWakeLockToken, 0);
}
gWakeLockToken.clear();
}
}
void c_plus_plus_grabPartialWakeLock()
{
if (gPowerManager == 0) {
// use checkService() to avoid blocking if power service is not up yet
sp<IBinder> binder =
defaultServiceManager()->checkService(String16("power"));
if (binder == 0) {
ALOGW("Thread %s cannot connect to the power manager service", ANDROID_WAKE_LOCK_NAME);
} else {
gPowerManager = interface_cast<IPowerManager>(binder);
class PMDeathRecipient : public IBinder::DeathRecipient {
public:
PMDeathRecipient() {}
virtual ~PMDeathRecipient() {}
// IBinder::DeathRecipient
virtual void binderDied(const wp<IBinder>& who){
c_plus_plus_releaseWakeLock();
gPowerManager.clear();
ALOGW("power manager service died !!!");
}
private:
PMDeathRecipient(const PMDeathRecipient&);
PMDeathRecipient& operator = (const PMDeathRecipient&);
};
sp<IBinder::DeathRecipient> mDeathObserver = new PMDeathRecipient();
binder->linkToDeath(mDeathObserver);
}
}
if (gPowerManager != 0) {
sp<IBinder> binder = new BBinder();
status_t status = gPowerManager->acquireWakeLock(POWERMANAGER_PARTIAL_WAKE_LOCK,
binder,
String16(ANDROID_WAKE_LOCK_NAME),
String16(ANDROID_WAKE_LOCK_NAME));
if (status == NO_ERROR) {
gWakeLockToken = binder;
}
ALOGV("acquireWakeLock_l() %s status %d", ANDROID_WAKE_LOCK_NAME, status);
}
ALOGV("acquireWakeLock_l() 1");
}
}
开发者ID:ernest0vm,项目名称:a33_android4.4_device_hp_polaris-common,代码行数:72,代码来源:wakelock.cpp
示例2: free_heap
static inline void free_heap(const sp<IBinder>& binder) {
gHeapCache->free_heap(binder);
}
开发者ID:debian-pkg-android-tools,项目名称:android-platform-frameworks-native,代码行数:3,代码来源:IMemory.cpp
示例3: get_heap
static inline sp<IMemoryHeap> get_heap(const sp<IBinder>& binder) {
return gHeapCache->get_heap(binder);
}
开发者ID:debian-pkg-android-tools,项目名称:android-platform-frameworks-native,代码行数:3,代码来源:IMemory.cpp
示例4: HeapCache
namespace android {
// ---------------------------------------------------------------------------
class HeapCache : public IBinder::DeathRecipient
{
public:
HeapCache();
virtual ~HeapCache();
virtual void binderDied(const wp<IBinder>& who);
sp<IMemoryHeap> find_heap(const sp<IBinder>& binder);
void free_heap(const sp<IBinder>& binder);
sp<IMemoryHeap> get_heap(const sp<IBinder>& binder);
void dump_heaps();
private:
// For IMemory.cpp
struct heap_info_t {
sp<IMemoryHeap> heap;
int32_t count;
};
void free_heap(const wp<IBinder>& binder);
Mutex mHeapCacheLock;
KeyedVector< wp<IBinder>, heap_info_t > mHeapCache;
};
static sp<HeapCache> gHeapCache = new HeapCache();
/******************************************************************************/
enum {
HEAP_ID = IBinder::FIRST_CALL_TRANSACTION
};
class BpMemoryHeap : public BpInterface<IMemoryHeap>
{
public:
BpMemoryHeap(const sp<IBinder>& impl);
virtual ~BpMemoryHeap();
virtual int getHeapID() const;
virtual void* getBase() const;
virtual size_t getSize() const;
virtual uint32_t getFlags() const;
virtual uint32_t getOffset() const;
private:
friend class IMemory;
friend class HeapCache;
// for debugging in this module
static inline sp<IMemoryHeap> find_heap(const sp<IBinder>& binder) {
return gHeapCache->find_heap(binder);
}
static inline void free_heap(const sp<IBinder>& binder) {
gHeapCache->free_heap(binder);
}
static inline sp<IMemoryHeap> get_heap(const sp<IBinder>& binder) {
return gHeapCache->get_heap(binder);
}
static inline void dump_heaps() {
gHeapCache->dump_heaps();
}
void assertMapped() const;
void assertReallyMapped() const;
mutable volatile int32_t mHeapId;
mutable void* mBase;
mutable size_t mSize;
mutable uint32_t mFlags;
mutable uint32_t mOffset;
mutable bool mRealHeap;
mutable Mutex mLock;
};
// ----------------------------------------------------------------------------
enum {
GET_MEMORY = IBinder::FIRST_CALL_TRANSACTION
};
class BpMemory : public BpInterface<IMemory>
{
public:
BpMemory(const sp<IBinder>& impl);
virtual ~BpMemory();
virtual sp<IMemoryHeap> getMemory(ssize_t* offset=0, size_t* size=0) const;
private:
mutable sp<IMemoryHeap> mHeap;
mutable ssize_t mOffset;
mutable size_t mSize;
};
/******************************************************************************/
//.........这里部分代码省略.........
开发者ID:debian-pkg-android-tools,项目名称:android-platform-frameworks-native,代码行数:101,代码来源:IMemory.cpp
示例5: CHECK
//audio
status_t FFMPEGSoftCodec::setRawAudioFormat(
const sp<AMessage> &msg, sp<IOMX> OMXhandle, IOMX::node_id nodeID)
{
int32_t numChannels = 0;
int32_t sampleRate = 0;
int32_t bitsPerSample = 0;
CHECK(msg->findInt32(ExtendedCodec::getMsgKey(kKeyChannelCount), &numChannels));
CHECK(msg->findInt32(ExtendedCodec::getMsgKey(kKeySampleRate), &sampleRate));
if (!msg->findInt32(ExtendedCodec::getMsgKey(kKeyBitsPerSample), &bitsPerSample)) {
ALOGD("No PCM format specified, let decoder decide");
}
OMX_PARAM_PORTDEFINITIONTYPE def;
InitOMXParams(&def);
def.nPortIndex = kPortIndexOutput;
status_t err = OMXhandle->getParameter(
nodeID, OMX_IndexParamPortDefinition, &def, sizeof(def));
if (err != OK) {
return err;
}
def.format.audio.eEncoding = OMX_AUDIO_CodingPCM;
err = OMXhandle->setParameter(
nodeID, OMX_IndexParamPortDefinition, &def, sizeof(def));
if (err != OK) {
return err;
}
OMX_AUDIO_PARAM_PCMMODETYPE pcmParams;
InitOMXParams(&pcmParams);
pcmParams.nPortIndex = kPortIndexOutput;
err = OMXhandle->getParameter(
nodeID, OMX_IndexParamAudioPcm, &pcmParams, sizeof(pcmParams));
if (err != OK) {
return err;
}
pcmParams.nChannels = numChannels;
pcmParams.eNumData = OMX_NumericalDataSigned;
pcmParams.bInterleaved = OMX_TRUE;
if (bitsPerSample > 0) {
pcmParams.nBitPerSample = bitsPerSample;
}
pcmParams.nSamplingRate = sampleRate;
pcmParams.ePCMMode = OMX_AUDIO_PCMModeLinear;
if (getOMXChannelMapping(numChannels, pcmParams.eChannelMapping) != OK) {
return OMX_ErrorNone;
}
err = OMXhandle->setParameter(
nodeID, OMX_IndexParamAudioPcm, &pcmParams, sizeof(pcmParams));
if (err != OK) {
return err;
}
msg->setInt32("bits-per-sample", pcmParams.nBitPerSample);
return OK;
}
开发者ID:SiliconAcid,项目名称:android_frameworks_av,代码行数:69,代码来源:FFMPEGSoftCodec.cpp
示例6: setSupportedRole
status_t FFMPEGSoftCodec::setSupportedRole(
const sp<IOMX> &omx, IOMX::node_id node,
bool isEncoder, const char *mime) {
ALOGV("setSupportedRole Called %s", mime);
struct MimeToRole {
const char *mime;
const char *decoderRole;
const char *encoderRole;
};
static const MimeToRole kFFMPEGMimeToRole[] = {
{ MEDIA_MIMETYPE_AUDIO_AAC,
"audio_decoder.aac", NULL },
{ MEDIA_MIMETYPE_AUDIO_MPEG,
"audio_decoder.mp3", NULL },
{ MEDIA_MIMETYPE_AUDIO_VORBIS,
"audio_decoder.vorbis", NULL },
{ MEDIA_MIMETYPE_AUDIO_WMA,
"audio_decoder.wma", NULL },
{ MEDIA_MIMETYPE_AUDIO_RA,
"audio_decoder.ra" , NULL },
{ MEDIA_MIMETYPE_AUDIO_FLAC,
"audio_decoder.flac", NULL },
{ MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II,
"audio_decoder.mp2", NULL },
{ MEDIA_MIMETYPE_AUDIO_AC3,
"audio_decoder.ac3", NULL },
{ MEDIA_MIMETYPE_AUDIO_APE,
"audio_decoder.ape", NULL },
{ MEDIA_MIMETYPE_AUDIO_DTS,
"audio_decoder.dts", NULL },
{ MEDIA_MIMETYPE_VIDEO_MPEG2,
"video_decoder.mpeg2", NULL },
{ MEDIA_MIMETYPE_VIDEO_DIVX,
"video_decoder.divx", NULL },
{ MEDIA_MIMETYPE_VIDEO_DIVX4,
"video_decoder.divx", NULL },
{ MEDIA_MIMETYPE_VIDEO_DIVX311,
"video_decoder.divx", NULL },
{ MEDIA_MIMETYPE_VIDEO_WMV,
"video_decoder.wmv", NULL },
{ MEDIA_MIMETYPE_VIDEO_RV,
"video_decoder.rv", NULL },
{ MEDIA_MIMETYPE_VIDEO_FLV1,
"video_decoder.flv1", NULL },
{ MEDIA_MIMETYPE_VIDEO_HEVC,
"video_decoder.hevc", NULL },
{ MEDIA_MIMETYPE_AUDIO_FFMPEG,
"audio_decoder.trial", NULL },
{ MEDIA_MIMETYPE_VIDEO_FFMPEG,
"video_decoder.trial", NULL },
};
static const size_t kNumMimeToRole =
sizeof(kFFMPEGMimeToRole) / sizeof(kFFMPEGMimeToRole[0]);
size_t i;
for (i = 0; i < kNumMimeToRole; ++i) {
if (!strcasecmp(mime, kFFMPEGMimeToRole[i].mime)) {
break;
}
}
if (i == kNumMimeToRole) {
return ERROR_UNSUPPORTED;
}
const char *role =
isEncoder ? kFFMPEGMimeToRole[i].encoderRole
: kFFMPEGMimeToRole[i].decoderRole;
if (role != NULL) {
OMX_PARAM_COMPONENTROLETYPE roleParams;
InitOMXParams(&roleParams);
strncpy((char *)roleParams.cRole,
role, OMX_MAX_STRINGNAME_SIZE - 1);
roleParams.cRole[OMX_MAX_STRINGNAME_SIZE - 1] = '\0';
status_t err = omx->setParameter(
node, OMX_IndexParamStandardComponentRole,
&roleParams, sizeof(roleParams));
if (err != OK) {
ALOGW("Failed to set standard component role '%s'.", role);
return err;
}
}
return OK;
}
开发者ID:SiliconAcid,项目名称:android_frameworks_av,代码行数:92,代码来源:FFMPEGSoftCodec.cpp
示例7: setAudioFormat
status_t FFMPEGSoftCodec::setAudioFormat(
const sp<AMessage> &msg, const char* mime, sp<IOMX> OMXhandle,
IOMX::node_id nodeID, bool isEncoder ) {
ALOGV("setAudioFormat called");
status_t err = OK;
if (isEncoder) {
ALOGE("Encoding not supported");
err = BAD_VALUE;
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_WMA, mime)) {
err = setWMAFormat(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setWMAFormat() failed (err = %d)", err);
}
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_VORBIS, mime)) {
err = setVORBISFormat(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setVORBISFormat() failed (err = %d)", err);
}
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_RA, mime)) {
err = setRAFormat(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setRAFormat() failed (err = %d)", err);
}
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_FLAC, mime)) {
err = setFLACFormat(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setFLACFormat() failed (err = %d)", err);
}
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II, mime)) {
err = setMP2Format(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setMP2Format() failed (err = %d)", err);
}
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_AC3, mime)) {
err = setAC3Format(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setAC3Format() failed (err = %d)", err);
}
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_APE, mime)) {
err = setAPEFormat(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setAPEFormat() failed (err = %d)", err);
}
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_DTS, mime)) {
err = setDTSFormat(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setDTSFormat() failed (err = %d)", err);
}
} else if (!strcasecmp(MEDIA_MIMETYPE_AUDIO_FFMPEG, mime)) {
err = setFFmpegAudioFormat(msg, OMXhandle, nodeID);
if (err != OK) {
ALOGE("setFFmpegAudioFormat() failed (err = %d)", err);
}
}
ALOGV("setAudioFormat: %s", msg->debugString(0).c_str());
return err;
}
开发者ID:SiliconAcid,项目名称:android_frameworks_av,代码行数:61,代码来源:FFMPEGSoftCodec.cpp
示例8: binderDied
// IBinder::DeathRecipient
virtual void binderDied(const wp<IBinder>& who){
c_plus_plus_releaseWakeLock();
gPowerManager.clear();
ALOGW("power manager service died !!!");
}
开发者ID:ernest0vm,项目名称:a33_android4.4_device_hp_polaris-common,代码行数:6,代码来源:wakelock.cpp
示例9:
static inline void dump_heaps() {
gHeapCache->dump_heaps();
}
开发者ID:debian-pkg-android-tools,项目名称:android-platform-frameworks-native,代码行数:3,代码来源:IMemory.cpp
注:本文中的sp类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论