const char* extractMetadata(int keyCode) { Parcel data, reply; data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor()); #ifndef DISABLE_GROUP_SCHEDULE_HACK sendSchedPolicy(data); #endif data.writeInt32(keyCode); remote()->transact(EXTRACT_METADATA, data, &reply); status_t ret = reply.readInt32(); if (ret != NO_ERROR) { return NULL; } const char* str = reply.readCString(); if (str != NULL) { String8 value(str); if (mMetadata.indexOfKey(keyCode) < 0) { mMetadata.add(keyCode, value); } else { mMetadata.replaceValueFor(keyCode, value); } return mMetadata.valueFor(keyCode).string(); } else { return NULL; } }
sp<IMemory> extractAlbumArt() { Parcel data, reply; data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor()); #ifndef DISABLE_GROUP_SCHEDULE_HACK sendSchedPolicy(data); #endif remote()->transact(EXTRACT_ALBUM_ART, data, &reply); status_t ret = reply.readInt32(); if (ret != NO_ERROR) { return NULL; } return interface_cast<IMemory>(reply.readStrongBinder()); }
sp<IMemory> getFrameAtTime(int64_t timeUs, int option) { Parcel data, reply; data.writeInterfaceToken(IMediaMetadataRetriever::getInterfaceDescriptor()); data.writeInt64(timeUs); data.writeInt32(option); #ifndef DISABLE_GROUP_SCHEDULE_HACK sendSchedPolicy(data); #endif remote()->transact(GET_FRAME_AT_TIME, data, &reply); status_t ret = reply.readInt32(); if (ret != NO_ERROR) { return NULL; } return interface_cast<IMemory>(reply.readStrongBinder()); }