Использование пользовательского AMediaDataSource с NdkMediaCodec - PullRequest
0 голосов
/ 30 марта 2020

Контекст : мое приложение 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? Как это должно работать? Существует не так много документации об этом.

...