diff options
Diffstat (limited to 'media')
42 files changed, 457 insertions, 346 deletions
diff --git a/media/libmedia/Android.mk b/media/libmedia/Android.mk index 56e7787..1e322f9 100644 --- a/media/libmedia/Android.mk +++ b/media/libmedia/Android.mk @@ -76,7 +76,7 @@ LOCAL_MODULE:= libmedia LOCAL_C_INCLUDES := \ $(call include-path-for, graphics corecg) \ $(TOP)/frameworks/native/include/media/openmax \ - external/icu4c/common \ + external/icu/icu4c/source/common \ $(call include-path-for, audio-effects) \ $(call include-path-for, audio-utils) diff --git a/media/libmedia/ICrypto.cpp b/media/libmedia/ICrypto.cpp index 98b183a..0d5f990 100644 --- a/media/libmedia/ICrypto.cpp +++ b/media/libmedia/ICrypto.cpp @@ -131,7 +131,7 @@ struct BpCrypto : public BpInterface<ICrypto> { data.write(subSamples, sizeof(CryptoPlugin::SubSample) * numSubSamples); if (secure) { - data.writeIntPtr((intptr_t)dstPtr); + data.writeInt64(static_cast<uint64_t>(reinterpret_cast<uintptr_t>(dstPtr))); } remote()->transact(DECRYPT, data, &reply); @@ -249,7 +249,7 @@ status_t BnCrypto::onTransact( void *dstPtr; if (secure) { - dstPtr = (void *)data.readIntPtr(); + dstPtr = reinterpret_cast<void *>(static_cast<uintptr_t>(data.readInt64())); } else { dstPtr = malloc(totalSize); } diff --git a/media/libmedia/IOMX.cpp b/media/libmedia/IOMX.cpp index 9c13848..5df232f 100644 --- a/media/libmedia/IOMX.cpp +++ b/media/libmedia/IOMX.cpp @@ -65,7 +65,7 @@ public: virtual bool livesLocally(node_id node, pid_t pid) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(pid); remote()->transact(LIVES_LOCALLY, data, &reply); @@ -104,7 +104,7 @@ public: status_t err = reply.readInt32(); if (err == OK) { - *node = (void*)reply.readIntPtr(); + *node = (node_id)reply.readInt32(); } else { *node = 0; } @@ -115,7 +115,7 @@ public: virtual status_t freeNode(node_id node) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); remote()->transact(FREE_NODE, data, &reply); return reply.readInt32(); @@ -125,7 +125,7 @@ public: node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(cmd); data.writeInt32(param); remote()->transact(SEND_COMMAND, data, &reply); @@ -138,7 +138,7 @@ public: void *params, size_t size) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(index); data.writeInt64(size); data.write(params, size); @@ -159,7 +159,7 @@ public: const void *params, size_t size) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(index); data.writeInt64(size); data.write(params, size); @@ -173,7 +173,7 @@ public: void *params, size_t size) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(index); data.writeInt64(size); data.write(params, size); @@ -194,7 +194,7 @@ public: const void *params, size_t size) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(index); data.writeInt64(size); data.write(params, size); @@ -207,7 +207,7 @@ public: node_id node, OMX_STATETYPE* state) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); remote()->transact(GET_STATE, data, &reply); *state = static_cast<OMX_STATETYPE>(reply.readInt32()); @@ -218,7 +218,7 @@ public: node_id node, OMX_U32 port_index, OMX_BOOL enable) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.writeInt32((uint32_t)enable); remote()->transact(ENABLE_GRAPHIC_BUFFERS, data, &reply); @@ -231,7 +231,7 @@ public: node_id node, OMX_U32 port_index, OMX_U32* usage) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); remote()->transact(GET_GRAPHIC_BUFFER_USAGE, data, &reply); @@ -245,7 +245,7 @@ public: buffer_id *buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.writeStrongBinder(params->asBinder()); remote()->transact(USE_BUFFER, data, &reply); @@ -257,7 +257,7 @@ public: return err; } - *buffer = (void*)reply.readIntPtr(); + *buffer = (buffer_id)reply.readInt32(); return err; } @@ -268,7 +268,7 @@ public: const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.write(*graphicBuffer); remote()->transact(USE_GRAPHIC_BUFFER, data, &reply); @@ -280,7 +280,7 @@ public: return err; } - *buffer = (void*)reply.readIntPtr(); + *buffer = (buffer_id)reply.readInt32(); return err; } @@ -290,10 +290,10 @@ public: const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.write(*graphicBuffer); - data.writeIntPtr((intptr_t)buffer); + data.writeInt32((int32_t)buffer); remote()->transact(UPDATE_GRAPHIC_BUFFER_IN_META, data, &reply); status_t err = reply.readInt32(); @@ -306,7 +306,7 @@ public: Parcel data, reply; status_t err; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); err = remote()->transact(CREATE_INPUT_SURFACE, data, &reply); if (err != OK) { @@ -329,7 +329,7 @@ public: Parcel data, reply; status_t err; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); err = remote()->transact(SIGNAL_END_OF_INPUT_STREAM, data, &reply); if (err != OK) { ALOGW("binder transaction failed: %d", err); @@ -343,7 +343,7 @@ public: node_id node, OMX_U32 port_index, OMX_BOOL enable) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.writeInt32((uint32_t)enable); remote()->transact(STORE_META_DATA_IN_BUFFERS, data, &reply); @@ -357,7 +357,7 @@ public: OMX_U32 max_width, OMX_U32 max_height) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.writeInt32((int32_t)enable); data.writeInt32(max_width); @@ -373,7 +373,7 @@ public: buffer_id *buffer, void **buffer_data) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.writeInt64(size); remote()->transact(ALLOC_BUFFER, data, &reply); @@ -385,8 +385,8 @@ public: return err; } - *buffer = (void *)reply.readIntPtr(); - *buffer_data = (void *)reply.readIntPtr(); + *buffer = (buffer_id)reply.readInt32(); + *buffer_data = (void *)reply.readInt64(); return err; } @@ -396,7 +396,7 @@ public: buffer_id *buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.writeStrongBinder(params->asBinder()); remote()->transact(ALLOC_BUFFER_WITH_BACKUP, data, &reply); @@ -408,7 +408,7 @@ public: return err; } - *buffer = (void*)reply.readIntPtr(); + *buffer = (buffer_id)reply.readInt32(); return err; } @@ -417,9 +417,9 @@ public: node_id node, OMX_U32 port_index, buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); - data.writeIntPtr((intptr_t)buffer); + data.writeInt32((int32_t)buffer); remote()->transact(FREE_BUFFER, data, &reply); return reply.readInt32(); @@ -428,8 +428,8 @@ public: virtual status_t fillBuffer(node_id node, buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); - data.writeIntPtr((intptr_t)buffer); + data.writeInt32((int32_t)node); + data.writeInt32((int32_t)buffer); remote()->transact(FILL_BUFFER, data, &reply); return reply.readInt32(); @@ -442,8 +442,8 @@ public: OMX_U32 flags, OMX_TICKS timestamp) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); - data.writeIntPtr((intptr_t)buffer); + data.writeInt32((int32_t)node); + data.writeInt32((int32_t)buffer); data.writeInt32(range_offset); data.writeInt32(range_length); data.writeInt32(flags); @@ -459,7 +459,7 @@ public: OMX_INDEXTYPE *index) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeCString(parameter_name); remote()->transact(GET_EXTENSION_INDEX, data, &reply); @@ -482,7 +482,7 @@ public: size_t size) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); - data.writeIntPtr((intptr_t)node); + data.writeInt32((int32_t)node); data.writeInt32(port_index); data.writeInt64(size); data.write(optionData, size); @@ -509,7 +509,7 @@ status_t BnOMX::onTransact( case LIVES_LOCALLY: { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void *)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); pid_t pid = (pid_t)data.readInt32(); reply->writeInt32(livesLocally(node, pid)); @@ -553,7 +553,7 @@ status_t BnOMX::onTransact( status_t err = allocateNode(name, observer, &node); reply->writeInt32(err); if (err == OK) { - reply->writeIntPtr((intptr_t)node); + reply->writeInt32((int32_t)node); } return NO_ERROR; @@ -563,7 +563,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); reply->writeInt32(freeNode(node)); @@ -574,7 +574,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_COMMANDTYPE cmd = static_cast<OMX_COMMANDTYPE>(data.readInt32()); @@ -593,7 +593,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_INDEXTYPE index = static_cast<OMX_INDEXTYPE>(data.readInt32()); size_t size = data.readInt64(); @@ -644,7 +644,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_STATETYPE state = OMX_StateInvalid; status_t err = getState(node, &state); @@ -658,7 +658,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); OMX_BOOL enable = (OMX_BOOL)data.readInt32(); @@ -672,7 +672,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); OMX_U32 usage = 0; @@ -687,7 +687,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); sp<IMemory> params = interface_cast<IMemory>(data.readStrongBinder()); @@ -697,7 +697,7 @@ status_t BnOMX::onTransact( reply->writeInt32(err); if (err == OK) { - reply->writeIntPtr((intptr_t)buffer); + reply->writeInt32((int32_t)buffer); } return NO_ERROR; @@ -707,7 +707,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(); data.read(*graphicBuffer); @@ -718,7 +718,7 @@ status_t BnOMX::onTransact( reply->writeInt32(err); if (err == OK) { - reply->writeIntPtr((intptr_t)buffer); + reply->writeInt32((int32_t)buffer); } return NO_ERROR; @@ -728,11 +728,11 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(); data.read(*graphicBuffer); - buffer_id buffer = (void*)data.readIntPtr(); + buffer_id buffer = (buffer_id)data.readInt32(); status_t err = updateGraphicBufferInMeta( node, port_index, graphicBuffer, buffer); @@ -745,7 +745,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); sp<IGraphicBufferProducer> bufferProducer; @@ -765,7 +765,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); status_t err = signalEndOfInputStream(node); reply->writeInt32(err); @@ -777,7 +777,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); OMX_BOOL enable = (OMX_BOOL)data.readInt32(); @@ -791,7 +791,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); OMX_BOOL enable = (OMX_BOOL)data.readInt32(); OMX_U32 max_width = data.readInt32(); @@ -808,7 +808,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); size_t size = data.readInt64(); @@ -819,8 +819,8 @@ status_t BnOMX::onTransact( reply->writeInt32(err); if (err == OK) { - reply->writeIntPtr((intptr_t)buffer); - reply->writeIntPtr((intptr_t)buffer_data); + reply->writeInt32((int32_t)buffer); + reply->writeInt64((uintptr_t)buffer_data); } return NO_ERROR; @@ -830,7 +830,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); sp<IMemory> params = interface_cast<IMemory>(data.readStrongBinder()); @@ -842,7 +842,7 @@ status_t BnOMX::onTransact( reply->writeInt32(err); if (err == OK) { - reply->writeIntPtr((intptr_t)buffer); + reply->writeInt32((int32_t)buffer); } return NO_ERROR; @@ -852,9 +852,9 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); OMX_U32 port_index = data.readInt32(); - buffer_id buffer = (void*)data.readIntPtr(); + buffer_id buffer = (buffer_id)data.readInt32(); reply->writeInt32(freeBuffer(node, port_index, buffer)); return NO_ERROR; @@ -864,8 +864,8 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); - buffer_id buffer = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); + buffer_id buffer = (buffer_id)data.readInt32(); reply->writeInt32(fillBuffer(node, buffer)); return NO_ERROR; @@ -875,8 +875,8 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); - buffer_id buffer = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); + buffer_id buffer = (buffer_id)data.readInt32(); OMX_U32 range_offset = data.readInt32(); OMX_U32 range_length = data.readInt32(); OMX_U32 flags = data.readInt32(); @@ -894,7 +894,7 @@ status_t BnOMX::onTransact( { CHECK_OMX_INTERFACE(IOMX, data, reply); - node_id node = (void*)data.readIntPtr(); + node_id node = (node_id)data.readInt32(); const char *parameter_name = data.readCString(); OMX_INDEXTYPE index; @@ -927,6 +927,8 @@ public: data.writeInterfaceToken(IOMXObserver::getInterfaceDescriptor()); data.write(&msg, sizeof(msg)); + ALOGV("onMessage writing message %d, size %zu", msg.type, sizeof(msg)); + remote()->transact(OBSERVER_ON_MSG, data, &reply, IBinder::FLAG_ONEWAY); } }; @@ -943,6 +945,8 @@ status_t BnOMXObserver::onTransact( omx_message msg; data.read(&msg, sizeof(msg)); + ALOGV("onTransact reading message %d, size %zu", msg.type, sizeof(msg)); + // XXX Could use readInplace maybe? onMessage(msg); diff --git a/media/libmedia/MediaScanner.cpp b/media/libmedia/MediaScanner.cpp index 28b5aa7..dcbb769 100644 --- a/media/libmedia/MediaScanner.cpp +++ b/media/libmedia/MediaScanner.cpp @@ -237,4 +237,24 @@ MediaScanResult MediaScanner::doProcessDirectoryEntry( return MEDIA_SCAN_RESULT_OK; } +MediaAlbumArt *MediaAlbumArt::clone() { + size_t byte_size = this->size() + sizeof(MediaAlbumArt); + MediaAlbumArt *result = reinterpret_cast<MediaAlbumArt *>(malloc(byte_size)); + result->mSize = this->size(); + memcpy(&result->mData[0], &this->mData[0], this->size()); + return result; +} + +void MediaAlbumArt::init(MediaAlbumArt *instance, int32_t dataSize, const void *data) { + instance->mSize = dataSize; + memcpy(&instance->mData[0], data, dataSize); +} + +MediaAlbumArt *MediaAlbumArt::fromData(int32_t dataSize, const void* data) { + size_t byte_size = sizeof(MediaAlbumArt) + dataSize; + MediaAlbumArt *result = reinterpret_cast<MediaAlbumArt *>(malloc(byte_size)); + init(result, dataSize, data); + return result; +} + } // namespace android diff --git a/media/libmediaplayerservice/Android.mk b/media/libmediaplayerservice/Android.mk index 85c9464..a645f13 100644 --- a/media/libmediaplayerservice/Android.mk +++ b/media/libmediaplayerservice/Android.mk @@ -26,6 +26,7 @@ LOCAL_SRC_FILES:= \ LOCAL_SHARED_LIBRARIES := \ libbinder \ libcamera_client \ + libcrypto \ libcutils \ liblog \ libdl \ diff --git a/media/libmediaplayerservice/MediaPlayerFactory.cpp b/media/libmediaplayerservice/MediaPlayerFactory.cpp index 90aed39..09e6976 100644 --- a/media/libmediaplayerservice/MediaPlayerFactory.cpp +++ b/media/libmediaplayerservice/MediaPlayerFactory.cpp @@ -170,11 +170,11 @@ sp<MediaPlayerBase> MediaPlayerFactory::createPlayer( class StagefrightPlayerFactory : public MediaPlayerFactory::IFactory { public: - virtual float scoreFactory(const sp<IMediaPlayer>& client, + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, int fd, int64_t offset, - int64_t length, - float curScore) { + int64_t /*length*/, + float /*curScore*/) { char buf[20]; lseek(fd, offset, SEEK_SET); read(fd, buf, sizeof(buf)); @@ -197,7 +197,7 @@ class StagefrightPlayerFactory : class NuPlayerFactory : public MediaPlayerFactory::IFactory { public: - virtual float scoreFactory(const sp<IMediaPlayer>& client, + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, const char* url, float curScore) { static const float kOurScore = 0.8; @@ -229,9 +229,9 @@ class NuPlayerFactory : public MediaPlayerFactory::IFactory { return 0.0; } - virtual float scoreFactory(const sp<IMediaPlayer>& client, - const sp<IStreamSource> &source, - float curScore) { + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, + const sp<IStreamSource>& /*source*/, + float /*curScore*/) { return 1.0; } @@ -243,7 +243,7 @@ class NuPlayerFactory : public MediaPlayerFactory::IFactory { class SonivoxPlayerFactory : public MediaPlayerFactory::IFactory { public: - virtual float scoreFactory(const sp<IMediaPlayer>& client, + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, const char* url, float curScore) { static const float kOurScore = 0.4; @@ -274,7 +274,7 @@ class SonivoxPlayerFactory : public MediaPlayerFactory::IFactory { return 0.0; } - virtual float scoreFactory(const sp<IMediaPlayer>& client, + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, int fd, int64_t offset, int64_t length, @@ -312,9 +312,9 @@ class SonivoxPlayerFactory : public MediaPlayerFactory::IFactory { class TestPlayerFactory : public MediaPlayerFactory::IFactory { public: - virtual float scoreFactory(const sp<IMediaPlayer>& client, + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, const char* url, - float curScore) { + float /*curScore*/) { if (TestPlayerStub::canBeUsed(url)) { return 1.0; } diff --git a/media/libmediaplayerservice/MediaPlayerFactory.h b/media/libmediaplayerservice/MediaPlayerFactory.h index fe8972b..5ddde19 100644 --- a/media/libmediaplayerservice/MediaPlayerFactory.h +++ b/media/libmediaplayerservice/MediaPlayerFactory.h @@ -29,19 +29,19 @@ class MediaPlayerFactory { public: virtual ~IFactory() { } - virtual float scoreFactory(const sp<IMediaPlayer>& client, - const char* url, - float curScore) { return 0.0; } - - virtual float scoreFactory(const sp<IMediaPlayer>& client, - int fd, - int64_t offset, - int64_t length, - float curScore) { return 0.0; } - - virtual float scoreFactory(const sp<IMediaPlayer>& client, - const sp<IStreamSource> &source, - float curScore) { return 0.0; } + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, + const char* /*url*/, + float /*curScore*/) { return 0.0; } + + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, + int /*fd*/, + int64_t /*offset*/, + int64_t /*length*/, + float /*curScore*/) { return 0.0; } + + virtual float scoreFactory(const sp<IMediaPlayer>& /*client*/, + const sp<IStreamSource> &/*source*/, + float /*curScore*/) { return 0.0; } virtual sp<MediaPlayerBase> createPlayer() = 0; }; diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp index 348957f..063eb94 100644 --- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp +++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp @@ -56,7 +56,7 @@ MetadataRetrieverClient::~MetadataRetrieverClient() disconnect(); } -status_t MetadataRetrieverClient::dump(int fd, const Vector<String16>& args) const +status_t MetadataRetrieverClient::dump(int fd, const Vector<String16>& /*args*/) const { const size_t SIZE = 256; char buffer[SIZE]; @@ -230,7 +230,7 @@ sp<IMemory> MetadataRetrieverClient::extractAlbumArt() ALOGE("failed to extract an album art"); return NULL; } - size_t size = sizeof(MediaAlbumArt) + albumArt->mSize; + size_t size = sizeof(MediaAlbumArt) + albumArt->size(); sp<MemoryHeapBase> heap = new MemoryHeapBase(size, 0, "MetadataRetrieverClient"); if (heap == NULL) { ALOGE("failed to create MemoryDealer object"); @@ -243,11 +243,9 @@ sp<IMemory> MetadataRetrieverClient::extractAlbumArt() delete albumArt; return NULL; } - MediaAlbumArt *albumArtCopy = static_cast<MediaAlbumArt *>(mAlbumArt->pointer()); - albumArtCopy->mSize = albumArt->mSize; - albumArtCopy->mData = (uint8_t *)albumArtCopy + sizeof(MediaAlbumArt); - memcpy(albumArtCopy->mData, albumArt->mData, albumArt->mSize); - delete albumArt; // Fix memory leakage + MediaAlbumArt::init((MediaAlbumArt *) mAlbumArt->pointer(), + albumArt->size(), albumArt->data()); + delete albumArt; // We've taken our copy. return mAlbumArt; } diff --git a/media/libmediaplayerservice/MidiFile.h b/media/libmediaplayerservice/MidiFile.h index 24d59b4..16792ab 100644 --- a/media/libmediaplayerservice/MidiFile.h +++ b/media/libmediaplayerservice/MidiFile.h @@ -36,7 +36,7 @@ public: virtual status_t setDataSource(int fd, int64_t offset, int64_t length); virtual status_t setVideoSurfaceTexture( - const sp<IGraphicBufferProducer>& bufferProducer) + const sp<IGraphicBufferProducer>& /*bufferProducer*/) { return UNKNOWN_ERROR; } virtual status_t prepare(); virtual status_t prepareAsync(); @@ -51,13 +51,13 @@ public: virtual status_t reset(); virtual status_t setLooping(int loop); virtual player_type playerType() { return SONIVOX_PLAYER; } - virtual status_t invoke(const Parcel& request, Parcel *reply) { + virtual status_t invoke(const Parcel& /*request*/, Parcel* /*reply*/) { return INVALID_OPERATION; } - virtual status_t setParameter(int key, const Parcel &request) { + virtual status_t setParameter(int /*key*/, const Parcel &/*request*/) { return INVALID_OPERATION; } - virtual status_t getParameter(int key, Parcel *reply) { + virtual status_t getParameter(int /*key*/, Parcel* /*reply*/) { return INVALID_OPERATION; } diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index f5fb622..1a87e9c 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -17,6 +17,7 @@ //#define LOG_NDEBUG 0 #define LOG_TAG "ACodec" +#include <inttypes.h> #include <utils/Trace.h> #include <media/stagefright/ACodec.h> @@ -64,7 +65,7 @@ struct CodecObserver : public BnOMXObserver { sp<AMessage> msg = mNotify->dup(); msg->setInt32("type", omx_msg.type); - msg->setPointer("node", omx_msg.node); + msg->setInt32("node", omx_msg.node); switch (omx_msg.type) { case omx_message::EVENT: @@ -77,13 +78,13 @@ struct CodecObserver : public BnOMXObserver { case omx_message::EMPTY_BUFFER_DONE: { - msg->setPointer("buffer", omx_msg.u.buffer_data.buffer); + msg->setInt32("buffer", omx_msg.u.buffer_data.buffer); break; } case omx_message::FILL_BUFFER_DONE: { - msg->setPointer( + msg->setInt32( "buffer", omx_msg.u.extended_buffer_data.buffer); msg->setInt32( "range_offset", @@ -360,7 +361,7 @@ private: ACodec::ACodec() : mQuirks(0), - mNode(NULL), + mNode(0), mSentFormat(false), mIsEncoder(false), mUseMetadataOnEncoderOutput(false), @@ -374,7 +375,7 @@ ACodec::ACodec() mStoreMetaDataInOutputBuffers(false), mMetaDataBuffersToSubmit(0), mRepeatFrameDelayUs(-1ll), - mMaxPtsGapUs(-1l) { + mMaxPtsGapUs(-1ll) { mUninitializedState = new UninitializedState(this); mLoadedState = new LoadedState(this); mLoadedToIdleState = new LoadedToIdleState(this); @@ -490,7 +491,7 @@ status_t ACodec::allocateBuffersOnPort(OMX_U32 portIndex) { mNode, OMX_IndexParamPortDefinition, &def, sizeof(def)); if (err == OK) { - ALOGV("[%s] Allocating %lu buffers of size %lu on %s port", + ALOGV("[%s] Allocating %u buffers of size %u on %s port", mComponentName.c_str(), def.nBufferCountActual, def.nBufferSize, portIndex == kPortIndexInput ? "input" : "output"); @@ -664,7 +665,7 @@ status_t ACodec::configureOutputBuffersFromNativeWindow( break; } - ALOGW("[%s] setting nBufferCountActual to %lu failed: %d", + ALOGW("[%s] setting nBufferCountActual to %u failed: %d", mComponentName.c_str(), newBufferCount, err); /* exit condition */ if (extraBuffers == 0) { @@ -694,7 +695,7 @@ status_t ACodec::allocateOutputBuffersFromNativeWindow() { return err; mNumUndequeuedBuffers = minUndequeuedBuffers; - ALOGV("[%s] Allocating %lu buffers from a native window of size %lu on " + ALOGV("[%s] Allocating %u buffers from a native window of size %u on " "output port", mComponentName.c_str(), bufferCount, bufferSize); @@ -718,14 +719,14 @@ status_t ACodec::allocateOutputBuffersFromNativeWindow() { err = mOMX->useGraphicBuffer(mNode, kPortIndexOutput, graphicBuffer, &bufferId); if (err != 0) { - ALOGE("registering GraphicBuffer %lu with OMX IL component failed: " + ALOGE("registering GraphicBuffer %u with OMX IL component failed: " "%d", i, err); break; } mBuffers[kPortIndexOutput].editItemAt(i).mBufferID = bufferId; - ALOGV("[%s] Registered graphic buffer with ID %p (pointer = %p)", + ALOGV("[%s] Registered graphic buffer with ID %u (pointer = %p)", mComponentName.c_str(), bufferId, graphicBuffer.get()); } @@ -760,7 +761,7 @@ status_t ACodec::allocateOutputMetaDataBuffers() { return err; mNumUndequeuedBuffers = minUndequeuedBuffers; - ALOGV("[%s] Allocating %lu meta buffers on output port", + ALOGV("[%s] Allocating %u meta buffers on output port", mComponentName.c_str(), bufferCount); size_t totalSize = bufferCount * 8; @@ -784,7 +785,7 @@ status_t ACodec::allocateOutputMetaDataBuffers() { mBuffers[kPortIndexOutput].push(info); - ALOGV("[%s] allocated meta buffer with ID %p (pointer = %p)", + ALOGV("[%s] allocated meta buffer with ID %u (pointer = %p)", mComponentName.c_str(), info.mBufferID, mem->pointer()); } @@ -801,7 +802,7 @@ status_t ACodec::submitOutputMetaDataBuffer() { if (info == NULL) return ERROR_IO; - ALOGV("[%s] submitting output meta buffer ID %p for graphic buffer %p", + ALOGV("[%s] submitting output meta buffer ID %u for graphic buffer %p", mComponentName.c_str(), info->mBufferID, info->mGraphicBuffer.get()); --mMetaDataBuffersToSubmit; @@ -815,7 +816,7 @@ status_t ACodec::submitOutputMetaDataBuffer() { status_t ACodec::cancelBufferToNativeWindow(BufferInfo *info) { CHECK_EQ((int)info->mStatus, (int)BufferInfo::OWNED_BY_US); - ALOGV("[%s] Calling cancelBuffer on buffer %p", + ALOGV("[%s] Calling cancelBuffer on buffer %u", mComponentName.c_str(), info->mBufferID); int err = mNativeWindow->cancelBuffer( @@ -2465,7 +2466,7 @@ bool ACodec::allYourBuffersAreBelongToUs( if (info->mStatus != BufferInfo::OWNED_BY_US && info->mStatus != BufferInfo::OWNED_BY_NATIVE_WINDOW) { - ALOGV("[%s] Buffer %p on port %ld still has status %d", + ALOGV("[%s] Buffer %u on port %u still has status %d", mComponentName.c_str(), info->mBufferID, portIndex, info->mStatus); return false; @@ -2947,7 +2948,7 @@ bool ACodec::BaseState::onOMXMessage(const sp<AMessage> &msg) { CHECK(msg->findInt32("type", &type)); IOMX::node_id nodeID; - CHECK(msg->findPointer("node", &nodeID)); + CHECK(msg->findInt32("node", (int32_t*)&nodeID)); CHECK_EQ(nodeID, mCodec->mNode); switch (type) { @@ -2978,7 +2979,7 @@ bool ACodec::BaseState::onOMXMessage(const sp<AMessage> &msg) { case omx_message::EMPTY_BUFFER_DONE: { IOMX::buffer_id bufferID; - CHECK(msg->findPointer("buffer", &bufferID)); + CHECK(msg->findInt32("buffer", (int32_t*)&bufferID)); return onOMXEmptyBufferDone(bufferID); } @@ -2986,7 +2987,7 @@ bool ACodec::BaseState::onOMXMessage(const sp<AMessage> &msg) { case omx_message::FILL_BUFFER_DONE: { IOMX::buffer_id bufferID; - CHECK(msg->findPointer("buffer", &bufferID)); + CHECK(msg->findInt32("buffer", (int32_t*)&bufferID)); int32_t rangeOffset, rangeLength, flags; int64_t timeUs; @@ -3089,13 +3090,13 @@ void ACodec::BaseState::postFillThisBuffer(BufferInfo *info) { sp<AMessage> notify = mCodec->mNotify->dup(); notify->setInt32("what", ACodec::kWhatFillThisBuffer); - notify->setPointer("buffer-id", info->mBufferID); + notify->setInt32("buffer-id", info->mBufferID); info->mData->meta()->clear(); notify->setBuffer("buffer", info->mData); sp<AMessage> reply = new AMessage(kWhatInputBufferFilled, mCodec->id()); - reply->setPointer("buffer-id", info->mBufferID); + reply->setInt32("buffer-id", info->mBufferID); notify->setMessage("reply", reply); @@ -3106,8 +3107,7 @@ void ACodec::BaseState::postFillThisBuffer(BufferInfo *info) { void ACodec::BaseState::onInputBufferFilled(const sp<AMessage> &msg) { IOMX::buffer_id bufferID; - CHECK(msg->findPointer("buffer-id", &bufferID)); - + CHECK(msg->findInt32("buffer-id", (int32_t*)&bufferID)); sp<ABuffer> buffer; int32_t err = OK; bool eos = false; @@ -3345,7 +3345,7 @@ bool ACodec::BaseState::onOMXFillBufferDone( case RESUBMIT_BUFFERS: { if (rangeLength == 0 && !(flags & OMX_BUFFERFLAG_EOS)) { - ALOGV("[%s] calling fillBuffer %p", + ALOGV("[%s] calling fillBuffer %u", mCodec->mComponentName.c_str(), info->mBufferID); CHECK_EQ(mCodec->mOMX->fillBuffer( @@ -3387,11 +3387,11 @@ bool ACodec::BaseState::onOMXFillBufferDone( sp<AMessage> notify = mCodec->mNotify->dup(); notify->setInt32("what", ACodec::kWhatDrainThisBuffer); - notify->setPointer("buffer-id", info->mBufferID); + notify->setInt32("buffer-id", info->mBufferID); notify->setBuffer("buffer", info->mData); notify->setInt32("flags", flags); - reply->setPointer("buffer-id", info->mBufferID); + reply->setInt32("buffer-id", info->mBufferID); notify->setMessage("reply", reply); @@ -3427,8 +3427,7 @@ bool ACodec::BaseState::onOMXFillBufferDone( void ACodec::BaseState::onOutputBufferDrained(const sp<AMessage> &msg) { IOMX::buffer_id bufferID; - CHECK(msg->findPointer("buffer-id", &bufferID)); - + CHECK(msg->findInt32("buffer-id", (int32_t*)&bufferID)); ssize_t index; BufferInfo *info = mCodec->findBufferByID(kPortIndexOutput, bufferID, &index); @@ -3492,7 +3491,7 @@ void ACodec::BaseState::onOutputBufferDrained(const sp<AMessage> &msg) { } if (info != NULL) { - ALOGV("[%s] calling fillBuffer %p", + ALOGV("[%s] calling fillBuffer %u", mCodec->mComponentName.c_str(), info->mBufferID); CHECK_EQ(mCodec->mOMX->fillBuffer(mCodec->mNode, info->mBufferID), @@ -3655,7 +3654,7 @@ bool ACodec::UninitializedState::onAllocateComponent(const sp<AMessage> &msg) { componentName = matchingCodecs.itemAt(matchIndex).mName.string(); quirks = matchingCodecs.itemAt(matchIndex).mQuirks; - pid_t tid = androidGetTid(); + pid_t tid = gettid(); int prevPriority = androidGetThreadPriority(tid); androidSetThreadPriority(tid, ANDROID_PRIORITY_FOREGROUND); status_t err = omx->allocateNode(componentName.c_str(), observer, &node); @@ -4702,7 +4701,7 @@ bool ACodec::FlushingState::onOMXEvent( { sp<AMessage> msg = new AMessage(kWhatOMXMessage, mCodec->id()); msg->setInt32("type", omx_message::EVENT); - msg->setPointer("node", mCodec->mNode); + msg->setInt32("node", mCodec->mNode); msg->setInt32("event", event); msg->setInt32("data1", data1); msg->setInt32("data2", data2); diff --git a/media/libstagefright/MPEG4Extractor.cpp b/media/libstagefright/MPEG4Extractor.cpp index 362cd6b..7d3a838 100644 --- a/media/libstagefright/MPEG4Extractor.cpp +++ b/media/libstagefright/MPEG4Extractor.cpp @@ -3284,7 +3284,7 @@ status_t MPEG4Source::read( uint32_t sampleIndex; status_t err = mSampleTable->findSampleAtTime( - seekTimeUs * mTimescale / 1000000, + seekTimeUs, 1000000, mTimescale, &sampleIndex, findFlags); if (mode == ReadOptions::SEEK_CLOSEST) { diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index fe21296..3cb4217 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -1520,8 +1520,8 @@ size_t MediaCodec::updateBuffers( int32_t portIndex, const sp<AMessage> &msg) { CHECK(portIndex == kPortIndexInput || portIndex == kPortIndexOutput); - void *bufferID; - CHECK(msg->findPointer("buffer-id", &bufferID)); + uint32_t bufferID; + CHECK(msg->findInt32("buffer-id", (int32_t*)&bufferID)); Vector<BufferInfo> *buffers = &mPortBuffers[portIndex]; diff --git a/media/libstagefright/OMXClient.cpp b/media/libstagefright/OMXClient.cpp index 9f9352d..72f2306 100644 --- a/media/libstagefright/OMXClient.cpp +++ b/media/libstagefright/OMXClient.cpp @@ -141,7 +141,7 @@ private: const sp<IOMX> &getOMX(node_id node) const; const sp<IOMX> &getOMX_l(node_id node) const; - static bool IsSoftwareComponent(const char *name); + static bool CanLiveLocally(const char *name); DISALLOW_EVIL_CONSTRUCTORS(MuxOMX); }; @@ -164,7 +164,7 @@ bool MuxOMX::isLocalNode_l(node_id node) const { } // static -bool MuxOMX::IsSoftwareComponent(const char *name) { +bool MuxOMX::CanLiveLocally(const char *name) { return !strncasecmp(name, "OMX.google.", 11); } @@ -197,7 +197,7 @@ status_t MuxOMX::allocateNode( sp<IOMX> omx; - if (IsSoftwareComponent(name)) { + if (CanLiveLocally(name)) { if (mLocalOMX == NULL) { mLocalOMX = new OMX; } @@ -382,7 +382,7 @@ status_t OMXClient::connect() { mOMX = service->getOMX(); CHECK(mOMX.get() != NULL); - if (!mOMX->livesLocally(NULL /* node */, getpid())) { + if (!mOMX->livesLocally(0 /* node */, getpid())) { ALOGI("Using client-side OMX mux."); mOMX = new MuxOMX(mOMX); } diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 450fb3b..d5550e8 100644 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -669,7 +669,7 @@ status_t OMXCodec::setVideoPortFormatType( // CHECK_EQ(format.nIndex, index); #if 1 - CODEC_LOGV("portIndex: %ld, index: %ld, eCompressionFormat=%d eColorFormat=%d", + CODEC_LOGV("portIndex: %u, index: %u, eCompressionFormat=%d eColorFormat=%d", portIndex, index, format.eCompressionFormat, format.eColorFormat); #endif @@ -771,7 +771,7 @@ status_t OMXCodec::isColorFormatSupported( portFormat.nIndex = index; if (index >= kMaxColorFormatSupported) { - CODEC_LOGE("More than %ld color formats are supported???", index); + CODEC_LOGE("More than %u color formats are supported???", index); break; } } @@ -1807,7 +1807,7 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { break; } - CODEC_LOGW("setting nBufferCountActual to %lu failed: %d", + CODEC_LOGW("setting nBufferCountActual to %u failed: %d", newBufferCount, err); /* exit condition */ if (extraBuffers == 0) { @@ -1825,7 +1825,7 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { return err; } - CODEC_LOGV("allocating %lu buffers from a native window of size %lu on " + CODEC_LOGV("allocating %u buffers from a native window of size %u on " "output port", def.nBufferCountActual, def.nBufferSize); // Dequeue buffers and send them to OMX @@ -1858,7 +1858,7 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { mPortBuffers[kPortIndexOutput].editItemAt(i).mBuffer = bufferId; - CODEC_LOGV("registered graphic buffer with ID %p (pointer = %p)", + CODEC_LOGV("registered graphic buffer with ID %u (pointer = %p)", bufferId, graphicBuffer.get()); } @@ -1885,7 +1885,7 @@ status_t OMXCodec::allocateOutputBuffersFromNativeWindow() { status_t OMXCodec::cancelBufferToNativeWindow(BufferInfo *info) { CHECK_EQ((int)info->mStatus, (int)OWNED_BY_US); - CODEC_LOGV("Calling cancelBuffer on buffer %p", info->mBuffer); + CODEC_LOGV("Calling cancelBuffer on buffer %u", info->mBuffer); int err = mNativeWindow->cancelBuffer( mNativeWindow.get(), info->mMediaBuffer->graphicBuffer().get(), -1); if (err != 0) { @@ -2123,7 +2123,7 @@ void OMXCodec::on_message(const omx_message &msg) { { IOMX::buffer_id buffer = msg.u.extended_buffer_data.buffer; - CODEC_LOGV("EMPTY_BUFFER_DONE(buffer: %p)", buffer); + CODEC_LOGV("EMPTY_BUFFER_DONE(buffer: %u)", buffer); Vector<BufferInfo> *buffers = &mPortBuffers[kPortIndexInput]; size_t i = 0; @@ -2133,7 +2133,7 @@ void OMXCodec::on_message(const omx_message &msg) { CHECK(i < buffers->size()); if ((*buffers)[i].mStatus != OWNED_BY_COMPONENT) { - ALOGW("We already own input buffer %p, yet received " + ALOGW("We already own input buffer %u, yet received " "an EMPTY_BUFFER_DONE.", buffer); } @@ -2147,7 +2147,7 @@ void OMXCodec::on_message(const omx_message &msg) { } if (mPortStatus[kPortIndexInput] == DISABLING) { - CODEC_LOGV("Port is disabled, freeing buffer %p", buffer); + CODEC_LOGV("Port is disabled, freeing buffer %u", buffer); status_t err = freeBuffer(kPortIndexInput, i); CHECK_EQ(err, (status_t)OK); @@ -2169,7 +2169,7 @@ void OMXCodec::on_message(const omx_message &msg) { IOMX::buffer_id buffer = msg.u.extended_buffer_data.buffer; OMX_U32 flags = msg.u.extended_buffer_data.flags; - CODEC_LOGV("FILL_BUFFER_DONE(buffer: %p, size: %ld, flags: 0x%08lx, timestamp: %lld us (%.2f secs))", + CODEC_LOGV("FILL_BUFFER_DONE(buffer: %u, size: %u, flags: 0x%08x, timestamp: %lld us (%.2f secs))", buffer, msg.u.extended_buffer_data.range_length, flags, @@ -2186,14 +2186,14 @@ void OMXCodec::on_message(const omx_message &msg) { BufferInfo *info = &buffers->editItemAt(i); if (info->mStatus != OWNED_BY_COMPONENT) { - ALOGW("We already own output buffer %p, yet received " + ALOGW("We already own output buffer %u, yet received " "a FILL_BUFFER_DONE.", buffer); } info->mStatus = OWNED_BY_US; if (mPortStatus[kPortIndexOutput] == DISABLING) { - CODEC_LOGV("Port is disabled, freeing buffer %p", buffer); + CODEC_LOGV("Port is disabled, freeing buffer %u", buffer); status_t err = freeBuffer(kPortIndexOutput, i); CHECK_EQ(err, (status_t)OK); @@ -2262,7 +2262,7 @@ void OMXCodec::on_message(const omx_message &msg) { kKeyPlatformPrivate, msg.u.extended_buffer_data.platform_private); - buffer->meta_data()->setPointer( + buffer->meta_data()->setInt32( kKeyBufferID, msg.u.extended_buffer_data.buffer); @@ -2404,7 +2404,7 @@ void OMXCodec::onEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) { case OMX_EventError: { - CODEC_LOGE("ERROR(0x%08lx, %ld)", data1, data2); + CODEC_LOGE("OMX_EventError(0x%08x, %u)", data1, data2); setState(ERROR); break; @@ -2412,7 +2412,7 @@ void OMXCodec::onEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) { case OMX_EventPortSettingsChanged: { - CODEC_LOGV("OMX_EventPortSettingsChanged(port=%ld, data2=0x%08lx)", + CODEC_LOGV("OMX_EventPortSettingsChanged(port=%u, data2=0x%08x)", data1, data2); if (data2 == 0 || data2 == OMX_IndexParamPortDefinition) { @@ -2452,7 +2452,7 @@ void OMXCodec::onEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) { // The scale is in 16.16 format. // scale 1.0 = 0x010000. When there is no // need to change the display, skip it. - ALOGV("Get OMX_IndexConfigScale: 0x%lx/0x%lx", + ALOGV("Get OMX_IndexConfigScale: 0x%x/0x%x", scale.xWidth, scale.xHeight); if (scale.xWidth != 0x010000) { @@ -2486,7 +2486,7 @@ void OMXCodec::onEvent(OMX_EVENTTYPE event, OMX_U32 data1, OMX_U32 data2) { default: { - CODEC_LOGV("EVENT(%d, %ld, %ld)", event, data1, data2); + CODEC_LOGV("EVENT(%d, %u, %u)", event, data1, data2); break; } } @@ -2503,7 +2503,7 @@ void OMXCodec::onCmdComplete(OMX_COMMANDTYPE cmd, OMX_U32 data) { case OMX_CommandPortDisable: { OMX_U32 portIndex = data; - CODEC_LOGV("PORT_DISABLED(%ld)", portIndex); + CODEC_LOGV("PORT_DISABLED(%u)", portIndex); CHECK(mState == EXECUTING || mState == RECONFIGURING); CHECK_EQ((int)mPortStatus[portIndex], (int)DISABLING); @@ -2527,7 +2527,7 @@ void OMXCodec::onCmdComplete(OMX_COMMANDTYPE cmd, OMX_U32 data) { status_t err = enablePortAsync(portIndex); if (err != OK) { - CODEC_LOGE("enablePortAsync(%ld) failed (err = %d)", portIndex, err); + CODEC_LOGE("enablePortAsync(%u) failed (err = %d)", portIndex, err); setState(ERROR); } else { err = allocateBuffersOnPort(portIndex); @@ -2548,7 +2548,7 @@ void OMXCodec::onCmdComplete(OMX_COMMANDTYPE cmd, OMX_U32 data) { case OMX_CommandPortEnable: { OMX_U32 portIndex = data; - CODEC_LOGV("PORT_ENABLED(%ld)", portIndex); + CODEC_LOGV("PORT_ENABLED(%u)", portIndex); CHECK(mState == EXECUTING || mState == RECONFIGURING); CHECK_EQ((int)mPortStatus[portIndex], (int)ENABLING); @@ -2569,7 +2569,7 @@ void OMXCodec::onCmdComplete(OMX_COMMANDTYPE cmd, OMX_U32 data) { { OMX_U32 portIndex = data; - CODEC_LOGV("FLUSH_DONE(%ld)", portIndex); + CODEC_LOGV("FLUSH_DONE(%u)", portIndex); CHECK_EQ((int)mPortStatus[portIndex], (int)SHUTTING_DOWN); mPortStatus[portIndex] = ENABLED; @@ -3862,7 +3862,7 @@ status_t OMXCodec::read( return UNKNOWN_ERROR; } - CODEC_LOGV("seeking to %lld us (%.2f secs)", seekTimeUs, seekTimeUs / 1E6); + CODEC_LOGV("seeking to %" PRId64 " us (%.2f secs)", seekTimeUs, seekTimeUs / 1E6); mSignalledEOS = false; diff --git a/media/libstagefright/OggExtractor.cpp b/media/libstagefright/OggExtractor.cpp index f3eeb03..1965ef9 100644 --- a/media/libstagefright/OggExtractor.cpp +++ b/media/libstagefright/OggExtractor.cpp @@ -320,22 +320,26 @@ status_t MyVorbisExtractor::seekToTime(int64_t timeUs) { } size_t left = 0; - size_t right = mTableOfContents.size(); - while (left < right) { - size_t center = left / 2 + right / 2 + (left & right & 1); + size_t right_plus_one = mTableOfContents.size(); + while (left < right_plus_one) { + size_t center = left + (right_plus_one - left) / 2; const TOCEntry &entry = mTableOfContents.itemAt(center); if (timeUs < entry.mTimeUs) { - right = center; + right_plus_one = center; } else if (timeUs > entry.mTimeUs) { left = center + 1; } else { - left = right = center; + left = center; break; } } + if (left == mTableOfContents.size()) { + --left; + } + const TOCEntry &entry = mTableOfContents.itemAt(left); ALOGV("seeking to entry %d / %d at offset %lld", diff --git a/media/libstagefright/SampleTable.cpp b/media/libstagefright/SampleTable.cpp index d9858d7..318555e 100644 --- a/media/libstagefright/SampleTable.cpp +++ b/media/libstagefright/SampleTable.cpp @@ -520,83 +520,72 @@ void SampleTable::buildSampleEntriesTable() { } status_t SampleTable::findSampleAtTime( - uint32_t req_time, uint32_t *sample_index, uint32_t flags) { + uint64_t req_time, uint64_t scale_num, uint64_t scale_den, + uint32_t *sample_index, uint32_t flags) { buildSampleEntriesTable(); uint32_t left = 0; - uint32_t right = mNumSampleSizes; - while (left < right) { - uint32_t center = (left + right) / 2; - uint32_t centerTime = mSampleTimeEntries[center].mCompositionTime; + uint32_t right_plus_one = mNumSampleSizes; + while (left < right_plus_one) { + uint32_t center = left + (right_plus_one - left) / 2; + uint64_t centerTime = + getSampleTime(center, scale_num, scale_den); if (req_time < centerTime) { - right = center; + right_plus_one = center; } else if (req_time > centerTime) { left = center + 1; } else { - left = center; - break; + *sample_index = mSampleTimeEntries[center].mSampleIndex; + return OK; } } - if (left == mNumSampleSizes) { + uint32_t closestIndex = left; + + if (closestIndex == mNumSampleSizes) { if (flags == kFlagAfter) { return ERROR_OUT_OF_RANGE; } - - --left; + flags = kFlagBefore; + } else if (closestIndex == 0) { + if (flags == kFlagBefore) { + // normally we should return out of range, but that is + // treated as end-of-stream. instead return first sample + // + // return ERROR_OUT_OF_RANGE; + } + flags = kFlagAfter; } - uint32_t closestIndex = left; - switch (flags) { case kFlagBefore: { - while (closestIndex > 0 - && mSampleTimeEntries[closestIndex].mCompositionTime - > req_time) { - --closestIndex; - } + --closestIndex; break; } case kFlagAfter: { - while (closestIndex + 1 < mNumSampleSizes - && mSampleTimeEntries[closestIndex].mCompositionTime - < req_time) { - ++closestIndex; - } + // nothing to do break; } default: { CHECK(flags == kFlagClosest); - - if (closestIndex > 0) { - // Check left neighbour and pick closest. - uint32_t absdiff1 = - abs_difference( - mSampleTimeEntries[closestIndex].mCompositionTime, - req_time); - - uint32_t absdiff2 = - abs_difference( - mSampleTimeEntries[closestIndex - 1].mCompositionTime, - req_time); - - if (absdiff1 > absdiff2) { - closestIndex = closestIndex - 1; - } + // pick closest based on timestamp. use abs_difference for safety + if (abs_difference( + getSampleTime(closestIndex, scale_num, scale_den), req_time) > + abs_difference( + req_time, getSampleTime(closestIndex - 1, scale_num, scale_den))) { + --closestIndex; } - break; } } *sample_index = mSampleTimeEntries[closestIndex].mSampleIndex; - return OK; } @@ -618,109 +607,85 @@ status_t SampleTable::findSyncSampleNear( } uint32_t left = 0; - uint32_t right = mNumSyncSamples; - while (left < right) { - uint32_t center = left + (right - left) / 2; + uint32_t right_plus_one = mNumSyncSamples; + while (left < right_plus_one) { + uint32_t center = left + (right_plus_one - left) / 2; uint32_t x = mSyncSamples[center]; if (start_sample_index < x) { - right = center; + right_plus_one = center; } else if (start_sample_index > x) { left = center + 1; } else { - left = center; - break; + *sample_index = x; + return OK; } } + if (left == mNumSyncSamples) { if (flags == kFlagAfter) { ALOGE("tried to find a sync frame after the last one: %d", left); return ERROR_OUT_OF_RANGE; } - left = left - 1; + flags = kFlagBefore; } + else if (left == 0) { + if (flags == kFlagBefore) { + ALOGE("tried to find a sync frame before the first one: %d", left); - // Now ssi[left] is the sync sample index just before (or at) - // start_sample_index. - // Also start_sample_index < ssi[left + 1], if left + 1 < mNumSyncSamples. - - uint32_t x = mSyncSamples[left]; - - if (left + 1 < mNumSyncSamples) { - uint32_t y = mSyncSamples[left + 1]; - - // our sample lies between sync samples x and y. - - status_t err = mSampleIterator->seekTo(start_sample_index); - if (err != OK) { - return err; - } - - uint32_t sample_time = mSampleIterator->getSampleTime(); - - err = mSampleIterator->seekTo(x); - if (err != OK) { - return err; - } - uint32_t x_time = mSampleIterator->getSampleTime(); - - err = mSampleIterator->seekTo(y); - if (err != OK) { - return err; - } - - uint32_t y_time = mSampleIterator->getSampleTime(); - - if (abs_difference(x_time, sample_time) - > abs_difference(y_time, sample_time)) { - // Pick the sync sample closest (timewise) to the start-sample. - x = y; - ++left; + // normally we should return out of range, but that is + // treated as end-of-stream. instead seek to first sync + // + // return ERROR_OUT_OF_RANGE; } + flags = kFlagAfter; } + // Now ssi[left - 1] <(=) start_sample_index <= ssi[left] switch (flags) { case kFlagBefore: { - if (x > start_sample_index) { - CHECK(left > 0); - - x = mSyncSamples[left - 1]; - - if (x > start_sample_index) { - // The table of sync sample indices was not sorted - // properly. - return ERROR_MALFORMED; - } - } + --left; break; } - case kFlagAfter: { - if (x < start_sample_index) { - if (left + 1 >= mNumSyncSamples) { - return ERROR_OUT_OF_RANGE; - } - - x = mSyncSamples[left + 1]; - - if (x < start_sample_index) { - // The table of sync sample indices was not sorted - // properly. - return ERROR_MALFORMED; - } - } - + // nothing to do break; } - default: + { + // this route is not used, but implement it nonetheless + CHECK(flags == kFlagClosest); + + status_t err = mSampleIterator->seekTo(start_sample_index); + if (err != OK) { + return err; + } + uint32_t sample_time = mSampleIterator->getSampleTime(); + + err = mSampleIterator->seekTo(mSyncSamples[left]); + if (err != OK) { + return err; + } + uint32_t upper_time = mSampleIterator->getSampleTime(); + + err = mSampleIterator->seekTo(mSyncSamples[left - 1]); + if (err != OK) { + return err; + } + uint32_t lower_time = mSampleIterator->getSampleTime(); + + // use abs_difference for safety + if (abs_difference(upper_time, sample_time) > + abs_difference(sample_time, lower_time)) { + --left; + } break; + } } - *sample_index = x; - + *sample_index = mSyncSamples[left]; return OK; } diff --git a/media/libstagefright/StagefrightMediaScanner.cpp b/media/libstagefright/StagefrightMediaScanner.cpp index 2b51a29..f3fc3f6 100644 --- a/media/libstagefright/StagefrightMediaScanner.cpp +++ b/media/libstagefright/StagefrightMediaScanner.cpp @@ -202,7 +202,7 @@ MediaScanResult StagefrightMediaScanner::processFileInternal( return MEDIA_SCAN_RESULT_OK; } -char *StagefrightMediaScanner::extractAlbumArt(int fd) { +MediaAlbumArt *StagefrightMediaScanner::extractAlbumArt(int fd) { ALOGV("extractAlbumArt %d", fd); off64_t size = lseek64(fd, 0, SEEK_END); @@ -214,15 +214,9 @@ char *StagefrightMediaScanner::extractAlbumArt(int fd) { sp<MediaMetadataRetriever> mRetriever(new MediaMetadataRetriever); if (mRetriever->setDataSource(fd, 0, size) == OK) { sp<IMemory> mem = mRetriever->extractAlbumArt(); - if (mem != NULL) { MediaAlbumArt *art = static_cast<MediaAlbumArt *>(mem->pointer()); - - char *data = (char *)malloc(art->mSize + 4); - *(int32_t *)data = art->mSize; - memcpy(&data[4], &art[1], art->mSize); - - return data; + return art->clone(); } } diff --git a/media/libstagefright/StagefrightMetadataRetriever.cpp b/media/libstagefright/StagefrightMetadataRetriever.cpp index fcd9a85..e4d3c79 100644 --- a/media/libstagefright/StagefrightMetadataRetriever.cpp +++ b/media/libstagefright/StagefrightMetadataRetriever.cpp @@ -375,10 +375,7 @@ VideoFrame *StagefrightMetadataRetriever::getFrameAtTime( size_t dataSize; if (fileMeta->findData(kKeyAlbumArt, &type, &data, &dataSize) && mAlbumArt == NULL) { - mAlbumArt = new MediaAlbumArt; - mAlbumArt->mSize = dataSize; - mAlbumArt->mData = new uint8_t[dataSize]; - memcpy(mAlbumArt->mData, data, dataSize); + mAlbumArt = MediaAlbumArt::fromData(dataSize, data); } VideoFrame *frame = @@ -411,7 +408,7 @@ MediaAlbumArt *StagefrightMetadataRetriever::extractAlbumArt() { } if (mAlbumArt) { - return new MediaAlbumArt(*mAlbumArt); + return mAlbumArt->clone(); } return NULL; @@ -480,10 +477,7 @@ void StagefrightMetadataRetriever::parseMetaData() { size_t dataSize; if (meta->findData(kKeyAlbumArt, &type, &data, &dataSize) && mAlbumArt == NULL) { - mAlbumArt = new MediaAlbumArt; - mAlbumArt->mSize = dataSize; - mAlbumArt->mData = new uint8_t[dataSize]; - memcpy(mAlbumArt->mData, data, dataSize); + mAlbumArt = MediaAlbumArt::fromData(dataSize, data); } size_t numTracks = mExtractor->countTracks(); diff --git a/media/libstagefright/chromium_http/support.cpp b/media/libstagefright/chromium_http/support.cpp index 3de4877..09c87be 100644 --- a/media/libstagefright/chromium_http/support.cpp +++ b/media/libstagefright/chromium_http/support.cpp @@ -159,7 +159,7 @@ bool logMessageHandler( struct AutoPrioritySaver { AutoPrioritySaver() - : mTID(androidGetTid()), + : mTID(gettid()), mPrevPriority(androidGetThreadPriority(mTID)) { androidSetThreadPriority(mTID, ANDROID_PRIORITY_NORMAL); } diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s index 8451195..f23b5a0 100644 --- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s +++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/Filt_6k_7k_opt.s @@ -29,6 +29,7 @@ .global Filt_6k_7k_asm .extern voAWB_Copy .extern fir_6k_7k + .hidden fir_6k_7k Filt_6k_7k_asm: diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s index ac2dd13..deb7efc 100644 --- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s +++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV5E/pred_lt4_1_opt.s @@ -32,6 +32,7 @@ .section .text .global pred_lt4_asm .extern inter4_2 + .hidden inter4_2 pred_lt4_asm: diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s index fc42a03..8df0caa 100644 --- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s +++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/Filt_6k_7k_neon.s @@ -28,6 +28,7 @@ .section .text .global Filt_6k_7k_asm .extern fir_6k_7k + .hidden fir_6k_7k Filt_6k_7k_asm: diff --git a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s index 8d2aaf2..67be1ed 100644 --- a/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s +++ b/media/libstagefright/codecs/amrwbenc/src/asm/ARMV7/pred_lt4_1_neon.s @@ -29,6 +29,7 @@ .section .text .global pred_lt4_asm .extern inter4_2 + .hidden inter4_2 pred_lt4_asm: diff --git a/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp b/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp index 89f0fed..27c63c3 100644 --- a/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp +++ b/media/libstagefright/codecs/avc/enc/SoftAVCEncoder.cpp @@ -342,10 +342,10 @@ OMX_ERRORTYPE SoftAVCEncoder::releaseEncoder() { PVAVCCleanUpEncoder(mHandle); releaseOutputBuffers(); - delete mInputFrameData; + free(mInputFrameData); mInputFrameData = NULL; - delete mSliceGroup; + free(mSliceGroup); mSliceGroup = NULL; delete mEncParams; @@ -819,9 +819,10 @@ void SoftAVCEncoder::onQueueFilled(OMX_U32 portIndex) { videoInput.coding_timestamp = (inHeader->nTimeStamp + 500) / 1000; // in ms uint8_t *inputData = NULL; if (mStoreMetaDataInBuffers) { - if (inHeader->nFilledLen != 8) { + if (inHeader->nFilledLen != (sizeof(OMX_U32) + sizeof(buffer_handle_t))) { ALOGE("MetaData buffer is wrong size! " - "(got %u bytes, expected 8)", inHeader->nFilledLen); + "(got %u bytes, expected %d)", inHeader->nFilledLen, + sizeof(OMX_U32) + sizeof(buffer_handle_t)); mSignalledError = true; notify(OMX_EventError, OMX_ErrorUndefined, 0, 0); return; @@ -985,7 +986,7 @@ uint8_t *SoftAVCEncoder::extractGrallocData(void *data, buffer_handle_t *buffer) kMetadataBufferTypeGrallocSource, type); return NULL; } - buffer_handle_t imgBuffer = *(buffer_handle_t*)((uint8_t*)data + 4); + buffer_handle_t imgBuffer = *(buffer_handle_t*)((uint8_t*)data + sizeof(OMX_U32)); const Rect rect(mVideoWidth, mVideoHeight); uint8_t *img; diff --git a/media/libstagefright/codecs/m4v_h263/enc/SoftMPEG4Encoder.cpp b/media/libstagefright/codecs/m4v_h263/enc/SoftMPEG4Encoder.cpp index da5b785..bf77f4a 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/SoftMPEG4Encoder.cpp +++ b/media/libstagefright/codecs/m4v_h263/enc/SoftMPEG4Encoder.cpp @@ -721,7 +721,7 @@ void SoftMPEG4Encoder::onQueueFilled(OMX_U32 /* portIndex */) { vin.uChan = vin.yChan + vin.height * vin.pitch; vin.vChan = vin.uChan + ((vin.height * vin.pitch) >> 2); - unsigned long modTimeMs = 0; + ULong modTimeMs = 0; int32_t nLayer = 0; MP4HintTrack hintTrack; if (!PVEncodeVideoFrame(mHandle, &vin, &vout, diff --git a/media/libstagefright/codecs/m4v_h263/enc/include/mp4enc_api.h b/media/libstagefright/codecs/m4v_h263/enc/include/mp4enc_api.h index a54fd8b..9451479 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/include/mp4enc_api.h +++ b/media/libstagefright/codecs/m4v_h263/enc/include/mp4enc_api.h @@ -29,7 +29,7 @@ typedef int Int; typedef unsigned short UShort; typedef short Short; typedef unsigned int Bool; -typedef unsigned long ULong; +typedef uint32_t ULong; #define PV_CODEC_INIT 0 #define PV_CODEC_STOP 1 diff --git a/media/libstagefright/codecs/m4v_h263/enc/src/motion_comp.cpp b/media/libstagefright/codecs/m4v_h263/enc/src/motion_comp.cpp index 06e8926..9a967c2 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/src/motion_comp.cpp +++ b/media/libstagefright/codecs/m4v_h263/enc/src/motion_comp.cpp @@ -363,7 +363,7 @@ Int GetPredAdvBy0x0( /* initialize offset to adjust pixel counter */ /* the next row; full-pel resolution */ - tmp = (ULong)prev & 0x3; + tmp = (uintptr_t)prev & 0x3; if (tmp == 0) /* word-aligned */ { @@ -466,7 +466,7 @@ Int GetPredAdvBy0x1( /* Branch based on pixel location (half-pel or full-pel) for x and y */ rec -= 12; /* preset */ - tmp = (ULong)prev & 3; + tmp = (uintptr_t)prev & 3; mask = 254; mask |= (mask << 8); mask |= (mask << 16); /* 0xFEFEFEFE */ @@ -791,7 +791,7 @@ Int GetPredAdvBy1x0( /* Branch based on pixel location (half-pel or full-pel) for x and y */ rec -= 12; /* preset */ - tmp = (ULong)prev & 3; + tmp = (uintptr_t)prev & 3; mask = 254; mask |= (mask << 8); mask |= (mask << 16); /* 0xFEFEFEFE */ @@ -1140,7 +1140,7 @@ Int GetPredAdvBy1x1( mask |= (mask << 8); mask |= (mask << 16); /* 0x3f3f3f3f */ - tmp = (ULong)prev & 3; + tmp = (uintptr_t)prev & 3; rec -= 4; /* preset */ diff --git a/media/libstagefright/codecs/m4v_h263/enc/src/mp4def.h b/media/libstagefright/codecs/m4v_h263/enc/src/mp4def.h index 0d5a3e8..2d44482 100644 --- a/media/libstagefright/codecs/m4v_h263/enc/src/mp4def.h +++ b/media/libstagefright/codecs/m4v_h263/enc/src/mp4def.h @@ -60,7 +60,7 @@ typedef unsigned short UShort; typedef short Short; typedef short int SInt; typedef unsigned int Bool; -typedef unsigned long ULong; +typedef uint32_t ULong; typedef void Void; #define PV_CODEC_INIT 0 diff --git a/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s b/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s index b74c849..1140ed7 100644 --- a/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s +++ b/media/libstagefright/codecs/mp3dec/src/asm/pvmp3_polyphase_filter_window_gcc.s @@ -35,6 +35,7 @@ .text .extern pqmfSynthWin +.hidden pqmfSynthWin diff --git a/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src_gcc/armVCM4P10_DecodeCoeffsToPair_s.S b/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src_gcc/armVCM4P10_DecodeCoeffsToPair_s.S index 073dbba..bcc6b6b 100644 --- a/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src_gcc/armVCM4P10_DecodeCoeffsToPair_s.S +++ b/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src_gcc/armVCM4P10_DecodeCoeffsToPair_s.S @@ -10,6 +10,22 @@ .fpu neon .text + .extern armVCM4P10_CAVLCCoeffTokenTables + .extern armVCM4P10_SuffixToLevel + .extern armVCM4P10_CAVLCTotalZeros2x2Tables + .extern armVCM4P10_CAVLCTotalZeroTables + .extern armVCM4P10_CAVLCRunBeforeTables + .extern armVCM4P10_ZigZag_2x2 + .extern armVCM4P10_ZigZag_4x4 + + .hidden armVCM4P10_CAVLCCoeffTokenTables + .hidden armVCM4P10_SuffixToLevel + .hidden armVCM4P10_CAVLCTotalZeros2x2Tables + .hidden armVCM4P10_CAVLCTotalZeroTables + .hidden armVCM4P10_CAVLCRunBeforeTables + .hidden armVCM4P10_ZigZag_2x2 + .hidden armVCM4P10_ZigZag_4x4 + .global armVCM4P10_DecodeCoeffsToPair .func armVCM4P10_DecodeCoeffsToPair armVCM4P10_DecodeCoeffsToPair: diff --git a/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src_gcc/armVCM4P10_DequantTables_s.S b/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src_gcc/armVCM4P10_DequantTables_s.S index 44eb428..5bc7875 100644 --- a/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src_gcc/armVCM4P10_DequantTables_s.S +++ b/media/libstagefright/codecs/on2/h264dec/omxdl/arm_neon/vc/m4p10/src_gcc/armVCM4P10_DequantTables_s.S @@ -20,6 +20,14 @@ .global armVCM4P10_QPModuloTable .global armVCM4P10_VMatrixU16 + .hidden armVCM4P10_QPDivTable + .hidden armVCM4P10_VMatrixQPModTable + .hidden armVCM4P10_PosToVCol4x4 + .hidden armVCM4P10_PosToVCol2x2 + .hidden armVCM4P10_VMatrix + .hidden armVCM4P10_QPModuloTable + .hidden armVCM4P10_VMatrixU16 + armVCM4P10_PosToVCol4x4: .byte 0, 2, 0, 2 .byte 2, 1, 2, 1 diff --git a/media/libstagefright/httplive/M3UParser.cpp b/media/libstagefright/httplive/M3UParser.cpp index 20c3a76..0700de0 100644 --- a/media/libstagefright/httplive/M3UParser.cpp +++ b/media/libstagefright/httplive/M3UParser.cpp @@ -398,6 +398,8 @@ static bool MakeURL(const char *baseURL, const char *url, AString *out) { // Base URL must be absolute return false; } + const size_t schemeEnd = (strstr(baseURL, "//") - baseURL) + 2; + CHECK(schemeEnd == 7 || schemeEnd == 8); if (!strncasecmp("http://", url, 7) || !strncasecmp("https://", url, 8)) { // "url" is already an absolute URL, ignore base URL. @@ -442,7 +444,7 @@ static bool MakeURL(const char *baseURL, const char *url, AString *out) { // Check whether the found slash actually is part of the path // and not part of the "http://". - if (end > 6) { + if (end >= schemeEnd) { out->setTo(baseURL, end); } else { out->setTo(baseURL); @@ -713,6 +715,9 @@ status_t M3UParser::parseStreamInf( key.tolower(); const AString &codecs = unquoteString(val); + if (meta->get() == NULL) { + *meta = new AMessage; + } (*meta)->setString(key.c_str(), codecs.c_str()); } else if (!strcasecmp("audio", key.c_str()) || !strcasecmp("video", key.c_str()) @@ -736,6 +741,9 @@ status_t M3UParser::parseStreamInf( } key.tolower(); + if (meta->get() == NULL) { + *meta = new AMessage; + } (*meta)->setString(key.c_str(), groupID.c_str()); } } diff --git a/media/libstagefright/include/OMX.h b/media/libstagefright/include/OMX.h index 31a5077..cd51bbf 100644 --- a/media/libstagefright/include/OMX.h +++ b/media/libstagefright/include/OMX.h @@ -134,10 +134,10 @@ public: OMX_IN OMX_PTR pEventData); OMX_ERRORTYPE OnEmptyBufferDone( - node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); OMX_ERRORTYPE OnFillBufferDone( - node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); void invalidateNodeID(node_id node); diff --git a/media/libstagefright/include/OMXNodeInstance.h b/media/libstagefright/include/OMXNodeInstance.h index 339179e..3967dc6 100644 --- a/media/libstagefright/include/OMXNodeInstance.h +++ b/media/libstagefright/include/OMXNodeInstance.h @@ -138,12 +138,25 @@ private: OMX::buffer_id mID; }; Vector<ActiveBuffer> mActiveBuffers; +#ifdef __LP64__ + Mutex mBufferIDLock; + uint32_t mBufferIDCount; + KeyedVector<OMX::buffer_id, OMX_BUFFERHEADERTYPE *> mBufferIDToBufferHeader; + KeyedVector<OMX_BUFFERHEADERTYPE *, OMX::buffer_id> mBufferHeaderToBufferID; +#endif ~OMXNodeInstance(); void addActiveBuffer(OMX_U32 portIndex, OMX::buffer_id id); void removeActiveBuffer(OMX_U32 portIndex, OMX::buffer_id id); void freeActiveBuffers(); + + // For buffer id management + OMX::buffer_id makeBufferID(OMX_BUFFERHEADERTYPE *bufferHeader); + OMX_BUFFERHEADERTYPE *findBufferHeader(OMX::buffer_id buffer); + OMX::buffer_id findBufferID(OMX_BUFFERHEADERTYPE *bufferHeader); + void invalidateBufferID(OMX::buffer_id buffer); + status_t useGraphicBuffer2_l( OMX_U32 portIndex, const sp<GraphicBuffer> &graphicBuffer, OMX::buffer_id *buffer); diff --git a/media/libstagefright/include/SampleTable.h b/media/libstagefright/include/SampleTable.h index 847dff7..ed91adc 100644 --- a/media/libstagefright/include/SampleTable.h +++ b/media/libstagefright/include/SampleTable.h @@ -74,7 +74,8 @@ public: kFlagClosest }; status_t findSampleAtTime( - uint32_t req_time, uint32_t *sample_index, uint32_t flags); + uint64_t req_time, uint64_t scale_num, uint64_t scale_den, + uint32_t *sample_index, uint32_t flags); status_t findSyncSampleNear( uint32_t start_sample_index, uint32_t *sample_index, @@ -137,6 +138,13 @@ private: friend struct SampleIterator; + // normally we don't round + inline uint64_t getSampleTime( + size_t sample_index, uint64_t scale_num, uint64_t scale_den) const { + return (mSampleTimeEntries[sample_index].mCompositionTime + * scale_num) / scale_den; + } + status_t getSampleSize_l(uint32_t sample_index, size_t *sample_size); uint32_t getCompositionTimeOffset(uint32_t sampleIndex); diff --git a/media/libstagefright/omx/OMX.cpp b/media/libstagefright/omx/OMX.cpp index 74076c6..7819fc3 100644 --- a/media/libstagefright/omx/OMX.cpp +++ b/media/libstagefright/omx/OMX.cpp @@ -287,6 +287,7 @@ status_t OMX::sendCommand( status_t OMX::getParameter( node_id node, OMX_INDEXTYPE index, void *params, size_t size) { + ALOGV("getParameter(%u %#x %p %zd)", node, index, params, size); return findInstance(node)->getParameter( index, params, size); } @@ -294,6 +295,7 @@ status_t OMX::getParameter( status_t OMX::setParameter( node_id node, OMX_INDEXTYPE index, const void *params, size_t size) { + ALOGV("setParameter(%u %#x %p %zd)", node, index, params, size); return findInstance(node)->setParameter( index, params, size); } @@ -445,13 +447,13 @@ OMX_ERRORTYPE OMX::OnEvent( } OMX_ERRORTYPE OMX::OnEmptyBufferDone( - node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) { + node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) { ALOGV("OnEmptyBufferDone buffer=%p", pBuffer); omx_message msg; msg.type = omx_message::EMPTY_BUFFER_DONE; msg.node = node; - msg.u.buffer_data.buffer = pBuffer; + msg.u.buffer_data.buffer = buffer; findDispatcher(node)->post(msg); @@ -459,13 +461,13 @@ OMX_ERRORTYPE OMX::OnEmptyBufferDone( } OMX_ERRORTYPE OMX::OnFillBufferDone( - node_id node, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) { + node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) { ALOGV("OnFillBufferDone buffer=%p", pBuffer); omx_message msg; msg.type = omx_message::FILL_BUFFER_DONE; msg.node = node; - msg.u.extended_buffer_data.buffer = pBuffer; + msg.u.extended_buffer_data.buffer = buffer; msg.u.extended_buffer_data.range_offset = pBuffer->nOffset; msg.u.extended_buffer_data.range_length = pBuffer->nFilledLen; msg.u.extended_buffer_data.flags = pBuffer->nFlags; @@ -481,7 +483,7 @@ OMX_ERRORTYPE OMX::OnFillBufferDone( OMX::node_id OMX::makeNodeID(OMXNodeInstance *instance) { // mLock is already held. - node_id node = (node_id)(uintptr_t)++mNodeCounter; + node_id node = (node_id)++mNodeCounter; mNodeIDToInstance.add(node, instance); return node; diff --git a/media/libstagefright/omx/OMXNodeInstance.cpp b/media/libstagefright/omx/OMXNodeInstance.cpp index 8391290..c64dcf0 100644 --- a/media/libstagefright/omx/OMXNodeInstance.cpp +++ b/media/libstagefright/omx/OMXNodeInstance.cpp @@ -92,10 +92,14 @@ OMX_CALLBACKTYPE OMXNodeInstance::kCallbacks = { OMXNodeInstance::OMXNodeInstance( OMX *owner, const sp<IOMXObserver> &observer) : mOwner(owner), - mNodeID(NULL), + mNodeID(0), mHandle(NULL), mObserver(observer), - mDying(false) { + mDying(false) +#ifdef __LP64__ + , mBufferIDCount(0) +#endif +{ } OMXNodeInstance::~OMXNodeInstance() { @@ -232,7 +236,7 @@ status_t OMXNodeInstance::freeNode(OMXMaster *master) { } mOwner->invalidateNodeID(mNodeID); - mNodeID = NULL; + mNodeID = 0; ALOGV("OMXNodeInstance going away."); delete this; @@ -270,7 +274,7 @@ status_t OMXNodeInstance::getParameter( Mutex::Autolock autoLock(mLock); OMX_ERRORTYPE err = OMX_GetParameter(mHandle, index, params); - + ALOGE_IF(err != OMX_ErrorNone, "getParameter(%d) ERROR: %#x", index, err); return StatusFromOMXError(err); } @@ -280,7 +284,7 @@ status_t OMXNodeInstance::setParameter( OMX_ERRORTYPE err = OMX_SetParameter( mHandle, index, const_cast<void *>(params)); - + ALOGE_IF(err != OMX_ErrorNone, "setParameter(%d) ERROR: %#x", index, err); return StatusFromOMXError(err); } @@ -482,7 +486,7 @@ status_t OMXNodeInstance::useBuffer( CHECK_EQ(header->pAppPrivate, buffer_meta); - *buffer = header; + *buffer = makeBufferID(header); addActiveBuffer(portIndex, *buffer); @@ -538,7 +542,7 @@ status_t OMXNodeInstance::useGraphicBuffer2_l( CHECK_EQ(header->pBuffer, bufferHandle); CHECK_EQ(header->pAppPrivate, bufferMeta); - *buffer = header; + *buffer = makeBufferID(header); addActiveBuffer(portIndex, *buffer); @@ -602,7 +606,7 @@ status_t OMXNodeInstance::useGraphicBuffer( CHECK_EQ(header->pAppPrivate, bufferMeta); - *buffer = header; + *buffer = makeBufferID(header); addActiveBuffer(portIndex, *buffer); @@ -614,7 +618,7 @@ status_t OMXNodeInstance::updateGraphicBufferInMeta( OMX::buffer_id buffer) { Mutex::Autolock autoLock(mLock); - OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)(buffer); + OMX_BUFFERHEADERTYPE *header = findBufferHeader(buffer); VideoDecoderOutputMetaData *metadata = (VideoDecoderOutputMetaData *)(header->pBuffer); BufferMeta *bufferMeta = (BufferMeta *)(header->pAppPrivate); @@ -710,7 +714,7 @@ status_t OMXNodeInstance::allocateBuffer( CHECK_EQ(header->pAppPrivate, buffer_meta); - *buffer = header; + *buffer = makeBufferID(header); *buffer_data = header->pBuffer; addActiveBuffer(portIndex, *buffer); @@ -748,7 +752,7 @@ status_t OMXNodeInstance::allocateBufferWithBackup( CHECK_EQ(header->pAppPrivate, buffer_meta); - *buffer = header; + *buffer = makeBufferID(header); addActiveBuffer(portIndex, *buffer); @@ -766,13 +770,14 @@ status_t OMXNodeInstance::freeBuffer( removeActiveBuffer(portIndex, buffer); - OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; + OMX_BUFFERHEADERTYPE *header = findBufferHeader(buffer); BufferMeta *buffer_meta = static_cast<BufferMeta *>(header->pAppPrivate); OMX_ERRORTYPE err = OMX_FreeBuffer(mHandle, portIndex, header); delete buffer_meta; buffer_meta = NULL; + invalidateBufferID(buffer); return StatusFromOMXError(err); } @@ -780,7 +785,7 @@ status_t OMXNodeInstance::freeBuffer( status_t OMXNodeInstance::fillBuffer(OMX::buffer_id buffer) { Mutex::Autolock autoLock(mLock); - OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; + OMX_BUFFERHEADERTYPE *header = findBufferHeader(buffer); header->nFilledLen = 0; header->nOffset = 0; header->nFlags = 0; @@ -796,7 +801,7 @@ status_t OMXNodeInstance::emptyBuffer( OMX_U32 flags, OMX_TICKS timestamp) { Mutex::Autolock autoLock(mLock); - OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)buffer; + OMX_BUFFERHEADERTYPE *header = findBufferHeader(buffer); header->nFilledLen = rangeLength; header->nOffset = rangeOffset; header->nFlags = flags; @@ -897,8 +902,7 @@ void OMXNodeInstance::onMessage(const omx_message &msg) { if (msg.type == omx_message::FILL_BUFFER_DONE) { OMX_BUFFERHEADERTYPE *buffer = - static_cast<OMX_BUFFERHEADERTYPE *>( - msg.u.extended_buffer_data.buffer); + findBufferHeader(msg.u.extended_buffer_data.buffer); BufferMeta *buffer_meta = static_cast<BufferMeta *>(buffer->pAppPrivate); @@ -923,8 +927,7 @@ void OMXNodeInstance::onMessage(const omx_message &msg) { // be very confused. OMX_BUFFERHEADERTYPE *buffer = - static_cast<OMX_BUFFERHEADERTYPE *>( - msg.u.buffer_data.buffer); + findBufferHeader(msg.u.buffer_data.buffer); bufferSource->codecBufferEmptied(buffer); return; @@ -984,7 +987,8 @@ OMX_ERRORTYPE OMXNodeInstance::OnEmptyBufferDone( if (instance->mDying) { return OMX_ErrorNone; } - return instance->owner()->OnEmptyBufferDone(instance->nodeID(), pBuffer); + return instance->owner()->OnEmptyBufferDone(instance->nodeID(), + instance->findBufferID(pBuffer), pBuffer); } // static @@ -996,7 +1000,8 @@ OMX_ERRORTYPE OMXNodeInstance::OnFillBufferDone( if (instance->mDying) { return OMX_ErrorNone; } - return instance->owner()->OnFillBufferDone(instance->nodeID(), pBuffer); + return instance->owner()->OnFillBufferDone(instance->nodeID(), + instance->findBufferID(pBuffer), pBuffer); } void OMXNodeInstance::addActiveBuffer(OMX_U32 portIndex, OMX::buffer_id id) { @@ -1031,4 +1036,67 @@ void OMXNodeInstance::freeActiveBuffers() { } } +#ifdef __LP64__ + +OMX::buffer_id OMXNodeInstance::makeBufferID(OMX_BUFFERHEADERTYPE *bufferHeader) { + if (bufferHeader == NULL) { + return 0; + } + Mutex::Autolock autoLock(mBufferIDLock); + OMX::buffer_id buffer; + do { // handle the very unlikely case of ID overflow + if (++mBufferIDCount == 0) { + ++mBufferIDCount; + } + buffer = (OMX::buffer_id)mBufferIDCount; + } while (mBufferIDToBufferHeader.indexOfKey(buffer) >= 0); + mBufferIDToBufferHeader.add(buffer, bufferHeader); + mBufferHeaderToBufferID.add(bufferHeader, buffer); + return buffer; +} + +OMX_BUFFERHEADERTYPE *OMXNodeInstance::findBufferHeader(OMX::buffer_id buffer) { + if (buffer == 0) { + return NULL; + } + Mutex::Autolock autoLock(mBufferIDLock); + return mBufferIDToBufferHeader.valueFor(buffer); +} + +OMX::buffer_id OMXNodeInstance::findBufferID(OMX_BUFFERHEADERTYPE *bufferHeader) { + if (bufferHeader == NULL) { + return 0; + } + Mutex::Autolock autoLock(mBufferIDLock); + return mBufferHeaderToBufferID.valueFor(bufferHeader); +} + +void OMXNodeInstance::invalidateBufferID(OMX::buffer_id buffer) { + if (buffer == 0) { + return; + } + Mutex::Autolock autoLock(mBufferIDLock); + mBufferHeaderToBufferID.removeItem(mBufferIDToBufferHeader.valueFor(buffer)); + mBufferIDToBufferHeader.removeItem(buffer); +} + +#else + +OMX::buffer_id OMXNodeInstance::makeBufferID(OMX_BUFFERHEADERTYPE *bufferHeader) { + return (OMX::buffer_id)bufferHeader; +} + +OMX_BUFFERHEADERTYPE *OMXNodeInstance::findBufferHeader(OMX::buffer_id buffer) { + return (OMX_BUFFERHEADERTYPE *)buffer; +} + +OMX::buffer_id OMXNodeInstance::findBufferID(OMX_BUFFERHEADERTYPE *bufferHeader) { + return (OMX::buffer_id)bufferHeader; +} + +void OMXNodeInstance::invalidateBufferID(OMX::buffer_id buffer __unused) { +} + +#endif + } // namespace android diff --git a/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp b/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp index eb9fcf7..20a7076 100644 --- a/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp +++ b/media/libstagefright/omx/SoftVideoDecoderOMXComponent.cpp @@ -177,18 +177,19 @@ OMX_ERRORTYPE SoftVideoDecoderOMXComponent::internalGetParameter( { OMX_VIDEO_PARAM_PROFILELEVELTYPE *profileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *) params; + OMX_U32 profileIndex = profileLevel->nProfileIndex; if (profileLevel->nPortIndex != kInputPortIndex) { ALOGE("Invalid port index: %" PRIu32, profileLevel->nPortIndex); return OMX_ErrorUnsupportedIndex; } - if (index >= mNumProfileLevels) { + if (profileIndex >= mNumProfileLevels) { return OMX_ErrorNoMore; } - profileLevel->eProfile = mProfileLevels[index].mProfile; - profileLevel->eLevel = mProfileLevels[index].mLevel; + profileLevel->eProfile = mProfileLevels[profileIndex].mProfile; + profileLevel->eLevel = mProfileLevels[profileIndex].mLevel; return OMX_ErrorNone; } diff --git a/media/libstagefright/rtsp/Android.mk b/media/libstagefright/rtsp/Android.mk index e77c69c..36e8d82 100644 --- a/media/libstagefright/rtsp/Android.mk +++ b/media/libstagefright/rtsp/Android.mk @@ -30,6 +30,8 @@ ifeq ($(TARGET_ARCH),arm) LOCAL_CFLAGS += -Wno-psabi endif +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk + include $(BUILD_STATIC_LIBRARY) ################################################################################ @@ -55,4 +57,6 @@ LOCAL_MODULE_TAGS := optional LOCAL_MODULE:= rtp_test +LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_PATH)/Android.mk + # include $(BUILD_EXECUTABLE) diff --git a/media/mtp/Android.mk b/media/mtp/Android.mk index ac608a1..3af0956 100644 --- a/media/mtp/Android.mk +++ b/media/mtp/Android.mk @@ -39,9 +39,6 @@ LOCAL_MODULE:= libmtp LOCAL_CFLAGS := -DMTP_DEVICE -DMTP_HOST -# Needed for <bionic_time.h> -LOCAL_C_INCLUDES := bionic/libc/private - LOCAL_SHARED_LIBRARIES := libutils libcutils liblog libusbhost libbinder include $(BUILD_SHARED_LIBRARY) diff --git a/media/mtp/MtpDataPacket.cpp b/media/mtp/MtpDataPacket.cpp index c4f87a0..e6e19e3 100644 --- a/media/mtp/MtpDataPacket.cpp +++ b/media/mtp/MtpDataPacket.cpp @@ -363,7 +363,7 @@ int MtpDataPacket::write(int fd) { } int MtpDataPacket::writeData(int fd, void* data, uint32_t length) { - allocate(length); + allocate(length + MTP_CONTAINER_HEADER_SIZE); memcpy(mBuffer + MTP_CONTAINER_HEADER_SIZE, data, length); length += MTP_CONTAINER_HEADER_SIZE; MtpPacket::putUInt32(MTP_CONTAINER_LENGTH_OFFSET, length); diff --git a/media/mtp/MtpUtils.cpp b/media/mtp/MtpUtils.cpp index 6ec8876..0667bdd 100644 --- a/media/mtp/MtpUtils.cpp +++ b/media/mtp/MtpUtils.cpp @@ -19,7 +19,8 @@ #include <stdio.h> #include <time.h> -#include <cutils/tztime.h> +#include <../private/bionic_time.h> /* TODO: switch this code to icu4c! */ + #include "MtpUtils.h" namespace android { |