stagefright CameraSource::read возвращает маленькие кадры (20 байт) на Samsung Galaxy S2

Я пытаюсь захватить кадры, снятые камерой, кодировать их и, наконец, отправить их с помощью RTP/RTSP.

Для захвата я использую класс CameraSource от stagefright. Превью на экране (Surface передано с Java) великолепно. Но когда я пытаюсь извлечь кадры, я получаю кадры размером 20 байт.

Что я делаю неправильно?

Size videoSize;
videoSize.width = 352;
videoSize.height = 288;
sp<CameraSource> myCamera = CameraSource::CreateFromCamera(NULL, NULL, 
                             1 /*front camera*/, videoSize, 25, mySurface, true);
myCamera->start();

//the following is from a reader thread.
status_t err = OK;
MediaBuffer* pBuffer;
while ((err = myCamera->read(&pBuffer)) == OK)
{
    // if not getting a valid buffer from source, then exit
    if (pBuffer == NULL)
    {
        return;
    }
    else
    {
        LOGD("The Size of the returned buffer is: %d", pBuffer->size() );
    }
    pBuffer->release();
    pBuffer = NULL;
}

2 ответа

Решение

Вы все делаете правильно, но Samsung решила не поддерживать маршрут, который вы пытались реализовать. Единственный способ использовать CameraSource на Galaxy S2 (и на многих других устройствах Samsung) - подключить его напрямую к аппаратному кодеру.

20 байтов на самом деле являются своего рода метаданными, используемыми для связи между камерой и видеокодером. если вы не знаете, как интерпретировать эти данные, трудно извлечь видеокадр из этих данных.

Другие вопросы по тегам