Как избавиться от memcpy в QIoDevice

Я использую Qt для вывода звука. Есть пример аудиовхода, где чисто виртуальная функция qint64 QIODevice :: readData (char * data, qint64 maxSize) переопределена следующим образом (это не реальный код из примера).

qint64 Generator::readData(char *data, qint64 len)
{
memcpy(data, m_buffer.data(), len);
return len;
}

Итак, мы получаем указатель на данные, копируем память из нашего буфера на эти данные. Мне интересно, могу ли я просто назначить данные указателя для нового местоположения, например так:

qint64 Generator::readData(char *data, qint64 len)
{
data = m_buffer.data();
return len;
}

Потому что memcpy медленный и C. Так я могу? Спасибо!

ОК, просто не получать комментарии «что медленно»:
first — memcpy медленнее, чем назначение указателя
второе — да, у меня задержка при воспроизведении звука, я хочу сделать программу оптимальной в любой точке.

Постскриптум Я пытаюсь это сделать, и у меня нет звука, так что, возможно, ответ — нет. Тогда почему?

0

Решение

Подпись этого метода позволяет вам возвращать данные только путем их копирования.
Назначение указателя не имеет смысла, поскольку этот параметр передается как копия, поэтому назначенное значение не будет отображаться за пределами вашего метода.

memcpy совсем не медленен для вывода звука в реальном времени (если вы не делаете это на 8-битном процессоре).

Слишком медленный аудиокод может вызвать пропуски звука, но не задержку. Задержка является результатом слишком большого звукового буфера.

0

Другие решения


По вопросам рекламы [email protected]