#android #android-mediacodec
#Android #android-mediacodec
Вопрос:
Я работаю над алгоритмом объединения двух видео вместе в MediaCodec на основе обычного теста ExtractDecodeEditEncodeTest CTS, и меня особенно интересует эта часть кода:
outputSurface.awaitNewImage();
outputSurface.drawImage();
inputSurface.setPresentationTime(videoDecoderOutputBufferInfo.presentationTimeUs * 1000);
inputSurface.swapBuffers();
Где outputSurface
находится выходная поверхность декодера и inputSurface
входная поверхность кодировщика.
Предположим, у меня есть два медиаэкстрактора и два МедиаКодека, действующих как декодеры, и один кодировщик с предустановленным форматом, могу ли я просто сделать то же самое в цикле этого второго декодера?
secondOutputSurface.awaitNewImage();
secondOutputSurface.drawImage();
inputSurface.setPresentationTime(prevSegmentEndNanos videoDecoderOutputBufferInfo.presentationTimeUs * 1000);
inputSurface.swapBuffers();
Где prevSegmentEndNanos
находится временная метка последнего буфера предыдущего декодера непосредственно перед завершением декодирования. inputSurface
это та же самая поверхность кодировщика.
Возможно ли это?
Ответ №1:
Да, это должно работать просто отлично.
Комментарии:
1. Спасибо за ответ. Кстати, могут ли два декодера действительно передавать данные одному кодировщику с помощью этого метода, если это делается последовательно?
2. ДА. Вы могли бы (с помощью более сложного кода) даже получать выходные данные сразу с двух декодеров, смешивать / смешивать их и передавать в кодировщик (используя более продвинутый рисунок, чем текущий
drawImage()
). Вам просто нужно убедиться, что оба декодера декодируют в выходные данные в одном и том же контексте EGL. ОднакоawaitNewImage()
в этих случаях часть становится более сложной.3. Если я правильно понимаю, мне нужно определить еще несколько вершин для прямых линий для
drawImage()
детали, верно? Нужен ли мне также отдельный цикл для второго декодера, который запускается сразу после завершения первого?