Ffmpeg проблема размера буфера стерео - PullRequest
0 голосов
/ 07 января 2020

При использовании библиотеки ffmpeg (c++), когда звук стереофонический (каналы = 2), проблема в data_size: в случае кода ниже, строка fwrite приведет к включению sh access violation reading. Параметр channel удваивает значение data_size в режиме стерео. Нет проблем при замене c->channels на 1.

Параметр channel установлен на 2 в функции avcodec_decode_audio4 (и я действительно использую стереофайл [Joint Stereo]. Когда я использую для монофонических каналов установлено значение 1).

Если я скопирую файл input_packet в файл, он будет воспроизводиться нормально.

В чем может быть причина этого? Мой код очень похож на примеры кода на net.

while (input_packet.size > 0)
{
  len = avcodec_decode_audio4(c, decoded_frame, &got_frame, &input_packet);
  if (got_frame)
  {
    int data_size = av_samples_get_buffer_size(NULL, c->channels,
                                                   decoded_frame->nb_samples,
                                                   c->sample_fmt, 1);
    fwrite(decoded_frame->data[0], 1, data_size, outfile); // access violation reading loction
    // outArr.insert(outArr.end(), decoded_frame->data[0], decoded_frame->data[0] + data_size); // This will crash in same manner. outArr is vector<BYTE>.
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...