Add AMediaFormat functions to clear and copy

Also move NdkMediaFormat internals to libmedia to avoid a future circular
dependency between libmedia and libmediandk.

Bug: 111407253
Test: build, boot, play some files

Change-Id: I54d91439f216c3834726e5505afef40dc0d93e67
gugelfrei
Marco Nelissen 6 years ago
parent ddc47d47a9
commit 98603d8711

@ -27,13 +27,23 @@
#ifndef _NDK_MEDIA_FORMAT_PRIV_H
#define _NDK_MEDIA_FORMAT_PRIV_H
#include <media/NdkMediaFormat.h>
#include <utils/String8.h>
#include <utils/StrongPointer.h>
#include <media/stagefright/foundation/AMessage.h>
#ifdef __cplusplus
extern "C" {
#endif
AMediaFormat* AMediaFormat_fromMsg(void*);
using namespace android;
struct AMediaFormat {
sp<AMessage> mFormat;
String8 mDebug;
KeyedVector<String8, String8> mStringCache;
};
AMediaFormat* AMediaFormat_fromMsg(const void*);
void AMediaFormat_getFormat(const AMediaFormat* mData, void* dest);
#ifdef __cplusplus

@ -191,6 +191,7 @@ cc_library {
"MediaResourcePolicy.cpp",
"Visualizer.cpp",
"StringArray.cpp",
"NdkMediaFormatPriv.cpp",
],
aidl: {

@ -0,0 +1,56 @@
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
//#define LOG_NDEBUG 0
#define LOG_TAG "NdkMediaFormat"
#include <inttypes.h>
//#include <ndk/include/media/NdkMediaFormat.h>
#include <utils/Log.h>
#include <utils/StrongPointer.h>
#include <media/NdkMediaFormatPriv.h>
#include <media/stagefright/foundation/ABuffer.h>
#include <media/stagefright/foundation/AMessage.h>
//#include <android_runtime/AndroidRuntime.h>
//#include <android_util_Binder.h>
#include <jni.h>
using namespace android;
extern "C" {
// private functions for conversion to/from AMessage
AMediaFormat* AMediaFormat_fromMsg(const void* data) {
ALOGV("private ctor");
AMediaFormat* mData = new AMediaFormat();
mData->mFormat = *((sp<AMessage>*)data);
if (mData->mFormat == NULL) {
ALOGW("got NULL format");
mData->mFormat = new AMessage;
}
return mData;
}
void AMediaFormat_getFormat(const AMediaFormat* mData, void* dest) {
*((sp<AMessage>*)dest) = mData->mFormat;
}
} // extern "C"

@ -21,8 +21,8 @@
#include <media/NdkMediaCodec.h>
#include <media/NdkMediaError.h>
#include <media/NdkMediaFormatPriv.h>
#include "NdkMediaCryptoPriv.h"
#include "NdkMediaFormatPriv.h"
#include <utils/Log.h>
#include <utils/StrongPointer.h>

@ -20,7 +20,7 @@
#include <media/NdkMediaCrypto.h>
#include <media/NdkMediaCodec.h>
#include "NdkMediaFormatPriv.h"
#include <media/NdkMediaFormatPriv.h>
#include <cutils/properties.h>

@ -20,8 +20,8 @@
#include <media/NdkMediaError.h>
#include <media/NdkMediaExtractor.h>
#include <media/NdkMediaFormatPriv.h>
#include "NdkMediaDataSourcePriv.h"
#include "NdkMediaFormatPriv.h"
#include <inttypes.h>

@ -20,6 +20,7 @@
#include <inttypes.h>
#include <media/NdkMediaFormat.h>
#include <media/NdkMediaFormatPriv.h>
#include <utils/Log.h>
#include <utils/StrongPointer.h>
@ -32,12 +33,6 @@
using namespace android;
struct AMediaFormat {
sp<AMessage> mFormat;
String8 mDebug;
KeyedVector<String8, String8> mStringCache;
};
extern "C" {
// private functions for conversion to/from AMessage
@ -74,6 +69,18 @@ media_status_t AMediaFormat_delete(AMediaFormat *mData) {
return AMEDIA_OK;
}
EXPORT
void AMediaFormat_clear(AMediaFormat *format) {
format->mFormat->clear();
}
EXPORT
media_status_t AMediaFormat_copy(AMediaFormat *to, AMediaFormat *from) {
to->mFormat->clear();
to->mFormat->extend(from->mFormat);
return AMEDIA_OK;
}
EXPORT
const char* AMediaFormat_toString(AMediaFormat *mData) {
@ -256,7 +263,7 @@ void AMediaFormat_setString(AMediaFormat* format, const char* name, const char*
}
EXPORT
void AMediaFormat_setBuffer(AMediaFormat* format, const char* name, void* data, size_t size) {
void AMediaFormat_setBuffer(AMediaFormat* format, const char* name, const void* data, size_t size) {
// the ABuffer(void*, size_t) constructor doesn't take ownership of the data, so create
// a new buffer and copy the data into it
sp<ABuffer> buf = new ABuffer(size);

@ -20,7 +20,7 @@
#include <media/NdkMediaMuxer.h>
#include <media/NdkMediaCodec.h>
#include "NdkMediaFormatPriv.h"
#include <media/NdkMediaFormatPriv.h>
#include <utils/Log.h>

@ -83,7 +83,7 @@ void AMediaFormat_setString(AMediaFormat*, const char* name, const char* value)
/**
* The provided data is copied into the format.
*/
void AMediaFormat_setBuffer(AMediaFormat*, const char* name, void* data, size_t size) __INTRODUCED_IN(21);
void AMediaFormat_setBuffer(AMediaFormat*, const char* name, const void* data, size_t size) __INTRODUCED_IN(21);
@ -170,6 +170,18 @@ void AMediaFormat_setRect(AMediaFormat*, const char* name,
int32_t left, int32_t top, int32_t right, int32_t bottom) __INTRODUCED_IN(28);
#endif /* __ANDROID_API__ >= 28 */
#if __ANDROID_API__ >= 29
/**
* remove all key/value pairs from the given AMediaFormat
*/
void AMediaFormat_clear(AMediaFormat*) __INTRODUCED_IN(29);
/**
* copy one AMediaFormat to another
*/
media_status_t AMediaFormat_copy(AMediaFormat *to, AMediaFormat *from) __INTRODUCED_IN(29);
#endif /* __ANDROID_API__ >= 29 */
__END_DECLS
#endif // _NDK_MEDIA_FORMAT_H

@ -185,6 +185,8 @@ LIBMEDIANDK {
AMediaExtractor_setDataSourceCustom; # introduced=28
AMediaExtractor_setDataSourceFd;
AMediaExtractor_unselectTrack;
AMediaFormat_clear; # introduced=29
AMediaFormat_copy; # introduced=29
AMediaFormat_delete;
AMediaFormat_getBuffer;
AMediaFormat_getDouble; # introduced=28

Loading…
Cancel
Save