Так что этот вопрос задавался несколько раз, но я думаю, что мои навыки C ++ слишком несовершенны, чтобы по-настоящему оценить ответы. Что мне нужно, так это способ начать с HEVC-кодированного видео и закончить CSV, в котором есть все векторы движения. Пока что я скомпилировал и запустил эталонный декодер, кажется, все работает нормально. Я не уверен, имеет ли это значение, но меня интересуют векторы движения как удобный способ анализа движения в видео. Сначала я планирую усреднить MV в каждом кадре, чтобы просто получить значение, выражающее что-то о средней величине движения в этом кадре.
Обсуждение Вот рассказывает мне о методах класса TComDataCU, с которыми мне нужно взаимодействовать, чтобы получить MV, и рассказывает о том, как перебирать CTU. Но я все еще не совсем понимаю следующее:
1) какую информацию возвращают эти методы MV и в каком формате? С моим ограниченным знанием, я предполагаю, что будет около 7 значений, связанных с MV: номер кадра, индекс, идентифицирующий макроблок в этом кадре, размер макроблока, координата x макроблока (вероятно, верхний левый угол?), координата y макроблока, координата x вектора и координата y вектора.
2) где в коде нужно разместить новые операторы, которые сохраняют данные? Я подумал, что в TComDataCU.cpp должно быть какое-то место, где я могу поместить строки, которые печатают данные, которые я хочу в файл, но я запутался, когда значения действительно определены и каковы они. Объявления переменных выглядят так:
// create motion vector fields
m_pCtuAboveLeft = NULL;
m_pCtuAboveRight = NULL;
m_pCtuAbove = NULL;
m_pCtuLeft = NULL;
Задача ещё не решена.
Других решений пока нет …