Видео кодиране 7

VLC кодовете (по дефиниция) съдържат променлив брой битове, но когато се пренасят данни по мрежи, може да е необходимо да се картографират последователности от VLC кодове, генерирани от енкодер, в поток от байтове или думи. Механизмът за тази операция е показан на фиг. 7.14. Входният регистър R натрупва VLC кодове, докато се съберат достатъчно данни, за да ги запишат в един или повече изходни байта на потока. Когато кодирате нови знаци, стойностите на VLC на съответните VLC кодове се добавят към предишното съдържание на регистъра R (новите VLC кодове се въвеждат в горните битове). Броячът на броя битове, записани в R, се увеличава с числото L (дължината на новия VLC код в битове). Ако R съдържа повече от S байта (тук S обозначава броя байтове, които се записват в изходния поток в даден момент), тогава ниските S байта от R се записват в изходния поток и съдържанието на регистъра R се измества надясно с S байта.

Ориз. 7.14. Блок-схема на VLC кодиране.

Последователността от VLC кодове (от Таблица 3.12, Глава 3) се кодира по метода, описан по-горе. Нека S = 1, т.е. един байт се записва в изходния поток наведнъж. В табл. Фигура 7.1 показва процеса на представяне на кодове с променлива дължина в изходния поток на всеки етап, като байтът е написан с удебелен шрифт.

Ориз. 7.15. VLC променлива кодираща архитектура.

На фиг. Фигура 7.15 показва основната архитектура за изпълнение на процеса на кодиране с променлива дължина. Новите символи за данни и контекстни указатели (избрана таблица) се предават на модула за търсене на таблица, който връща стойността V и дължината L на съответната кодова дума. Модулът за подреждане подрежда VLC кодовете един след друг и извежда S байта в една стъпка (както е описано в предишнияпример).

кодове

Ориз. 7.16. Диаграма на VLC декодиране

При практическото разработване на ентропийни енкодери с променлива дължина трябва да се обърне внимание на изчислителната ефективност на алгоритмите и размера на справочните таблици. На софтуерно ниво процедурите за ентропийно кодиране могат да бъдат много интензивни за процесора поради честото използване на битови операции, използвани за подреждане и преместване на кодове. Изграждането на добри справочни таблици също е особен проблем поради неправилната структура на VLC кодовата таблица. Например таблицата TCOEF в MPEG-4 Visual (вижте глава 3) се индексира с три параметъра: "run" (дължината на предходната поредица от нули), "value" (стойността на ненулевия коефициент след тези нули) и "end" (флагът на последния ненулев коефициент в блока). Общо има само 102 налични VLC кода и над 16 000 валидни комбинации от тройки ("серия", "стойност", "край"), които съответстват или на LVC код с променлива дължина до 13 бита, или на фиксиран 20-битов escape код. Следователно съхраняването на съответната справочна таблица ще изисква значително количество памет. Стандартът H.264 използва схема за кодиране с променлива дължина, в която много символи са представени от "универсални" експоненциални кодове на Golomb, които се изчисляват директно от стойността на знака за данни (следователно няма нужда да се изграждат справочни таблици) (вижте Глава 6).

7.2.6.2. Декодиране на кодове с променлива дължина

Декодирането на VLC кодове се основава на "сканиране" на получения поток от битове, за да се раздели на легални кодови думи, които се съпоставят с подходящи синтактични елементи. Както при кодирането, необходимо е да знаете текущия контекст, за да изберете правилно таблицата с кодови думи. На фиг. 7.16 показва простаметод за декодиране на една VLC кодова дума. Декодерът чете последователни битове от входния поток, докато открие (обикновено) валиден VLC код или докато открие невалиден VLC код (т.е. код, който не присъства в текущия контекст). Например код, започващ с девет или повече нули, не е разрешен, ако декодерът очаква коефициент на трансформация на MPEG-4. Декодерът връща подходящ синтаксисен елемент, ако бъде намерен валиден код, и индикатор за грешка, ако бъде намерен невалиден VLC код.

Таблица 7.2. Пример за декодиране на VLC кодове в MPEG-4 Visual TCOEF.