Получите изображение от видеокадра в iPhone

Я постараюсь обобщить, что вы хотите, с некоторыми возможными ответами в зависимости от вашей ситуации. Вы говорите, что хотите новый вектор, который, по сути, представляет собой сжатую версию двух других векторов, которые содержат два разнородных типа. Где вы можете получить доступ к двум типам как к какой-то паре?

Если вы хотите сделать это более эффективным, вам нужно подумать о том, для чего вы используете новый вектор? Я вижу три сценария того, что вы делаете.

  1. Новый вектор - это копия ваших данных, так что вы можете делать с ними что-то, не затрагивая оригинальные векторы. (т.е. вам все еще нужны исходные два вектора)
  2. Новый вектор теперь является механизмом хранения ваших данных. (т.е. вам больше не нужны исходные два вектора)
  3. Вы просто соединяете векторы, чтобы упростить использование и представление. (например, где они хранятся, на самом деле не имеет значения)

1) Мало что можно сделать, кроме копирования данных в новый вектор. Более подробно объяснил ответ Сэма Варшавчика.

3) Вы делаете что-то вроде ответа Шакиля, или здесь , или какой-то другой настраиваемый итератор.

2) Здесь вы вносите некоторую оптимизацию, когда вы копируете данные с нуля с использованием класса-оболочки. Примечание: класс-оболочка работает, если вам не нужно использовать фактический std :: vector < std :: pair> class. Вы можете создать класс, в котором вы перемещаете данные в него и создаете для них операторы доступа. Если вы можете сделать это, это также позволит вам разложить оболочку обратно на исходные два вектора без копирования. Нечто подобное может быть достаточно.

class StringIntContainer {

   public:

          StringIntContaint(std::vector& _string_vec, std::vector& _int_vec) 
              : string_vec_(std::move(_string_vec)), int_vec_(std::move(_int_vec))
           {
               assert(string_vec_.size() == int_vec_.size());
           }

          std::pair operator[] (std::size_t _i) const
          {
                return std::make_pair(string_vec_[_i], int_vec_[_i]);
          }

          /* You may want methods that return reference to data so you can edit it*/

          std::pair, std::vector> Decompose()
          {
                return std::make_pair(std::move(string_vec_), std::move(int_vec_[_i])));
          }
   private:
          std::vector _string_vec_;
          std::vector int_vec_;

};

5
задан Dimitris 1 May 2009 в 09:21
поделиться

3 ответа

Вот запись в блоге о извлечении кадров из фильмов с помощью ffmpeg:

http://www.codza.com/extracting-frames-from-movies-on-iphone

Соответствующий проект на github: iFrameExtractor

4
ответ дан 14 December 2019 в 08:59
поделиться

Вы можете использовать lib, используемый ffmpeg чтобы извлечь кадр, подобный libh264

http://en.wikipedia.org/wiki/X264

Приложения Live TV на iPhone делают это.

Надеюсь, это поможет.

Тьерри

3
ответ дан 14 December 2019 в 08:59
поделиться

ответ на мой вопрос см. Здесь iphone sdk> 3.0. Значок видео? , который отвечает на этот

0
ответ дан 14 December 2019 в 08:59
поделиться