Using a custom AMediaDataSource with NdkMediaCodec

Viewed 251

Context : my Android application must read a custom byte stream and feed it into MediaCodec to be decoded. I use NDKMediaCodec as part of the app is written in C++.

Issue : I try to create a custom AMediaDataSource and use it with a MediaExtractor with the function AMediaExtractor_setDataSourceCustom(...), but this method returns -10000 (AMEDIA_ERROR_UNKNOWN).

I configured my AMediaDataSource like this :

AMediaExtractor *ex = AMediaExtractor_new();

AMediaDataSource* mediaSource = AMediaDataSource_new();
AMediaDataSource_setGetSize(mediaSource,mediaDataSourceGetSize);
AMediaDataSource_setReadAt(mediaSource,mediaDataSourceReadAt);
AMediaDataSource_setUserdata(mediaSource,nullptr);
AMediaDataSource_setClose(mediaSource,mediaDataSourceClose);
AMediaDataSource_setGetAvailableSize(mediaSource,mediaDataSourceGetAvailableSize);

media_status_t status = AMediaExtractor_setDataSourceCustom(ex,mediaSource); // -> return error

The custom functions (mediaDataSourceGetSize, mediaDataSourceReadAt, mediaDataSourceClose, mediaDataSourceGetAvailableSize) are never called. The MediaExtractor works correctly with a "standard" source (AMediaExtractor_setDataSourceFd). My test is performed with targetSDK/minSDK set to 29, on a pixel 3 EPI 29 emulator.

Am I misconfiguring the MediaDataSource ? How is it suppose to work ? There is not much documentation about it.

0 Answers
Related