• Как работает видеокодек. Часть 2. Что, для чего, как

    • Translation

    Первая часть: Основы работы с видео и изображениями




    Kodek's History

    Что? Видеокодек — это часть программного/аппаратного обеспечения, сжимающая и/или распаковывающая цифровое видео.

    Для чего? Невзирая на определённые ограничения как по пропускной способности так
    и по количеству места для хранения данных, рынок требует всё более качественного видео. Припоминаете, как в прошлом посте мы подсчитали необходимый минимум для 30 кадров в секунду, 24 бита на пиксель, с разрешение 480x240? Получили 82,944 Мбит/с без сжатия. Сжатие — это пока единственный способ вообще передавать HD/FullHD/4K на телевизионные экраны и в Интернет. Как это достигается? Сейчас кратко рассмотрим основные методы.
    Читать дальше →
  • Как работает видеокодек. Часть 1. Основы

    • Translation

    Вторая часть: Принципы работы видеокодека




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

    Если рассматривать итоговый цвет как комбинацию т.н. основных цветов (красного, зеленого и синего), в нашей трёхмерной матрице определяем три плоскости: первая для красного цвета, вторая для зеленого и последняя для синего.
    3D матрица RGB

    Будем называть каждую точку в этой матрице пикселем (элементом изображения). Каждый пиксель содержит информацию об интенсивности (обычно в виде числового значение) каждого цвета. Например, красный пиксель означает, что в нём 0 зеленого цвета, 0 синего и максимум красного. Пиксель розового цвета может быть сформирован с помощью комбинации трех цветов. Используя числовой диапазон от 0 до 255, розовый пиксель определяется как Красный = 255, Зелёный = 192 и Синий = 203.
    Читать дальше →
  • Стоимость операций в тактах ЦП

    • Translation
    Всем доброго! Вот мы и добрались до тематики С++ на наших курсах и по нашей старой доброй традиции делимся тем, что мы нашли достаточно интересным при подготовке программы и то, что будем затрагивать во время обучения.

    Инфографика:



    Когда нам нужно оптимизировать код, мы должны отпрофилировать его и упростить. Однако, иногда имеет смысл просто узнать приблизительную стоимость некоторых популярных операций, чтобы не делать с самого начала неэффективных вещей (и, надеюсь, не профилировать программу позже).
    Читать дальше →
  • Разработчики о самых грязных программных трюках в играх

    • Translation
    image


    Когда время заканчивается, разработчики выдохлись, а загадочные проблемы продолжают появляться, иногда требуются нестандартные решения. Когда вам любой ценой нужно завершить проект, то на кону стоит всё… В паре классических статей, изначально опубликованных в дружественном журнале Game Developer magazine, мы изучили несколько потрясающих примеров таких решений из реальной жизни. Эти нестареющие шедевры можно прочитать здесь (перевод на Хабре) и здесь.

    Gamasutra ещё раз решила рассмотреть эту тему. Мы собрали со всей игровой индустрии необычные решения необычных проблем. Те, кто поделился с нами этими решениями, могут и не гордиться такими «исправлениями», но на самом деле гордиться им стоит. Им удалось выпустить игру, они ничего не испортили и, что важнее всего, никто ничего не заметил. По крайней мере, до этой статьи.

    Насладитесь изобретательностью, подивитесь бесстрашию, научитесь на ошибках своих предшественников, и самое важное — выпускайте работающие игры, и тоже в срок.
    Читать дальше →
  • Катаем «смоляной шарик» или создание собственных правил сборки с помощью Qbs

      Qbs (Qt Build System) — система сборки, позволяющая описывать процесс сборки проектов на простом языке QML (javascript-подобный декларативный язык), ускоряющий процесс сборки продуктов за счет построения подробного графа зависимостей. Хоть эта система и создана разработчиками Qt, но она жестко не привязана к Qt и позволяет собирать любые продукты, для любых языков программирования и даже использоваться не для программирования, а например для администрирования. Как заявлено в официальной документации:
      A product is the target of a build process, typically an application, library or maybe a tar ball

      Сегодня и рассмотрим процесс создания своих продуктов. Поехали…
      Читать дальше →
    • Как сделать context switch на STM32

        Добрый день!

        Потоки… Переключение контекстов… Базовая сущность ОС. И конечно, при разработке библиотек и приложений мы всегда полагаемся на то, что реализация потоков безошибочна. Поэтому было неожиданно найти грубую ошибку в переключении потоков для STM32 на ОСРВ Embox, когда уже продолжительное время работали и сеть, и файловая система и многие сторонние библиотеки. И мы даже успели похвастаться о своих достижениях на Хабре.

        Я бы хотел рассказать про то, как мы делали переключение потоков для Cortex-M, и тестировали на STM32. Кроме того, постараюсь рассказать о том как это сделано в других ОС — NuttX и FreeRTOS.
        Читать дальше →
      • Свой скриптовый движок для игр средствами С++ и Lua (часть — 1)

        • Tutorial

        Предисловие


        Возможно у вас наступал такой момент, что хотелось написать свой движок для игр, или просто вы хотели узнать, как такое реализовать, но по каким — то причинам вам это не удавалось.
        Ну что ж, тема довольно обширная, поэтому я начинаю серию уроков по написанию своего 2д игрового движка, и поверьте он будет не хуже того же Love2d, именно такого стиля и будет наш движок.
        Читать дальше →
      • ТОП-11 бесплатных ресурсов для изучения английской грамматики

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

        /* здесь могла быть картинка про грамматику, но мы решили не нагружать ваш браузер */
        Читать дальше →
      • 7 способов отобразить видео с RTSP IP-камеры на веб-странице и 2 в мобильном приложении

          В этой статье покажем 7 технологически разных способов отображения видеопотока с IP-камеры с поддержкой RTSP на web-странице браузера.

          Браузеры, как правило, не поддерживают RTSP, поэтому поток будет конвертироваться для браузера через промежуточный сервер.
          Читать дальше →
          • +13
          • 75.9k
          • 4
        • Трансляция RTMP видеопотока из Live Encoder на WebRTC


            HTTP протоколы доставки видеоконтента, такие как HLS и DASH давно потеснили Flash в нише воспроизведения онлайн-видео контента в браузерах.

            Тем не менее, изначально флэшовый протокол RTMP, остается одним из самых популярных способов доставки Live видео от источника видео до сервера ретранслятора. RTMP продолжают использовать такие сервисы, как Facebook Live, Youtube Live, и другие, где требуется вещать живое видео и проводить трансляции. Таким образом, несмотря на предсказания и констатации скорой кончины Flash, протокол RTMP все еще на коне и не уступает своих позиций в нише видеотрансляций.
            Читать дальше →
          • Настройка окружения SELinux на примере LAMP-сервера

            • Tutorial

            Это третья статья из цикла


            И сегодня она попала в поток «Администрирование». Сегодня мы не будем писать модули или настраивать RBAC, а пойдем по пути наименьшего сопротивления и просто захарденим обычный LAMP-сервер при помощи готовой политики, включив необходимые настройки.

            Если кто забыл, за аббривиатурой LAMP скрывается Linux, Apache, Mysql, PHP, т.е. это большая часть всех VDS, которые покупают люди для хранения своих личных блогов. Надеюсь, что этот поможет всем им стать немного безопаснее :)
            Читать дальше →
          • Робомобиль на базе Arduino Mega 2560 с Bluetooth управлением и автономным движением с объездом препятствий

              Представляю свой проект робомобиля на Arduino. На просторах интернета есть масса подобных статей, наткнувшись на одну из них решил реализовать увиденное со своими изменениями в конструкцию и функционал. Реализованы следующие возможности: управление робомобилем по Bluetooth со смартфона; автономное движение робомобиля с объездом препятствий.


              Читать дальше →
            • Заметка о способе отладки блокировок в ядре Linux

              • Tutorial

              Всем привет! Данная заметка касается одного практического приёма, который я использовал при решении задачи определения места в ядре ОС Linux, где удерживается определённая спин-блокировка (спин-лок). Данная проблема возникла достаточно спонтанно и, учитывая сложность ядра, могла бы потребовать большое количество времени для решения. Если Вам это интересно, прошу читать далее...

              Читать дальше →
            • Как работать с JIT

              • Translation

              enter image description here


              В некоторых внутренних системах для быстрого поиска по большому битовому массиву мы в Badoo используем JIT. Это очень интересная и не самая известная тема. И, чтобы исправить такую досадную ситуацию, я перевел полезную статью Элая Бендерски о том, что такое JIT и как его использовать.

              Читать дальше →
              • +49
              • 13.5k
              • 8
            • Visual C++ for Linux Development: Практика использования для Windows разработчиков

              • Tutorial

              enter image description here


              Так получилось, что за достаточно долгую карьеру Windows и Embedded разработчика судьба свела меня по серьезному с Linux всего лишь несколько месяцев назад. Нужно было написать не очень сложную консольную программу. На тот момент все мои знания о Linux были взяты из курса по операционным системам в вузе (10 лет назад). Но Stackoverflow, google и опыт позволили достаточно быстро справиться с задачей. В итоге все было написано в Visual Studio Code под Ubuntu 14.04. Правда, приложение под Linux являлось только лишь небольшим клиентом для Windows сервера. Поэтому результат не очень удовлетворял меня, так как был оторван от основного проекта в Visual Studio. И только сейчас я смог перенести код в основной проект с помощью Visual C++ for Linux Development. В процессе мне пришлось решить несколько сопутствующих проблем. Об этом я рассажу под катом.

              Читать дальше →
            • Кросскомпиляция под ARM

              Достаточно давно хотел освоить сабж, но всё были другие более приоритетные дела. И вот настала очередь кросскомпиляции.

              В данном посте будут описаны:

              1. Инструменты
              2. Элементарная технология кросскомпиляции
              3. И, собственно, HOW2

              Кому это интересно, прошу под кат.
              Читать дальше →
            • Боги войны. Кое-что об артиллерийских играх. Часть I



                В детстве я обожал сеять хаос и разрушение. Я пускал ракеты из селитры. Я бросал бомбы из спичечной серы в эрцгерцога Фердинанда воздух. Я мастерил карбидные пушки. Потом подрос, повысил себя в звании и рекрутировал на строительство младшего брата, оставив себе почетное право подносить спичку к заряженному орудию. Потом я стал бояться милиционеров старше и умней, примерно в это же время в доме появился первый компьютер, и жизнь моя бесповоротно изменилась: мне открылся мир чистого разрушения, безопасного для подростковой биографии и нервной системы соседских псов.
                Читать дальше →
              • Мониторинг системных вызовов Linux

                • Translation


                Если вы инженер в организации, использующей Linux в промышленной эксплуатации, у меня к вам два небольших вопроса.


                1. Сколько уникальных исходящих TCP-соединений установили ваши серверы за последний час?
                2. Какие процессы и пользователи инициировали установку этих соединений?

                Если вы в состоянии ответить на оба вопроса, отлично — дальше можете не читать. А если ответа нет, то получить эту информацию поможет go-audit.

                Читать дальше →
                • +24
                • 17.1k
                • 5
              • Как я существенно облегчил работу с Raspberry Pi («всё новое — хорошо забытое старое»)



                  -Как начать работу с Raspberry Pi?
                  -Залить на SD-карту образ, подключить к питанию и пойти в магазин докупить всё, чего не хватает.


                  Raspberry Pi в стандартной поставке — не подарок. По крайней мере, если вы собрались подарить Pi кому-то на этот Новый Год, удостоверьтесь, что счастливому получателю будет доступен комплект клавиатура-монитор-мышь, или хотя бы USB-UART адаптер.


                  Что же делать, если хочется заняться своим проектом, но есть только плата и к ней проблематично подключить хоть что-либо? Я мучался с такого рода проблемами 3 года, пока не разработал pyLCI. О том, как начать использовать pyLCI и что оно даёт, я и расскажу сегодня.

                  Облегчить работу с Raspberry Pi?
                • История одного бага: выравнивание данных на x86

                  • Translation
                  Однажды мне пришлось вычислять сумму векторов целых чисел.

                  Звучит необычно. Кому понадобится делать это в реальной жизни? Обычно такие вычисления встречаются только в задачках из начальной школы или бенчмарках компилятора. Но сейчас это случилось на самом деле.

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

                  • её можно эффективно выполнить с помощью процессорной инструкции ADC (к сожалению, эта функция недоступна в C);
                  • её можно выполнить на словах любого размера (можете добавить по желанию восьмибайтные значения, только результат следует уменьшить до двух байт и добавить все биты переполнения);
                  • она нечувствительна к порядку следования байтов (удивительно, но это так).
                  Читать дальше →