Вопрос

Я должен прочитать большой файл, содержащий много кадров анимации от CD / DVDROM и отображать его на экран в качестве анимации. При чтении с жесткого диска стратегия чтения кадра в память, обработка, отображение и затем чтение следующего кадра работает хорошо, но когда я читаю с оптического устройства, время доступа убивает анимацию.

Я использую методы readFile / readfile C и Winapi.

Как я должен прочитать содержимое файла, хранящегося на оптическом устройстве для достижения скорости анимации в реальном времени (я видел программу, которая делает это даже в двойной скорости, наверняка, что она не буферный весь файл до начала анимации)?

Это было полезно?

Решение

Две методы:

  1. Большой буфер или кеш, как в нескольких МБ. CD / DVD имеет разумные последовательные ввода / вывода, но очень медленно ищет скорости доступа (как вы уже отметили), поэтому быстро пополнять буфер. Вам просто нужен буфер, чтобы быть достаточно большим, что он охватывает несколько секунд, чтобы позволить диску раскрутить, если это необходимо, и искать, если уже погрузится.

  2. Multi-Threading: Держите одну нить непрерывно читающую и отдельную анимацию декодирования потоков. Поток читателя должен заблокировать, если оно становится слишком далеко впереди декодирования.

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

РЕДАКТИРОВАТЬ:Это методы Mplayer используют. Кроме того, вы должны рассмотреть свой формат кодирования, если вы можете - разные форматы могут обмениваться временем ЦП по декодированию для меньшего количества данных для чтения с диска. Пара деталей информации для оценки того, сколько видео должно быть сжато.

  • Скорость чтения для 1x CD-ROM: 150 KIB / S (голая минимальная скорость)
  • Скорость чтения 4x CD-ROM: 600 KIB / S (стандартный минимальный привод)
  • Читайте скорость 16x CD-ROM: 1600 KIB / S (максимально доступный, обычно работает только до 8x)
  • Прочитайте скорость 1x DVD-привод: ~ 1.3 mib / s
  • Видео стандартное определение сжатое с MPEG2 при качеству DVD-DVD: ~ 600 KIB / S
  • Видео стандартное определение сжатые с MPEG4 при качеству DVD: ~ 100 kib / s
  • Неснесенное стандартное определение видео: ~ 30 МБ / с
  • Стандартный 1000x1000 (1 мегапиксель) изображение в 24-битном цвете: 3 МБ
  • Стандартное 1 мегапиксельное изображение при 8-битном цвете (серого): 1 МБ

Редактировать2: дополнительная информация

  • Обратите внимание, что DVD-DVD обычно можно прочитать на 8x или около того, если ваш диск поддерживает его (больше всего делать сейчас).
  • Анимации начинают появляться гладкие в 24+ рамах в секунду. Ниже они появятся jerky для зрителя.
  • Сжатие без потерь, как правило, хорошо примерно на 50% уменьшения размера для фотографических изображений. Ваш пробег может варьироваться.
  • Гладкое воспроизведение анимаций будет частично зависит от того, как вы говорите с видеотехнику. Некоторые методы будут производить лучшие результаты, чем другие. Я настоятельно рекомендую вам посмотреть код для MPlayer в этом случае.

Другие советы

Одна вещь, чтобы попробовать - это сжатие. Загрузка ZIP-файла с привода, например, займет меньше времени, но требует больше времени процессора для обработки. Если возможна сжатие без потерь, то это может стоить проверять. Понимание диска CD тоже полезен. Дневные спины при фиксированной скорости вращения. Это означает, что данные на за пределами дисковых нагрузок быстрее, чем данные внутри. Однако горелка будет записывать данные изнутри наружу, чтобы вы могли оказаться, чтобы сжигать много данных до «анимации», чтобы получить максимальную скорость чтения.

использовать Createfile. с Open_always и file_flag_sexential_scan

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top