У меня недостаточно информации, чтобы указать на точную ошибку, но я думаю, что проблема в том, что входное изображение содержит меньше данных, чем ожидает avcodec_encode_video ():
avpicture_fill () устанавливает только некоторые указатели и числовые значения в структуре AVFrame. Он ничего не копирует и не проверяет, достаточно ли большой буфер (и не может, так как размер буфера ему не передается). Он делает что-то вроде этого (скопировано из источника ffmpeg):
size = picture->linesize[0] * height;
picture->data[0] = ptr;
picture->data[1] = picture->data[0] + size;
picture->data[2] = picture->data[1] + size2;
picture->data[3] = picture->data[1] + size2 + size2;
Обратите внимание, что ширина и высота передаются из переменной "c" (я полагаю, AVCodecContext), поэтому она может быть больше, чем фактический размер входного кадра.
Также возможно, что ширина / высота хорошие, но формат пикселя входного кадра отличается от формата, переданного в avpicture_fill (). (обратите внимание, что формат пикселей также исходит из AVCodecContext, который может отличаться от входного). Например, если c-> pix_fmt - это RGBA, а входной буфер имеет формат YUV420 (или, более вероятно, для iPhone, бипланарный YCbCr), тогда размер входного буфера равен width * height * 1.5, но avpicture_fill () ожидает размер ширина * высота * 4.
Таким образом, проверка геометрии ввода / вывода и форматов пикселей должна привести вас к причине ошибки. Если это не помогает, я предлагаю сначала попробовать скомпилировать для i386. Сложно правильно скомпилировать FFMPEG для iPhone.