Категории

Cуществуют следующие способы оплаты за занятия:

  • Абонемент на 8 посещений (срок действия 1 месяц) - 300 грн.;
  • Абонемент на 4 посещения (срок действия 1 месяц) - 200 грн.;
  • Абонемент на 12 посещений(срок действия 1 месяц) - 400 грн.;
  • Разовое посещение - 60 грн.
(ДЛИТЕЛЬНОСТЬ ЗАНЯТИЙ ПО 1,5 ЧАСА)

Синхронізація кадрів відеозображення з частотою оновлення екрану

  1. Вступ
  2. Цикл оновлення дисплея
  3. Артефакти розриву зображення
  4. команда Flip
  5. потенційні проблеми
  6. Прив'язка команд Flip за часом
  7. Альтернативне рішення для вмісту записів
  8. резюме
  9. додаткові відомості

Наше деловое партнерство www.banwar.org

Дізнайтеся, як за допомогою простого алгоритму синхронізувати зображення з частотою оновлення зображення на дисплеї і поліпшити якість відтворення відео.

Вступ

Наші уявлення про «цифровому домі» поступово стають реальністю. В останні роки в широкий продаж надходить все більше пристроїв для «цифрового дому». Асортимент пропонованої електроніки дуже великий - від мультимедійних приставок, які підтримують мовлення музики і відео, до повномасштабних розважальних систем в корпусі звичайного ПК.

Стандартної позицією в прайс-листах комп'ютерних магазинів стають домашні медіа-центри, які дозволяють дивитися і записувати телепередачі, зберігати і відтворювати цифрові фотографії і музику, і так далі. Крім того, деякі постачальники пропонують спеціальні набори, за допомогою яких користувач може перетворити свій ПК в домашній медіа-центр.

На жаль, такі медіа-центри далеко не завжди підтримують відтворення відео високої якості. Недостатня якість відео зазвичай це пов'язано з такими факторами, як некоректна буферизация і рендеринг потокового вмісту, відсутність алгоритмів дєїнтерлейсинга при обробці чересстрочного відео, неправильна синхронізація відео- аудіо потоків. Більшість цих проблем добре вивчені і мають рішення, що в достатній мірі враховується виробниками. Проте, існує ще одна, не настільки відома і менш очевидна проблема, яка може призводити до незначних, але все ж помітних спотворень при перегляді відео. У нашій статті наводиться детальний опис даної проблеми і розглядається один із способів її рішення.

З огляду на зростаючі обсяги продажів домашніх медіа-центрів, все більше споживачів дивляться телевізійні передачі на ПК. У міру розширення цього сегмента, затребуваного поки що любителями-ентузіастами, буде збільшуватися і попит на відео високої якості.

Існує цілий ряд методів, що дозволяють поліпшити якість відтворення відео на комп'ютері, і багато виробників програмного забезпечення для роботи з відео їх успішно застосовують. У той же час, іноді без належної уваги залишається той факт, що програмні засоби відтворення відео повинні враховувати і забезпечувати синхронізацію відео з частотою оновлення зображення на дисплеї. Справа в тому, що в телевізорах спочатку передбачена синхронізація між звучанням та зображенням, що надходять зі студії телемовлення. На відміну від телевізорів, оновлення екрану комп'ютерних моніторів відбувається з фіксованою частотою, яка задається графічним адаптером і ніяк не пов'язана з відеосигналом. Це велика різниця може завдати чимало труднощів, якщо потрібно забезпечити правильну синхронізацію відео з комп'ютерним дисплеєм. Нижче ми постараємося привести докладний опис даної проблеми і запропонувати її рішення. Однак, перед цим ми хотіли б познайомити читача з деякими основними поняттями, які будуть розглядатися в статті.

Цикл оновлення дисплея

