При использовании библиотеки 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>.
}
}