Help to implement them as device tree libs fro LD_PRELOAD are welcome.
diff --git a/media/libnbaio/MonoPipe.cpp b/media/libnbaio/MonoPipe.cpp
index 0b65861..338b7cf 100644
--- a/media/libnbaio/MonoPipe.cpp
+++ b/media/libnbaio/MonoPipe.cpp
@@ -98,6 +98,24 @@ MonoPipe::MonoPipe(size_t reqFrames, const NBAIO_Format& format, bool writeCanBl
mSamplesToLocalTime.a_to_b_denom = static_cast<uint32_t>(D);
}
+extern "C" void _ZN7android8MonoPipeC1EjRKNS_12NBAIO_FormatEb(size_t reqFrames, const NBAIO_Format& format, bool writeCanBlock);
+extern "C" void _ZN7android8MonoPipeC1Ejjb(size_t reqFrames, unsigned format_old, bool writeCanBlock)
+{
+ NBAIO_Format ret;
+ unsigned sampleRate=0;
+ unsigned channelCount=0;
+ audio_format_t format_new = AUDIO_FORMAT_PCM_16_BIT;
+ switch(format_old) {
+ case 1: sampleRate = 44100; channelCount = 2; break;
+ case 2: sampleRate = 48000; channelCount = 2; break;
+ case 3: sampleRate = 44100; channelCount = 1; break;
+ case 4: sampleRate = 48000; channelCount = 1; break;
+ default: format_new = AUDIO_FORMAT_INVALID;
+ }
+ ret = Format_from_SR_C(sampleRate, channelCount, format_new);
+ _ZN7android8MonoPipeC1EjRKNS_12NBAIO_FormatEb(reqFrames, ret, writeCanBlock);
+}
+
MonoPipe::~MonoPipe()
{
free(mBuffer);
diff --git a/media/libnbaio/NBAIO.cpp b/media/libnbaio/NBAIO.cpp
index d641e74..6bf2b36 100644
--- a/media/libnbaio/NBAIO.cpp
+++ b/media/libnbaio/NBAIO.cpp
@@ -60,6 +60,16 @@ NBAIO_Format Format_from_SR_C(unsigned sampleRate, unsigned channelCount,
return ret;
}
+unsigned Format_from_SR_C(unsigned sampleRate, unsigned channelCount)
+{
+ if (sampleRate == 44100 && channelCount == 2) return 1;
+ if (sampleRate == 48000 && channelCount == 2) return 2;
+ if (sampleRate == 44100 && channelCount == 1) return 3;
+ if (sampleRate == 48000 && channelCount == 1) return 4;
+ return 0;
+}
+
+
// This is a default implementation; it is expected that subclasses will optimize this.
ssize_t NBAIO_Sink::writeVia(writeVia_t via, size_t total, void *user, size_t block)
{
diff --git a/icu4c/source/common/ucnv.c b/icu4c/source/common/ucnv.c
index 5cf4d15..55b4faa 100644
--- a/icu4c/source/common/ucnv.c
+++ b/icu4c/source/common/ucnv.c
@@ -2914,6 +2914,145 @@ ucnv_isFixedWidth(UConverter *cnv, UErrorCode *status){
return FALSE;
}
}
+
+U_CAPI void U_EXPORT2 ucnv_setToUCallBack_48 (UConverter * converter,
+ UConverterToUCallback newAction,
+ const void* newContext,
+ UConverterToUCallback *oldAction,
+ const void** oldContext,
+ UErrorCode * err) {
+ ucnv_setToUCallBack(converter, newAction, newContext,
+ oldAction, oldContext, err);
+}
+
+U_CAPI void U_EXPORT2 ucnv_close_48 (UConverter * converter) {
+ ucnv_close (converter);
+}
+
+U_CAPI void U_EXPORT2
+ucnv_setFromUCallBack_48 (UConverter * converter,
+ UConverterFromUCallback newAction,
+ const void* newContext,
+ UConverterFromUCallback *oldAction,
+ const void** oldContext,
+ UErrorCode * err) {
+
+ ucnv_setFromUCallBack(converter, newAction, newContext, oldAction,
+ oldContext, err);
+}
+
+U_CAPI void U_EXPORT2
+ucnv_convertEx_48 (UConverter *targetCnv, UConverter *sourceCnv,
+ char **target, const char *targetLimit,
+ const char **source, const char *sourceLimit,
+ UChar *pivotStart, UChar **pivotSource,
+ UChar **pivotTarget, const UChar *pivotLimit,
+ UBool reset, UBool flush,
+ UErrorCode *pErrorCode) {
+ ucnv_convertEx(targetCnv, sourceCnv, target, targetLimit, source,
+ sourceLimit, pivotStart, pivotSource,
+ pivotTarget, pivotLimit, reset, flush,
+ pErrorCode);
+}
+
+U_CAPI UConverter* U_EXPORT2
+ucnv_open_48 (const char *name,
+ UErrorCode * err) {
+ return ucnv_open(name, err);
+}
+
+U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP_48 (
+ const void *context,
+ UConverterFromUnicodeArgs *fromUArgs,
+ const UChar* codeUnits,
+ int32_t length,
+ UChar32 codePoint,
+ UConverterCallbackReason reason,
+ UErrorCode * err) {
+ return UCNV_FROM_U_CALLBACK_STOP(context, fromUArgs, codeUnits,
+ length, codePoint, reason, err);
+}
+
+U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP_48 (
+ const void *context,
+ UConverterToUnicodeArgs *toUArgs,
+ const char* codeUnits,
+ int32_t length,
+ UConverterCallbackReason reason,
+ UErrorCode * err) {
+ return UCNV_TO_U_CALLBACK_STOP(context, toUArgs, codeUnits, length,
+ reason, err);
+}
+
+U_CAPI void U_EXPORT2 ucnv_setToUCallBack_51 (UConverter * converter,
+ UConverterToUCallback newAction,
+ const void* newContext,
+ UConverterToUCallback *oldAction,
+ const void** oldContext,
+ UErrorCode * err) {
+ ucnv_setToUCallBack(converter, newAction, newContext,
+ oldAction, oldContext, err);
+}
+
+U_CAPI void U_EXPORT2 ucnv_close_51 (UConverter * converter) {
+ ucnv_close (converter);
+}
+
+U_CAPI void U_EXPORT2
+ucnv_setFromUCallBack_51 (UConverter * converter,
+ UConverterFromUCallback newAction,
+ const void* newContext,
+ UConverterFromUCallback *oldAction,
+ const void** oldContext,
+ UErrorCode * err) {
+
+ ucnv_setFromUCallBack(converter, newAction, newContext, oldAction,
+ oldContext, err);
+}
+
+U_CAPI void U_EXPORT2
+ucnv_convertEx_51 (UConverter *targetCnv, UConverter *sourceCnv,
+ char **target, const char *targetLimit,
+ const char **source, const char *sourceLimit,
+ UChar *pivotStart, UChar **pivotSource,
+ UChar **pivotTarget, const UChar *pivotLimit,
+ UBool reset, UBool flush,
+ UErrorCode *pErrorCode) {
+ ucnv_convertEx(targetCnv, sourceCnv, target, targetLimit, source,
+ sourceLimit, pivotStart, pivotSource,
+ pivotTarget, pivotLimit, reset, flush,
+ pErrorCode);
+}
+
+U_CAPI UConverter* U_EXPORT2
+ucnv_open_51 (const char *name,
+ UErrorCode * err) {
+ return ucnv_open(name, err);
+}
+
+U_STABLE void U_EXPORT2 UCNV_FROM_U_CALLBACK_STOP_51 (
+ const void *context,
+ UConverterFromUnicodeArgs *fromUArgs,
+ const UChar* codeUnits,
+ int32_t length,
+ UChar32 codePoint,
+ UConverterCallbackReason reason,
+ UErrorCode * err) {
+ return UCNV_FROM_U_CALLBACK_STOP(context, fromUArgs, codeUnits,
+ length, codePoint, reason, err);
+}
+
+U_STABLE void U_EXPORT2 UCNV_TO_U_CALLBACK_STOP_51 (
+ const void *context,
+ UConverterToUnicodeArgs *toUArgs,
+ const char* codeUnits,
+ int32_t length,
+ UConverterCallbackReason reason,
+ UErrorCode * err) {
+ return UCNV_TO_U_CALLBACK_STOP(context, toUArgs, codeUnits, length,
+ reason, err);
+}
+
#endif
/*