Частота оновлення екрану ПК (screen refresh rate) синхронізується з частотою графічного адаптера (відеокарти). Розглянемо самий загальний приклад - коли відеокарта і монітор підтримують частоту 60Гц. Ця комбінація можлива завдяки тому, що монітор синхронізується з сигналом 60Гц, що надходять з відеокарти. Насправді, монітор підтримує синхронізацію навіть у випадках незначного відхилення частоти вихідного сигналу графічного адаптера (наприклад, 60,06 Гц замість стандартних 60 Гц).

Протягом циклу поновлення зображення на екрані перемальовується з буфера дисплея (адресується пам'яті графічного адаптера). Відбувається послідовне оновлення кожної горизонтальної рядка на дисплеї в відповідно до нових даних, що містяться в буфері відеопам'яті. Оновлювана в даний момент часу рядок називається рядком розгортки. У разі графічного адаптера з частотою 60 Гц, процес оновлення екрану відбувається 60 разів в секунду, таким чином, зображення на моніторі ПК також оновлюється 60 разів на секунду. Протягом циклу поновлення зображення на екрані перемальовується з буфера дисплея (адресується пам'яті графічного адаптера)

Малюнок 1 - Відновлення дисплея

Артефакти розриву зображення

Слід враховувати потенційну проблему нерівномірного поновлення буфера графічного адаптера. Якщо вміст буфера відеопам'яті змінилося в момент, коли зображення на моніторі ще повністю не намальовані (цикл оновлення не завершено), то на екрані буде показана тільки частина нового зображення, наступна після рядка розгортки (див. Рис. 2). Цей артефакт зображення, при якому на верхній частині екрану показується старе зображення, а на нижній частині - нове зображення, отримав назву «розриву» (tearing). По суті, цей термін досить наочний, так як виходить в результаті зображення виглядає як би «розірваним» навпіл.

Малюнок 2 - Артефакти «розриву» зображення

команда Flip

Один із способів попередження «розривів» - зробити так, щоб оновлення вмісту відеопам'яті відбувалося після того, як завершиться цикл поновлення дисплея і до того, як почнеться наступний цикл. Іншими словами, оновлення має відбуватися протягом зворотного ходу розгортки. Однак такий спосіб вимагає відповідних змін програмного забезпечення, яке повинно з достатньою точністю розраховувати порядок зміни зображення.

З цієї причини був запропонований алгоритм синхронізації перемикання буфера (Flip). Команда Flip вельми проста за своєю суттю - вона дозволяє програмі оновлювати зображення в будь-який момент циклу оновлення екрану, проте його результат фактично не передається в відеопам'ять до тих пір, поки не завершиться поточний цикл. Таким чином, оновлення зображення на моніторі відбувається в інтервал, наступний за виконанням команди Flip. При використанні методу синхронізації буфера «розриви» зображення виключені, так як команда Flip гарантує, що до кожного циклу поновлення буде готове повне нове зображення (див. Рис. 3). Проте, в наступному розділі ми продемонструємо, що використання однієї лише команди Flip не гарантує вирішення всіх проблем.

Проте, в наступному розділі ми продемонструємо, що використання однієї лише команди Flip не гарантує вирішення всіх проблем

Малюнок 3 - Послідовність команди Flip

потенційні проблеми

Використання алгоритму синхронізації дає великі переваги і допомагає усунути артефакти «розриву» зображення, але залишається одна істотна проблема.

При використанні команди Flip умови програмного рендеринга відео змінюються. Для виконання Flip програмного забезпечення доводиться регулювати інтервал оновлення кадрового буфера (frame rate) у відповідності з певною частою кадрів. Єдиною тактовою частотою, на якій кадри можуть бути синхронізовані, є частота оновлення зображення на дисплеї (або кратна). Іншими словами, новий кадр може бути зображений лише на початку циклу поновлення - фактично, інтервали виведення кадрів прив'язані до частоти оновлення зображення на дисплеї.

Іншими словами, новий кадр може бути зображений лише на початку циклу поновлення - фактично, інтервали виведення кадрів прив'язані до частоти оновлення зображення на дисплеї

Малюнок 4 - Розбіжність частоти кадрів і частоти дисплея

Цей факт має на увазі, що якщо частота оновлення зображення на дисплеї не збігається з частою кадрів відтворюється вмісту або не є кратною величиною, повноцінне відтворення вмісту на дисплеї неможливо. На Рис. 4 показаний окремий випадок даної проблеми. В даному сценарії частота кадрів вмісту менше, ніж частота оновлення зображення на дисплеї. Унаслідок фазового зсуву між цими двома частотами інтервали виконання команди Flip для двох кадрів в кінцевому підсумку розтягнуться на повний цикл оновлення (зверніть увагу на синхронізацію кадрів 3 і 4). В результаті кадр 3 буде відображатися майже в два рази довше, ніж потрібно. Таким чином, слід прагнути до збігу частоти кадрів і частоти оновлення зображення на дисплеї, хоча це і не завжди можливо.

Вже згадана ситуація тільки погіршується в разі, якщо різниця між частотою кадрів і частотою оновлення зображення на дисплеї невелика. Коли час зміни кадрів близько до інтервалах циклів оновлення навіть незначні неточності в розрахунках програмного таймера можуть привести до того, що кілька послідовних команд Flip будуть збиватися щодо початку оновлення. Це означає, що деякі команди Flip будуть виконуватися занадто рано, а деякі занадто пізно, що призведе до появи «дубльованих» і «випали» кадрів. Даний випадок проілюстровано на Рис. 5 - таймер спрацьовує некоректно (через нерівні проміжки), в результаті кадри 2 і 4 не відображаються, а кадри 3 і 5 показуються двічі.

5 - таймер спрацьовує некоректно (через нерівні проміжки), в результаті кадри 2 і 4 не відображаються, а кадри 3 і 5 показуються двічі

Малюнок 5 - Результат використання Flip при збоях таймера

Це явище може мати місце навіть в тому випадку, коли частота кадрів вмісту і частота оновлення зображення на дисплеї однакові. Очевидно, що використання лише таймера і команди Flip недостатньо для забезпечення якісного відтворення відео. Як пояснюється в наступному розділі, для правильного виконання команд Flip програмне забезпечення повинно підтримувати "розумну" синхронізацію з циклами оновлення дисплея.

Прив'язка команд Flip за часом

Як вже було сказано вище, застосування команди Flip дозволяє враховувати цикли оновлення екрану при рендеринге відео кадрів. Кожен знову переданий кадр відображається тільки протягом одного повного циклу оновлення зображення на дисплеї. Таким чином, при використанні команди Flip програмне забезпечення має точно розраховувати не тільки той момент, коли Ви бажаєте бачити кожен кадр, але і визначати конкретний цикл поновлення, щоб оптимальним чином синхронізувати висновок кадрів.

Найкраще викликати команду Flip на самому початку циклу оновлення, безпосередньо перед початком відповідного інтервалу оновлення кадру (див. Приклад на Рис. 3). Це дає найбільшу ймовірність фактичного виконання команди до початку відповідного циклу оновлення та забезпечує висновок кадру в потрібний момент. Слід врахувати, що в випадках, коли частота відео кадрів і частота оновлення зображення на дисплеї не збігаються, оптимізації циклу оновлення кадрів за допомогою Flip недостатньо для забезпечення відео прийнятної якості. Існують деякі способи формування або зміни кадрів вмісту, які дозволяють усунути зазначені проблеми, однак вони виходять за рамки даної публікації.

Деякі операційні системи надають програмні інтерфейси, за допомогою яких додатки можуть підтримувати синхронізацію з циклом оновлення дисплея. Зокрема, середа Microsoft DirectX 9.0 включає кілька процедур, які можуть бути дуже корисні в нашому випадку. Далі ми розглянемо стандартні процедури DirectX як зразкових методів розв'язання досліджуваної проблеми. Читачі можуть використовувати ці приклади для вивчення пропонованих методів і пошуку аналогічних рішень в інших операційних системах.

WaitForVerticalBlank () - це стандартна процедура бібліотеки DirectDraw (в рамках інтерфейсу IDirectDraw), яка блокує звертається до інтерфейсу потік до початку наступного циклу оновлення. Ця процедура може бути використана для синхронізації, проте її слід виконувати одноразово або зі значним інтервалом, оскільки звернення до неї пов'язане з великими витратами часу. Проте, дана процедура корисна при виконанні початкової синхронізації з циклом оновлення.

GetScanLine () - це стандартна процедура, яка може використовуватися для отримання даних про те, яка рядок розгортки зараз оновлюється на дисплеї. Якщо відома загальна кількість рядків і поточний рядок розгортки, то не складає труднощів визначити стан циклу оновлення зображення на дисплеї. Наприклад, якщо загальна кількість рядків дисплея становить 1024, а процедура GetScanLine () повертає значення 100, поточний цикл поновлення в даний момент визначається відношенням 100 до 1024, тобто завершений приблизно на 10 відсотків. Застосування GetScanLine () дозволяє додатку відстежувати стан циклу оновлення та на його основі визначати, до якого циклу прив'язувати наступний відображається кадр, і налаштовувати таймер на потрібний час перемикання буфера. Нижче наводиться приблизний алгоритм:

малюнок 6

Час зміни кадру вибирається не тільки на підставі розрахунку нових кадрів зображення, а й з урахуванням частоти оновлення екрану. Оскільки кадри відображатися на екрані тільки в момент оновлення зображення на дисплеї, необхідно зробити так, щоб кожен кадр «потрапив» в правильний цикл оновлення. Таким чином, в ідеалі підготовка кадрів зображення повинна точно збігатися з частотою оновлення екрану. У цьому випадку кожен кадр буде отрісовиваться на дисплеї в потрібний момент.

Альтернативне рішення для вмісту записів

Розглянуті нами проблеми відносяться до всіх сценаріями відтворення відео, як в разі мовлення в прямому ефірі, так і при відтворенні записаного відео. Однак, в останньому випадку можна вдатися і до альтернативного вирішення. Якщо різниця між частотою кадрів вмісту і частотою оновлення зображення на дисплеї невелика, можна скорегувати частоту кадрів відео (і таким же чином скорегувати аудиопоток) таким чином, щоб він відповідав частоті оновлення екрану, без погіршення якості вмісту. Як приклад візьмемо відтворення телевізійного сигналу стандартного дозволу з частотою 59,94 кадрів в секунду (з дєїнтерлейсинга за алгоритмом Bob) на моніторі з частотою 60 Гц. За рахунок прискорення відтворення відео і аудіо до 60 кадрів в секунду можна домогтися того, що час зміни кадрів буде відповідати інтервалам оновлення екрану і при цьому не будуть виникати артефакти зображення.

резюме

Дана публікація присвячена методам синхронізації зображення, зокрема, запобігання артефактів «розриву» зображення за допомогою команди Flip. У статті також розглядаються випадки, коли команда Flip викликає проблеми, викликані жорсткою синхронізацією з циклами оновлення дисплея. Правильна синхронізація кадрів і використання команд Flip може привести до того, що час відображення кадрів і інтервал між ними будуть відрізнятися від значень, очікуваних програмним додатком. У статті робиться висновок, що коректний спосіб використання команд Flip повинен поєднувати синхронізацію Flip з частотою оновлення екрану і оптимізацію циклу розрахунку зображення з урахуванням його подальшого виведення. Таким чином, в програмному забезпеченні може бути передбачено регулювання інтервалів Flip. Кращу якість відео досягається за умови збігу частоти кадрів вмісту з частотою оновлення зображення на дисплеї. Однак, на практиці це не завжди можна досягти. Описані в даній статті алгоритми допоможуть звести артефакти зображення до мінімуму.

додаткові відомості

DirectX 9.0 SDK, © 2004, Microsoft Corporation.

http://microsoft.com/directx *