summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2018-03-15 16:59:37 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2018-03-15 16:59:37 +0000
commit18cd9b58775e53b2ec1ffe571d165ad8fddfeff4 (patch)
treed263de39a2b9466fd5c5caa61c0da365c26af38e
parent8def45966381187013c612c22dcc4efd9682fcdd (diff)
parent87d12ea5e997a12c9edd5139082aec0feacacb27 (diff)
downloadav-18cd9b58775e53b2ec1ffe571d165ad8fddfeff4.tar.gz
Snap for 4603989 from 87d12ea5e997a12c9edd5139082aec0feacacb27 to oc-m2-releaseandroid-8.1.0_r20oreo-m2-release
Change-Id: I3b178a779a03034cb0b2863d64134524bfc2b412
-rw-r--r--media/libmedia/omx/1.0/WOmxNode.cpp3
-rw-r--r--media/libmediaplayerservice/MediaPlayerFactory.cpp4
-rw-r--r--media/libmediaplayerservice/MediaPlayerFactory.h2
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.cpp11
-rw-r--r--media/libmediaplayerservice/MediaPlayerService.h6
-rw-r--r--media/libmediaplayerservice/include/MediaPlayerInterface.h16
-rw-r--r--media/libstagefright/avc_utils.cpp2
-rw-r--r--media/libstagefright/httplive/M3UParser.cpp7
-rw-r--r--media/libstagefright/omx/1.0/WOmxNode.cpp3
9 files changed, 30 insertions, 24 deletions
diff --git a/media/libmedia/omx/1.0/WOmxNode.cpp b/media/libmedia/omx/1.0/WOmxNode.cpp
index 0b40e8d467..2cd8b760d1 100644
--- a/media/libmedia/omx/1.0/WOmxNode.cpp
+++ b/media/libmedia/omx/1.0/WOmxNode.cpp
@@ -151,7 +151,8 @@ status_t LWOmxNode::allocateSecureBuffer(
hidl_handle const& outNativeHandle) {
fnStatus = toStatusT(status);
*buffer = outBuffer;
- *native_handle = NativeHandle::create(
+ *native_handle = outNativeHandle.getNativeHandle() == nullptr ?
+ nullptr : NativeHandle::create(
native_handle_clone(outNativeHandle), true);
}));
return transStatus == NO_ERROR ? fnStatus : transStatus;
diff --git a/media/libmediaplayerservice/MediaPlayerFactory.cpp b/media/libmediaplayerservice/MediaPlayerFactory.cpp
index 6da1ec1823..cd0a003668 100644
--- a/media/libmediaplayerservice/MediaPlayerFactory.cpp
+++ b/media/libmediaplayerservice/MediaPlayerFactory.cpp
@@ -126,7 +126,7 @@ player_type MediaPlayerFactory::getPlayerType(const sp<IMediaPlayer>& client,
sp<MediaPlayerBase> MediaPlayerFactory::createPlayer(
player_type playerType,
- void* cookie,
+ const wp<IMediaPlayer> &client,
notify_callback_f notifyFunc,
pid_t pid) {
sp<MediaPlayerBase> p;
@@ -152,7 +152,7 @@ sp<MediaPlayerBase> MediaPlayerFactory::createPlayer(
init_result = p->initCheck();
if (init_result == NO_ERROR) {
- p->setNotifyCallback(cookie, notifyFunc);
+ p->setNotifyCallback(client, notifyFunc);
} else {
ALOGE("Failed to create player object of type %d, initCheck failed"
" (res = %d)", playerType, init_result);
diff --git a/media/libmediaplayerservice/MediaPlayerFactory.h b/media/libmediaplayerservice/MediaPlayerFactory.h
index e22a56fe6e..6aedeb2ebc 100644
--- a/media/libmediaplayerservice/MediaPlayerFactory.h
+++ b/media/libmediaplayerservice/MediaPlayerFactory.h
@@ -65,7 +65,7 @@ class MediaPlayerFactory {
const sp<DataSource> &source);
static sp<MediaPlayerBase> createPlayer(player_type playerType,
- void* cookie,
+ const wp<IMediaPlayer> &client,
notify_callback_f notifyFunc,
pid_t pid);
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index 3f5068487a..6e17b8d2f9 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -1430,12 +1430,13 @@ status_t MediaPlayerService::Client::getRetransmitEndpoint(
}
void MediaPlayerService::Client::notify(
- void* cookie, int msg, int ext1, int ext2, const Parcel *obj)
+ const wp<IMediaPlayer> &listener, int msg, int ext1, int ext2, const Parcel *obj)
{
- Client* client = static_cast<Client*>(cookie);
- if (client == NULL) {
+ sp<IMediaPlayer> spListener = listener.promote();
+ if (spListener == NULL) {
return;
}
+ Client* client = static_cast<Client*>(spListener.get());
sp<IMediaPlayerClient> c;
sp<Client> nextClient;
@@ -1483,7 +1484,7 @@ void MediaPlayerService::Client::notify(
}
if (c != NULL) {
- ALOGV("[%d] notify (%p, %d, %d, %d)", client->mConnId, cookie, msg, ext1, ext2);
+ ALOGV("[%d] notify (%p, %d, %d, %d)", client->mConnId, spListener.get(), msg, ext1, ext2);
c->notify(msg, ext1, ext2, obj);
}
}
@@ -1541,7 +1542,7 @@ status_t MediaPlayerService::Client::releaseDrm()
#if CALLBACK_ANTAGONIZER
const int Antagonizer::interval = 10000; // 10 msecs
-Antagonizer::Antagonizer(notify_callback_f cb, void* client) :
+Antagonizer::Antagonizer(notify_callback_f cb, const wp<IMediaPlayer> &client) :
mExit(false), mActive(false), mClient(client), mCb(cb)
{
createThread(callbackThread, this);
diff --git a/media/libmediaplayerservice/MediaPlayerService.h b/media/libmediaplayerservice/MediaPlayerService.h
index e35d098d81..f043f32611 100644
--- a/media/libmediaplayerservice/MediaPlayerService.h
+++ b/media/libmediaplayerservice/MediaPlayerService.h
@@ -51,7 +51,7 @@ class MediaRecorderClient;
#if CALLBACK_ANTAGONIZER
class Antagonizer {
public:
- Antagonizer(notify_callback_f cb, void* client);
+ Antagonizer(notify_callback_f cb, const wp<IMediaPlayer> &client);
void start() { mActive = true; }
void stop() { mActive = false; }
void kill();
@@ -63,7 +63,7 @@ private:
Condition mCondition;
bool mExit;
bool mActive;
- void* mClient;
+ wp<IMediaPlayer> mClient;
notify_callback_f mCb;
};
#endif
@@ -365,7 +365,7 @@ private:
status_t setDataSource_post(const sp<MediaPlayerBase>& p,
status_t status);
- static void notify(void* cookie, int msg,
+ static void notify(const wp<IMediaPlayer> &cookie, int msg,
int ext1, int ext2, const Parcel *obj);
pid_t pid() const { return mPid; }
diff --git a/media/libmediaplayerservice/include/MediaPlayerInterface.h b/media/libmediaplayerservice/include/MediaPlayerInterface.h
index e8d59a7297..34f1fe430d 100644
--- a/media/libmediaplayerservice/include/MediaPlayerInterface.h
+++ b/media/libmediaplayerservice/include/MediaPlayerInterface.h
@@ -67,7 +67,7 @@ enum player_type {
#define AUDIO_SINK_MIN_DEEP_BUFFER_DURATION_US 5000000
// callback mechanism for passing messages to MediaPlayer object
-typedef void (*notify_callback_f)(void* cookie,
+typedef void (*notify_callback_f)(const wp<IMediaPlayer> &listener,
int msg, int ext1, int ext2, const Parcel *obj);
// abstract base class - use MediaPlayerInterface
@@ -152,7 +152,7 @@ public:
virtual sp<VolumeShaper::State> getVolumeShaperState(int id);
};
- MediaPlayerBase() : mCookie(0), mNotify(0) {}
+ MediaPlayerBase() : mClient(0), mNotify(0) {}
virtual ~MediaPlayerBase() {}
virtual status_t initCheck() = 0;
virtual bool hardwareOutput() = 0;
@@ -263,22 +263,22 @@ public:
};
void setNotifyCallback(
- void* cookie, notify_callback_f notifyFunc) {
+ const wp<IMediaPlayer> &client, notify_callback_f notifyFunc) {
Mutex::Autolock autoLock(mNotifyLock);
- mCookie = cookie; mNotify = notifyFunc;
+ mClient = client; mNotify = notifyFunc;
}
void sendEvent(int msg, int ext1=0, int ext2=0,
const Parcel *obj=NULL) {
notify_callback_f notifyCB;
- void* cookie;
+ wp<IMediaPlayer> client;
{
Mutex::Autolock autoLock(mNotifyLock);
notifyCB = mNotify;
- cookie = mCookie;
+ client = mClient;
}
- if (notifyCB) notifyCB(cookie, msg, ext1, ext2, obj);
+ if (notifyCB) notifyCB(client, msg, ext1, ext2, obj);
}
virtual status_t dump(int /* fd */, const Vector<String16>& /* args */) const {
@@ -297,7 +297,7 @@ private:
friend class MediaPlayerService;
Mutex mNotifyLock;
- void* mCookie;
+ wp<IMediaPlayer> mClient;
notify_callback_f mNotify;
};
diff --git a/media/libstagefright/avc_utils.cpp b/media/libstagefright/avc_utils.cpp
index a745692ac8..ea2433afc4 100644
--- a/media/libstagefright/avc_utils.cpp
+++ b/media/libstagefright/avc_utils.cpp
@@ -339,7 +339,7 @@ static sp<ABuffer> FindNAL(const uint8_t *data, size_t size, unsigned nalType) {
const uint8_t *nalStart;
size_t nalSize;
while (getNextNALUnit(&data, &size, &nalStart, &nalSize, true) == OK) {
- if ((nalStart[0] & 0x1f) == nalType) {
+ if (nalSize > 0 && (nalStart[0] & 0x1f) == nalType) {
sp<ABuffer> buffer = new ABuffer(nalSize);
memcpy(buffer->data(), nalStart, nalSize);
return buffer;
diff --git a/media/libstagefright/httplive/M3UParser.cpp b/media/libstagefright/httplive/M3UParser.cpp
index 8a6482b0f6..214feab115 100644
--- a/media/libstagefright/httplive/M3UParser.cpp
+++ b/media/libstagefright/httplive/M3UParser.cpp
@@ -658,10 +658,13 @@ status_t M3UParser::parse(const void *_data, size_t size) {
}
if (!line.startsWith("#")) {
+ if (itemMeta == NULL) {
+ ALOGV("itemMeta == NULL");
+ return ERROR_MALFORMED;
+ }
if (!mIsVariantPlaylist) {
int64_t durationUs;
- if (itemMeta == NULL
- || !itemMeta->findInt64("durationUs", &durationUs)) {
+ if (!itemMeta->findInt64("durationUs", &durationUs)) {
return ERROR_MALFORMED;
}
itemMeta->setInt32("discontinuity-sequence",
diff --git a/media/libstagefright/omx/1.0/WOmxNode.cpp b/media/libstagefright/omx/1.0/WOmxNode.cpp
index 9f822839a6..1dc7c7b6f0 100644
--- a/media/libstagefright/omx/1.0/WOmxNode.cpp
+++ b/media/libstagefright/omx/1.0/WOmxNode.cpp
@@ -154,7 +154,8 @@ status_t LWOmxNode::allocateSecureBuffer(
hidl_handle const& outNativeHandle) {
fnStatus = toStatusT(status);
*buffer = outBuffer;
- *native_handle = NativeHandle::create(
+ *native_handle = outNativeHandle.getNativeHandle() == nullptr ?
+ nullptr : NativeHandle::create(
native_handle_clone(outNativeHandle), true);
}));
return transStatus == NO_ERROR ? fnStatus : transStatus;