Я получаю данные камеры от моего Raspberry Pi в формате yuv420p. Я пытаюсь использовать sws_scale
для преобразования их в формат RGBA. Вот как я инициализирую свой контекст:
_sws_context = sws_getContext(CAMERA_WIDTH, CAMERA_HEIGHT, AV_PIX_FMT_YUV420P,
CAMERA_WIDTH, CAMERA_HEIGHT, AV_PIX_FMT_RGBA, 0, nullptr, nullptr, nullptr);
Теперь я немного запутался в том, как установить данные и размер строки для sws_scale
. С камеры я просто получаю простой массив байтов без дальнейшей структуры. Я предполагаю, что должен как-то разделить это на плоскости. Мой первый подход не состоял в том, чтобы отделить его вообще, и, по сути, иметь что-то вроде этого (основываясь на том факте, что:
const uint8_t *src_data[] = {data.data()};
const int src_strides[] = {(int) std::ceil((CAMERA_WIDTH * 6) / 8)};
Это основывалось на:
12 битдля сетки пикселей 2x2
Итак, я предположил, что одна строка будет использовать половину этого. Но это вызывает ошибку сегментации. Поэтому я думаю, что мне как-то нужно разделить src_data
и src_strides
насоответствующие плоскости YUV, но я не уверен, как это сделать, тем более что один пиксель для данных YUV420 использует менее одного байта на плоскость ...