Оптимальный код / ​​алгоритм для преобразования количества кадров в тайм-код? - PullRequest
0 голосов
/ 22 ноября 2011

Я ищу оптимальный исходный код / ​​алгоритм в c ++ для преобразования количества кадров во временной код чч: мм: сс: ff в заданных кадрах в секунду, напр.25fps ...

этот код очень хорош - http://www.andrewduncan.ws/Timecodes/Timecodes.html (внизу страницы), но он дорогой - он содержит 4 мода и 6 делений

Мне нужно показатьВременной код на каждом кадре, поэтому вычисление этого алгоритма может занять некоторое время.

Конечно, я могу сохранить оцененный временной код, чтобы избежать вычислений.

Но было бы очень полезно узнать лучший алгоритм ...

Заранее спасибо, т. М.

Ответы [ 4 ]

6 голосов
/ 22 ноября 2011

Общее правило: в системах обработки изображений, которые включают видеопроигрыватели, вы потеете кровью по операциям, которые запускаются один раз для каждого пикселя, а затем вы потеете по операциям, которые выполняются один раз для каждого «патча» изображения (обычно это строкапикселей), и вы не потревожите материал, который выполняется один раз за кадр.

Причина в том, что материал на пиксель будет работать в сотни, а может и в тысячи раз чаще, чем материал на каждый патч,и материал для каждого патча будет работать в сотни, а может и в тысячи раз чаще, чем для каждого кадра.

Это означает, что материал для каждого пикселя может запускаться в миллионы раз чаще, чем для каждого кадравещи.Одна инструкция на пиксель может стоить миллионы инструкций на кадр, и несколько сотен или даже несколько тысяч инструкций на кадр теряются в минимальном уровне шума по сравнению с количеством команд на пиксель.

Другими словами,Вы, вероятно, можете позволить себе моды и дивы.

Сказав это, МОЖЕТ быть разумно использовать пользовательские счетчики вместо того, чтобы делать моды и дивы.

2 голосов
/ 22 ноября 2011

Прежде всего, я согласен со всеми остальными, что вам, вероятно, не нужно оптимизировать это, если только вы не видите конкретно проблемы.Однако, поскольку пытаться найти способы интересно, я дам вам то, что я увидел на первый взгляд, чтобы уменьшить количество делений.

seconds = framenumber div 30
minutes = seconds div 60
hours = minutes div 60
frames = frameNumber mod 30
seconds = seconds mod 60
minutes = minutes mod 60
hours = hours mod 24

Это больше строк кода, но меньше делений.По сути, поскольку секунды, минуты и часы используют одну и ту же математику, я использую результаты одного в формуле для следующего.

2 голосов
/ 22 ноября 2011

Прежде всего, вопрос может быть лучше, оптимальный код для преобразования между секундами в часы, минуты, секунды. На этом этапе, если кадры упорядочены, вы можете просто использовать сложение, чтобы увеличить предыдущее время.

1 голос
/ 22 ноября 2011

Операции Mod и Div (с небольшим постоянным значением) могут эффективно выполняться с умножением на некоторый предварительно вычисленный ответ.Так что они не дорогие.

...