Я немного изменяю этот файл: https://gist.github.com/yohhoy/f0444d3fc47f2bb2d0e2 Этот код декодирует видео и делает OpenCV Mats из пикселей кадра по ходу.
В частности, я хочу только захватывать фреймы, которые имеют определенные c данные, связанные с макроблоками. Я пытаюсь получить эти данные следующим образом:
total_qp = get_total_qp(decframe->qscale_table, mb_width, mb_height, mb_stride);
Однако всякий раз, когда я пытаюсь получить доступ к данным путем итерации по этому массиву, я получаю ошибку сегментации:
static float get_total_qp(int8_t *qscale_table, int mb_width, int mb_height, int mb_stride)
{
int mb_count = mb_height * mb_width;
int y, x;
float qp_total = 0.0f;
for (y = 0; y < mb_height; y++) {
for (x = 0; x < mb_width; x++) {
qp_total += qscale_table[x + y * mb_stride]; <-- SEGFAULT here
}
}
return qp_total;
}
Я также попытался отправить: frame->qscale_table
, и я попытался заполнить его, но это не компилируется, потому что он не может найти эту функцию:
int8_t *qscale_table = av_frame_get_qp_table(decframe->qscale_table, &mb_stride, &qscale_type);
Итак, мой вопрос заключается в следующем: учитывая AVFrame*
, как мне обеспечить заполнение qscale_table
и доступ к нему?