Контекст : мое приложение Android должно прочитать пользовательский поток байтов и передать его в MediaCode c для декодирования. Я использую NDKMediaCode c, поскольку часть приложения написана на C ++.
Проблема : я пытаюсь создать собственный AMediaDataSource и использовать его с MediaExtractor с функцией AMediaExtractor_setDataSourceCustom (...), но этот метод возвращает -10000 (AMEDIA_ERROR_UNKNOWN).
Я настроил свой AMediaDataSource следующим образом:
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
Пользовательские функции (mediaDataSourceGetSize, mediaDataSourceReadAt, mediaDataSourceClose, mediaDataSourceGetAvailableSize) никогда не вызываются. MediaExtractor корректно работает со «стандартным» источником (AMediaExtractor_setDataSourceFd). Мой тест выполняется с targetSDK / minSDK, установленным на 29, на эмуляторе EPI 29 с разрешением 3 пикселя.
Неправильно ли настроен MediaDataSource? Как это должно работать? Существует не так много документации об этом.