6.5.1. В-слоиКаждый блок деления макроблока в моде inter В-слоя может быть спрогнозирован по одному или двум ссылочным снимкам, которые располагаются в хронологическом порядке до или после текущего снимка. В зависимости от ссылочных снимков, сохраняемых кодером и декодером (см. следующий параграф), это обеспечивает широкий выбор параметров прогнозирования макроблоков типа В. На рис. 6.40 приведены три примера: (а) один прошлый и один будущий ссылочный снимок (аналогично прогнозам В-кадров в предыдущих стандартах MPEG), (б) два прошлых снимка и (в) два будущих ссылочных снимка. Рис. 6.40. Примеры прогнозов для блоков В-макроблоков: (а) прошлое/будущее, (б) прошлое, (в) будущее. 6.5.1.1. Ссылочные снимкиВ-слои используют два списка ранее закодированных ссылочных снимков — список 0 и список 1, в которых хранятся снимки с близкими и давними сроками (см. § 6.4.2). Оба списка могут хранить прошлые и будущие сжатые снимки (которые будут демонстрироваться до или после текущего кадра). Организация снимков с давними сроками в этих списках похожа на организацию снимков, приведенную в § 6.4.2, а при хранении снимков с близкими сроками по умолчанию принят следующий порядок индексов в этих списках. Список 0: ближайший снимок в прошлом (в хронологическом порядке) индексируется нулем, за которым следуют другие прошлые снимки (с возрастанием счетчика снимков), а потом будущие снимки (по отношению к текущему снимку). Список 1: ближайший будущий снимок имеет индекс 0, за ним следуют другие будущие снимки (с увеличением счетчика снимков), а потом прошлые снимки.
Рис. 6.41. Примеры мод прогнозов для макроблоков В-слоев. Выбранный индекс посылается в виде слова экспоненциального кода Голомба (см. § 6.4.13.1), и поэтому самым эффективным выбором ссылочного индекса (с наименьшим кодовым словом) будет индекс 0 (т.е. предыдущий закодированный снимок из списка 0 или следующий снимок из списка 1). Таблица 6.15. Опции прогнозов для макроблоков В-слоев.
6.5.1.2. Опции прогнозаЧасти макроблоков из В-слоев могут быть спрогнозированы одним из следующих способов: прямая мода (см. § 6.5.1.4), компенсация движения по снимкам из списка 0, компенсация движения по снимкам из списка 1 или двунаправленный прогноз компенсации движения одновременно по спискам 0 и 1 (см. § 6.5.1.3). Для каждого блока деления макроблока можно выбрать различные моды прогнозирования (см. табл. 6.15). Если используются блоки 8 х 8, то мода, выбранная для каждого блока 8x8, применяется к каждому подблоку этого блока. На рис. 6.41 показаны два примера допустимых комбинаций мод прогнозов. Для макроблока слева, разделенного на блоки 16 х 8, применяется прогнозирование по списку 0 и двунаправленное прогнозирование, а для макроблока справа, поделенного на 4 блока 8x8, используются следующие моды: прямая, список 0, список 1 и двунаправленный прогноз. 6.5.1.3. Двунаправленный прогнозВ моде двунаправленного прогноза ссылочный блок (имеющий размер текущего блока или подблока) строится по спискам 0 и 1 ссылочных снимков. Из каждого списка 0 и 1 извлекается по одной ссылочной области (значит, потребуется два вектора движения), и каждый сэмпл блока-прогноза вычисляется как среднее значение соответствующих сэмплов прогнозных областей из списков 0 и 1. Если не используется взвешенное прогнозирование (см. § 6.5.2), то применяется следующая формула: , где и - это прогнозные сэмплы из списков 0 и 1 ссылочных снимков, a - это сэмпл двунаправленного прогноза. После вычисления всех прогнозных сэмплов остаточный снимок после компенсации движения получается, как обычно, вычитанием построенного блока-прогноза из текущего блока данного макроблока.
Векторы движения списков 0 и 1 двунаправленных прогнозов макроблоков или блоков сами прогнозируются по окрестным векторам движения, которые имеют такое же временное направление. Например, вектор текущего макроблока, указывающий на кадр в прошлом, прогнозируется по другим соседним векторам, которые также указывают на прошлые кадры. 6.5.1.4. Прямой прогнозВ прямой моде векторы движения макроблоков или их частей из В-слоев не передаются декодеру. Вместо этого декодер вычисляет векторы списков 0 и 1 на основе ранее закодированных векторов и использует их для выполнения двунаправленной компенсации движения декодированного остаточного блока. Пропущенный макроблок В-слоя реконструируется декодером с помощью прямого прогноза. В заголовке слоя устанавливается флаг, обозначающий использование пространственного или временного метода для вычисления векторов макроблоков или их подблоков в прямой моде. В пространственной прямой моде списки 0 и 1 прогнозированных векторов вычисляются следующим образом. Прогнозные списки 0 и 1 строятся по методу, описанному в § 6.4.5.3. Если близкий макроблок или его часть в списке 1 ссылочных снимков имеет вектор движения, который меньше чем ±1/2 сэмпла яркости по абсолютной величине (и в некоторых других случаях), то один или оба прогнозных вектора обнуляются. В противном случае прогнозные списки 0 и 1 векторов используются для совершения двуналравленной компенсации движения. Во временной прямой моде декодер выполняет следующие шаги. Рис. 6.42. Ссылочная область (снимок списка 0). Рис. 6.43. Ссылочная область (снимок списка 1). Рис. 6.44. Прогноз (невзвешенный). 1. Найти ссылочный снимок списка 0 для близкого макроблока или его части на снимке списка 1. Эта ссылка списка 0 становится ссылкой первого списка для текущего макроблока или его части. 2. Найти вектор MV списка 0 для близкого макроблока или его части на снимке списка 1. 3. Перемасштабировать вектор MV с помощью «расстояния" — порядкового счетчика снимков между текущим снимком и снимком списка 1: это будет новый вектор MV1 списка 1. 4. Перемасштабировать вектор MV с помощью «расстояния» — порядкового счетчика снимков между текущим снимком и снимком списка 0: это будет новый вектор MV0 списка 0. Эти моды слегка модифицируются, когда, например, прогнозные ссылочные макроблоки или их части недоступны или они кодируются в моде intra. Рис. 6.45. Пример прямого вектора движения.
|