RU2817030C2 - Кодер, декодер и соответствующие способы использования для списка объединения ibc - Google Patents

Кодер, декодер и соответствующие способы использования для списка объединения ibc Download PDF

Info

Publication number
RU2817030C2
RU2817030C2 RU2021133871A RU2021133871A RU2817030C2 RU 2817030 C2 RU2817030 C2 RU 2817030C2 RU 2021133871 A RU2021133871 A RU 2021133871A RU 2021133871 A RU2021133871 A RU 2021133871A RU 2817030 C2 RU2817030 C2 RU 2817030C2
Authority
RU
Russia
Prior art keywords
block
mvp
prediction
motion vector
video
Prior art date
Application number
RU2021133871A
Other languages
English (en)
Other versions
RU2021133871A (ru
Inventor
Хуаньбан ЧЭНЬ
Хань ГАО
Хайтао ЯН
Original Assignee
Хуавэй Текнолоджиз Ко., Лтд.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Хуавэй Текнолоджиз Ко., Лтд. filed Critical Хуавэй Текнолоджиз Ко., Лтд.
Publication of RU2021133871A publication Critical patent/RU2021133871A/ru
Application granted granted Critical
Publication of RU2817030C2 publication Critical patent/RU2817030C2/ru

Links

Abstract

Изобретение относится к средствам для кодирования изображений. Технический результат заключается в повышении эффективности кодирования изображений. Получают значение максимального количества потенциально подходящих вариантов предсказания вектора движения (MVP) на объединение для текущего блока, при этом текущий блок предсказан с использованием режима внутриблочного копирования. Устанавливают значение mvp_10_flag[x0][y0] равным нулю, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному, где mvp_10_flag[x0][y0] указывает индекс предиктора вектора движения для списка 0, где x0, y0 указывают местоположение (x0, y0) верхнего левого дискретного отсчета яркости текущего блока относительно верхнего левого дискретного отсчета яркости снимка. Данное значение mvp_10_flag[x0][y0] не получено посредством анализа из битового потока. Получают, посредством анализа, значение mvp_10_flag[x0][y0] из битового потока, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока больше одного. Получают вектор движения текущего блока согласно mvp_10_flag[x0][y0] и списку потенциально подходящих вариантов. 4 н. и 4 з.п. ф-лы, 12 ил., 5 табл.

Description

Область техники, к которой относится изобретение
Варианты осуществления настоящей заявки (раскрытия) в целом относятся к области обработки изображений и, в частности, к списку объединения, используемому для предсказания IBC.
Уровень техники
Видеокодирование (кодирование и декодирование видео) используется в широком диапазоне применений цифрового видео, например, в широковещательном цифровом телевидении, передаче видео через Интернет и мобильные сети, в диалоговых приложениях в реальном времени, таких как видеочат, видеоконференцсвязь, DVD и Blu-Ray диски, системы сбора и редактирования видеоконтента и видеокамеры приложений безопасности.
Объем видеоданных, необходимых для представления даже относительно короткого видео, может быть значительным, что может привести к трудностям, когда эти данные должны передаваться в потоковом режиме или иным образом передаваться по сети связи с ограниченной пропускной способностью. Таким образом, видеоданные, как правило, сжимаются перед тем, как передаваться через современные телекоммуникационные сети. Размер видео также может быть проблемой, когда видео хранится на запоминающем устройстве, поскольку ресурсы памяти могут быть ограничены. Устройства сжатия видео часто используют программное и/или аппаратное обеспечение в источнике для кодирования видеоданных перед передачей или хранением, тем самым уменьшая количество данных, необходимых для представления цифровых видеоизображений. Сжатые данные затем принимаются устройством распаковки видео получателя, которое декодирует видеоданные. С ограниченными сетевыми ресурсами и постоянно растущими требованиями к более высокому качеству видео, желательны улучшенные способы сжатия и распаковки, которые улучшают степень сжатия с минимальными потерями качества изображения или вообще без таких потерь.
Сущность изобретения
Варианты осуществления настоящей заявки предоставляют устройства и способы кодирования и декодирования согласно независимым пунктам формулы изобретения.
Вышеупомянутые и другие цели достигаются изобретением по независимым пунктам формулы изобретения. Дополнительные формы реализации очевидны из зависимых пунктов формулы изобретения, описания и фигур.
Первый аспект настоящего изобретения предоставляет способ кодирования, реализуемый устройством декодирования, при этом способ содержит: получение значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, при этом текущий блок предсказан с использованием режима внутриблочного копирования (IBC); установку значения индекса MVP равным нулю, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному; получение вектора движения текущего блока согласно индексу MVP и списку потенциально подходящих вариантов; получение значений дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
Согласно варианту осуществления настоящего изобретения вектор движения (или также называемый вектором блока) для блока IBC определяется согласно первому индексу в списке в ситуации, когда имеется только один потенциально подходящий вариант MVP. Следовательно, значение индекса MVP не нужно отправлять на сторону декодера, вектор движения для блока IBC задается, и битовый поток сокращается.
Как показано на Фиг.10, раскрыт способ кодирования, реализуемый устройством декодирования, который содержит:
S101: получение значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, при этом текущий блок предсказан с использованием режима внутриблочного копирования (IBC).
В некоторых вариантах осуществления значение максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) представлено согласно синтаксису six_minus_max_num_ibc_merge_cand.
six_minus_max_num_ibc_merge_cand, когда sps_ibc_enabled_flag равен 1, указывает максимальное количество потенциально подходящих вариантов предсказания вектора блока объединения (BVP) IBC, поддерживаемых в SPS, вычитаемое из 6. Значение six_minus_max_num_ibc_merge_cand должно быть в диапазоне от 0 до 5 включительно.
Максимальное количество потенциально подходящих вариантов BVP объединения IBC, MaxNumIbcMergeCand, определяется следующим образом:
если (sps_ibc_enabled_flag)
MaxNumIbcMergeCand=6 - six_minus_max_num_ibc_merge_cand
иначе
MaxNumIbcMergeCand=0.
sps_ibc_enabled_flag, равный 1, указывает, что режим предсказания IBC может использоваться при декодировании снимков в закодированной в одном слое видеопоследовательности (CLVS). sps_ibc_enabled_flag, равный 0, указывает, что режим предсказания IBC не используется в CLVS. Если sps_ibc_enabled_flag отсутствует, предполагается, что он равен 0.
В другом примере режим IBC для блока сигнализируется флагом pred_mode_ibc_flag, значение pred_mode_ibc_flag, равное 1, указывает, что текущий единичный блок кодирования (блок кодирования) кодируется в режиме предсказания IBC. Значение pred_mode_ibc_flag, равное 0, указывает, что текущий единичный блок кодирования (блок кодирования) не кодируется в режиме предсказания IBC.
В примере, когда pred_mode_ibc_flag равен 1, переменная CuPredMode[chType][x][y] устанавливается равной MODE_IBC для x=x0..x0+cbWidth-1 и y=y0..y0+cbHeight-1. Например, CuPredMode[0][xCb][yCb] равна MODE_IBC, означает, что текущий блок предсказан с использованием режима внутриблочного копирования (IBC), где (xCb, yCb) указывает верхний левый дискретный отсчет текущего блока кодирования яркости относительно верхнего левого дискретного отсчета яркости текущего снимка.
В вариантах осуществления или реализации настоящего изобретения для режима IBC вектор блока имеет те же технические средства, что и вектор движения.
S102: установка значения индекса MVP равным нулю, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному.
В одном варианте осуществления синтаксис индекса MVP mvp_l0_flag задается следующим образом:
mvp_l0_flag[x0][y0] указывает индекс предиктора вектора движения для списка 0, где x0, y0 указывают местоположение (x0, y0) верхнего левого дискретного отсчета яркости рассматриваемого блока кодирования относительно верхнего левого дискретного отсчета яркости снимка.
Когда mvp_l0_flag[x0][y0] отсутствует, предполагается, что он равен 0.
Например,
Синтаксис единичного блока кодирования:
если (MaxNumIbcMergeCand>1)
mvp_l0_flag[x0][y0] ае (v)
S103: получение вектора движения текущего блока согласно индексу MVP и списку потенциально подходящих вариантов.
В примере для получения вектора движения,
входные данные для этого процесса являются следующими:
местоположение яркости (xCb, yCb) верхнего левого дискретного отсчета текущего блока кодирования яркости относительно верхнего левого дискретного отсчета яркости текущего снимка,
переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетов яркости,
переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетов яркости.
Результатами этого процесса являются:
вектор блока яркости с точностью 1/16 дробного дискретного отсчета (bvL).
Вектор блока яркости bvL получается с помощью следующих этапов:
1. Когда IsGt4by4 имеет значение ИСТИНА (в примере, переменная IsGt4by4 получается следующим образом: IsGt4by4=(cbWidth*cbHeight)>16), процесс получения потенциально подходящих вариантов пространственного вектора блока из соседних единичных блоков кодирования вызывается с местоположением блока кодирования яркости (xCb, yCb), шириной блока кодирования яркости cbWidth и высотой cbHeight в качестве входных данных, и выходными данными являются флаги доступности availableFlagA1, availableFlagB1 и векторы блоков bvA1 и bvB1.
2. Когда IsGt4by4 имеет значение ИСТИНА, список потенциально подходящих вариантов вектора блока, bvCandList, строится следующим образом:
i=0
если (availableFlagA1)
bvCandList[i++]=bvA1
если (availableFlagB1)
bvCandList[i++]=bvB1
3. Переменная numCurrCand получается следующим образом:
- IsGt4by4 имеет значение ИСТИНА, numCurrCand устанавливается равным количеству потенциально подходящих вариантов объединения в bvCandList.
- В противном случае (IsGt4by4 имеет значение ЛОЖЬ) numCurrCand устанавливается равным 0.
4. Когда numCurrCand меньше MaxNumIbcMergeCand, а NumHmvpIbcCand больше 0, вызывается процесс получения потенциально подходящих вариантов вектора блока на основе предыстории IBC с bvCandList и numCurrCand в качестве входных данных и измененных bvCandList и numCurrCand в качестве выходных данных.
5. Когда numCurrCand меньше MaxNumIbcMergeCand, следующее применяется до тех пор, пока numCurrCand не станет равным MaxNumIbcMergeCand:
bvCandList[numCurrCand][0] устанавливается равным 0.
bvCandList[numCurrCand][1] устанавливается равным 0.
numCurrCand увеличивается на 1.
6. Переменная bvIdx получается следующим образом:
bvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]: mvp_l0_flag[xCb][yCb].
general_merge_flag[x0][y0] указывает, выводятся ли параметры интер-предсказания для текущего единичного блока кодирования из соседнего разбиения интер-предсказания. Индексы массива x0, y0 указывают местоположение (x0, y0) верхнего левого дискретного отсчета яркости рассматриваемого блока кодирования относительно верхнего левого дискретного отсчета яркости снимка.
merge_idx[x0][y0] указывает индекс потенциально подходящего варианта объединения списка потенциально подходящих вариантов объединения, где x0, y0 указывают местоположение (x0, y0) левого верхнего дискретного отсчета яркости рассматриваемого блока кодирования относительно верхнего левого дискретного отсчета яркости снимка.
7. Сделаны следующие присвоения:
bvL[0]=bvCandList[bvIdx][0].
bvL[1]=bvCandList[bvIdx][1].
В некоторых вариантах осуществления на стороне кодера векторы движения кодируются в терминах горизонтальных (x) и вертикальных (y) компонентов в качестве разности с предиктором вектора движения (MVP). Расчет обоих компонентов разности векторов движения (MVD) показан как MVDx=MVx-MVPx, MVDy=MVy-MVPy.
Следовательно, на стороне декодера MVx=MVPx+MVDx; MVy=MVPy+MVDy.
S104: получение значений дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
В одном примере входными данными в этот процесс являются:
- местоположение яркости (xCb, yCb), указывающее верхний левый дискртеный отсчет текущего блока кодирования относительно верхнего левого дискретного отсчета яркости текущего снимка,
- переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетов яркости,
переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетов яркости,
вектор блока bv,
переменная cIdx, указывающая индекс компонента цвета текущего блока.
Результатами этого процесса являются:
массив predSamples дискретных отсчетов предсказания.
Когда cIdx равно 0, для x=xCb..xCb+cbWidth-1 и y=yCb..yCb+cbHeight-1 применяется следующее:
xVb=(x+(bv[0]>>4))&(IbcBufWidthY-1)
yVb=(y+(bv[1]>>4))&(CtbSizeY-1)
predSamples[x][y]=ibcVirBuf[0][xVb][yVb]
Когда cIdx не равно 0, для x=xCb/subWidthC..xCb/subWidthC+cbWidth/subWidthC-1 и y=yCb/subHeightC..yCb/subHeightC+cbHeight/subHeightC-1 применяется следующее:
xVb=(x+(bv[0]>>5))&(IbcBufWidthC-1)
yVb=(y+(bv[1]>>5))&((CtbSizeY/subHeightC)-1)
predSamples[x][y]=ibcVirBuf[cIdx][xVb][yVb].
Например,
дискретные отсчеты обрабатываются в единичных блоках CTB. Размер массива для каждого CTB яркости по ширине и высоте равен CtbSizeY в единицах исчисления дискретными отсчетами. Ширина и высота массива для каждого CTB цветности равны CtbWidthC и CtbHeightC, соответственно, в единицах исчисления дискретными отсчетами.
IbcBufWidthY=256*128/CtbSizeY;
IbcBufWidthC=IbcBufWidthY/SubWidthC;
IbcVirBuf представляет собой выделенный буфер для процесса режима IBC.
Переменные SubWidthC и SubHeightC указаны в Таблице 2 в зависимости от структуры дискретизации формата цветности, которая задается через chroma_format_idc и own_colour_plane_flag. Другие значения chroma_format_idc, SubWidthC и SubHeightC могут быть определены в будущем ITU-T | ISO/IEC.
Таблица 2 - Значения SubWidthC и SubHeightC, полученные из chroma_format_idc и own_colour_plane_flag
chroma_format_idc separate_colour_plane_flag Формат цветности SubWidthC SubHeightC
0 0 Монохромный 1 1
1 0 4:2:0 2 2
2 0 4:2:2 2 1
3 0 4:4:4 1 1
3 1 4:4:4 1 1
В одном варианте реализации способ дополнительно содержит: анализ значения индекса MVP из битового потока, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока больше одного.
В одном варианте реализации значение индекса MVP анализируется с уровня единичного блока кодирования.
В одном варианте реализации значение индекса MVP указывает индекс предиктора вектора движения списка 0.
В одном варианте реализации значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа уровня набора параметров последовательности (sps) из битового потока.
В одном варианте реализации значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа элемента синтаксиса на уровне сегмента, уровне группы клеток или уровне pps из битового потока.
В одном варианте реализации список потенциально подходящих вариантов получается согласно по меньшей мере одному соседнему блоку, смежному с текущим блоком, и списку предикторов вектора движения на основе предыстории (HMVP), причем упомянутый по меньшей мере один соседний блок предсказан с использованием режима IBC.
В одном варианте осуществления раскрыт способ кодирования, реализуемый устройством декодирования, содержащий:
получение значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, при этом текущий блок предсказан с использованием режима внутриблочного копирования (IBC);
определение того, больше ли значение максимального количества потенциально подходящих вариантов MVP для текущего блока одного или нет;
анализ значения индекса MVP из битового потока, когда определено, что значение максимального количества потенциально подходящих вариантов MVP для текущего блока больше одного;
получение вектора движения текущего блока согласно индексу MVP и списку потенциально подходящих вариантов;
получение значений дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
В одном варианте реализации способ дополнительно содержит:
установку значения индекса MVP равным нулю, когда определено, что значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному.
В одном варианте реализации значение индекса MVP анализируется с уровня единичного блока кодирования.
В одном варианте реализации значение индекса MVP указывает индекс предиктора вектора движения списка 0.
В одном варианте реализации значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа уровня набора параметров последовательности (sps) из битового потока.
В одном варианте реализации значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа элемента синтаксиса на уровне сегмента, уровне группы клеток или уровне pps из битового потока.
В одном варианте реализации список потенциально подходящих вариантов получается согласно по меньшей мере одному соседнему блоку, смежному с текущим блоком, и списку предикторов вектора движения на основе предыстории (HMVP), причем упомянутый по меньшей мере один соседний блок предсказан с использованием режима IBC.
В одном варианте осуществления раскрыт способ кодирования, реализуемый устройством декодирования, содержащий:
получение значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, текущий блок предсказан с использованием режима внутриблочного копирования (IBC);
установку вектора движения текущего блока в значение по умолчанию, когда значение индекса MVP для текущего блока равно одному, и значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному;
получение дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
В одном варианте реализации значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа элемента синтаксиса на уровне сегмента или уровне группы клеток, или уровне sps, или уровне pps из битового потока.
В одном варианте реализации значение по умолчанию равно нулю.
В одном варианте осуществления раскрыт способ кодирования, реализуемый устройством декодирования, при этом способ содержит:
получение значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, текущий блок предсказан с использованием режима внутриблочного копирования (IBC);
когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному, получение списка потенциально подходящих вариантов для текущего блока согласно по меньшей мере одному соседнему блоку, смежному с текущим блоком, и списку предикторов вектора движения на основе предыстории (HMVP), при этом список потенциально подходящих вариантов для текущего блока содержит два потенциально подходящих варианта, и упомянутый по меньшей мере один соседний блок предсказан с использованием режима IBC;
получение вектора движения текущего блока согласно индексу MVP для текущего блока и списку потенциально подходящих вариантов;
получение дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
В одном варианте реализации значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа элемента синтаксиса на уровне сегмента или уровне группы клеток, или уровне sps, или уровне pps из битового потока.
Как показано на Фиг.11, второй аспект настоящего изобретения предоставляет устройство 1100 декодирования, при этом устройство декодирования содержит:
Модуль 1101 MVP, выполненный с возможностью получения значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, при этом текущий блок предсказан с использованием режима внутриблочного копирования (IBC);
Модуль 1102 установки, выполненный с возможностью установки значения индекса MVP равным нулю, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному;
Модуль 1103 вектора движения, выполненный с возможностью получения вектора движения текущего блока согласно индексу MVP и списку потенциально подходящих вариантов;
Модуль 1104 предсказания, выполненный с возможностью получения значений дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
Способ согласно первому аспекту изобретения может выполняться устройством согласно второму аспекту изобретения. Дополнительные признаки и формы реализации вышеупомянутых способов соответствуют признакам и формам реализации устройства согласно второму аспекту изобретения.
В одном варианте осуществления раскрыт декодер (30), содержащий схему обработки для выполнения способа согласно любому из вышеупомянутых вариантов осуществления и реализации.
В одном варианте осуществления раскрыт компьютерный программный продукт, содержащий программный код для выполнения способа согласно любому из вышеупомянутых вариантов осуществления и реализации.
В одном варианте осуществления раскрыт декодер, содержащий:
один или более процессоров; и
долговременный машиночитаемый носитель, соединенный с процессорами и хранящий программы для выполнения процессорами, причем программы, при их исполнении процессорами, конфигурируют декодер для выполнения способа согласно любому из вышеупомянутых вариантов осуществления и реализации.
В одном варианте осуществления раскрыт долговременный носитель данных, который включает в себя закодированный битовый поток, декодированный устройством декодирования изображения, причем битовый поток генерируется посредством разделения кадра видеосигнала или сигнала изображения на множество блоков и включает в себя множество элементов синтаксиса, причем множество элементов синтаксиса содержит индекс MVP mvp_l0_flag согласно любому из вышеупомянутых вариантов осуществления и реализации.
Подробности одного или более вариантов осуществления изложены на прилагаемых чертежах и в нижеследующем описании. Другие признаки, цели и преимущества будут очевидны из описания, чертежей и формулы изобретения.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
В следующих вариантах осуществления изобретения описаны более подробно со ссылкой на сопровождающие фигуры и чертежи, на которых:
Фиг.1A является блок-схемой, показывающей пример системы видеокодирования, выполненной с возможностью реализации вариантов осуществления изобретения;
Фиг.1B является блок-схемой, показывающей другой пример системы видеокодирования, выполненной с возможностью реализации вариантов осуществления изобретения;
Фиг.2 является блок-схемой, показывающей пример видеокодера, выполненного с возможностью реализации вариантов осуществления изобретения;
Фиг.3 является блок-схемой, показывающей примерную структуру видеодекодера, выполненного с возможностью реализации вариантов осуществления изобретения;
Фиг.4 является блок-схемой, иллюстрирующей пример устройства кодирования или устройства декодирования;
Фиг.5 является блок-схемой, иллюстрирующей другой пример устройства кодирования или устройства декодирования;
Фиг.6 является блок-схемой, иллюстрирующей пример соседних блоков текущего блока.
Фиг.7 является блок-схемой, иллюстрирующей пример пяти пространственных соседних потенциально подходящих вариантов текущего блока.
Фиг.8 является блок-схемой, показывающей примерную структуру системы поставки контента, которая реализует службу доставки контента.
Фиг.9 является блок-схемой, показывающей структуру примера терминального устройства.
Фиг.10 является блок-схемой, показывающей вариант осуществления способа.
Фиг.11 является блок-схемой, показывающей вариант осуществления устройства.
Следующие одинаковые ссылочные позиции относятся к идентичным или, по меньшей мере, функционально эквивалентным функциям, если явно не указано иное.
ОСУЩЕСТВЛЕНИЕ ИЗОБРЕТЕНИЯ
В нижеследующем описании делается ссылка на сопроводительные чертежи, которые составляют часть раскрытия и на которых показаны в качестве иллюстрации конкретные аспекты вариантов осуществления изобретения или конкретные аспекты, в которых варианты осуществления настоящего изобретения могут быть использовал. Понятно, что варианты осуществления изобретения могут использоваться в других аспектах и содержать структурные или логические изменения, не изображенные на фигурах. Поэтому нижеследующее подробное описание не следует воспринимать в ограничивающем смысле, и объем настоящего изобретения определяется прилагаемой формулой изобретения.
Например, должно понятно, что раскрытие в связи с описанным способом также может быть верным для соответствующего устройства или системы, выполненной с возможностью выполнения способа, и наоборот. Например, если описан один или множество конкретных этапов способа, соответствующее устройство может включать в себя один или множество блоков, например функциональных блоков, для выполнения описанного одного или множества этапов способа (например, один блок, выполняющий один или множество этапов или множество блоков, каждый из которых выполняет один или более из множества этапов), даже если такой один или более блоков явно не описаны или не проиллюстрированы на фигурах. С другой стороны, например, если конкретное устройство описывается на основе одного или множества блоков, например функциональных блоков, соответствующий метод может включать в себя в себя один этап для выполнения функциональных возможностей одного или множества блоков (например, один этап выполнения функциональные возможности одного или множества модулей или множества этапов, каждый из которых выполняет функциональные возможности одного или более из множества модулей), даже если такой один или множество этапов явно не описаны или не проиллюстрированы на фигурах. Кроме того, понятно, что признаки различных примерных вариантов осуществления и/или аспектов, описанных в данном документе, могут быть объединены друг с другом, если специально не указано иное.
Видеокодирование обычно относится к обработке последовательности снимков, которые образуют видео или видеопоследовательность. Вместо термина «снимок» можно использовать термин «кадр» или «изображение» как синонимы в области видеокодирования. Видеокодирование (или кодирование в общем смысле) содержит две части видеокодирование и декодирование видео. Видеокодирование выполняется на стороне источника, обычно содержащее обработку (например, посредством сжатия) исходных видеоснимков для уменьшения объема данных, необходимых для представления видеоснимков (для более эффективного хранения и/или передачи). Видеодекодирование выполняется на стороне получателя и обычно включает в себя обратную обработку по сравнению с кодером для восстановления видеоснимков. Варианты осуществления, относящиеся к «кодированию» видеоснимков (или снимков в целом, следует понимать как относящиеся либо к «кодированию», либо к «декодированию» видеоснимков или соответственных видеопоследовательностей. Объединение кодирующей части и декодирующей части также называется CODEC (кодирование и декодирование).
В случае кодирования видео без потерь исходные видеоснимки могут быть восстановлены, т.е. Восстановленные видеоснимки имеют то же качество, что и исходные видеоснимки (при условии отсутствия потерь при передаче или других потерь данных во время хранения или передачи). В случае кодирования видео с потерями выполняется дальнейшее сжатие, например, посредством квантования, чтобы уменьшить объем данных, представляющих видеоснимки, которые не могут быть полностью восстановлены в декодере, т.е. качество восстановленных видеоснимков ниже или хуже по сравнению с к качеству исходных видеоснимков.
Несколько стандартов видеокодирования принадлежат к группе «гибридных видеокодеков с потерями» (т.е. сочетают пространственное и временное предсказание в области дискретных отсчетов и кодирование с двумерным преобразованием для применения квантования в области преобразования). Каждый снимок видеопоследовательности обычно разделяется на набор неперекрывающихся блоков, и кодирование обычно выполняется на уровне блоков. Другими словами, в кодере видео обычно обрабатывается, то есть кодируется, на уровне блока (видеоблока), например, с использованием пространственного (внутри снимка) (интра) предсказания и/или временного (между снимками) (интер) предсказания для генерации блока предсказания, вычитая блок предсказания из текущего блока (блок, который в настоящее время обрабатывается/должен быть обработан) для получения остаточного блока, преобразование остаточного блока и квантование остаточного блока в области преобразования для уменьшения объема данных, которые должны быть переданы (сжатие), тогда как в декодере обратная обработка по сравнению с кодером применяется к кодированному или сжатому блоку, чтобы восстановить текущий блок для представления. Кроме того, кодер дублирует цикл обработки декодера, так что оба будут генерировать идентичные предсказания (например, интра- и интер-предсказание) и/или реконструкцию для обработки, то есть кодирования, последующих блоков.
В следующих вариантах осуществления системы 10 видеокодирования кодер 20 и декодер 30 описываются на основе фигур с 1 по 3.
Фиг.1A является схематической блок-схемой, иллюстрирующей примерную систему 10 кодирования, например систему 10 видеокодирования (или вкратце систему 10 кодирования), которая может использовать методики этой настоящей заявки. Видеокодер 20 (или вкратце кодер 20) и видеодекодер 30 (или вкратце декодер 30) системы 10 кодирования видео представляют примеры устройств, которые могут быть выполнены с возможностью выполнения методик в соответствии с различными примерами, описанными в настоящей заявке.
Как показано на Фиг.1A, система 10 кодирования содержит устройство-источник 12, выполненное с возможностью предоставления кодированных данных 21 снимка, например, в устройство-получатель 14 для декодирования кодированных данных 13 снимка.
Устройство-источник 12 содержит кодер 20 и может дополнительно, т.е. в необязательном порядке, содержать источник 16 снимка, препроцессор (или модуль предварительной обработки) 18, например препроцессор 18 снимка, и интерфейс связи или модуль 22 связи.
Источник 16 снимка может содержать или быть устройством захвата снимка любого типа, например, камерой для захвата реального снимка и/или любого вида устройством генерации снимка, например процессор компьютерной графики для генерации компьютерного анимированного снимка, или любое другое устройство для получения и/или предоставления реального снимка, сгенерированного компьютером снимка (например, содержимое экрана, снимок виртуальной реальности (VR)) и/или любое их сочетание (например, снимок дополненной реальности (AR)). Источником снимка может быть любой тип памяти или хранилища, в котором хранятся любые из вышеупомянутых снимков.
В отличие от препроцессора 18 и обработки, выполняемой модулем 18 предварительной обработки, снимок или данные 17 снимка также могут называться необработанным снимком или данными 17 необработанного снимка.
Препроцессор 18 выполнен с возможностью приема данных 17 (необработанного) снимка и выполнения предварительной обработки данных 17 снимка для получения предварительно обработанного снимка 19 или данных 19 предварительно обработанного снимка. Предварительная обработка, выполняемая препроцессором 18, может, например, включать в себя обрезку, преобразование цветового формата (например, из RGB в YCbCr), цветокоррекцию или уменьшение шума. Можно понять, что модуль 18 предварительной обработки может быть необязательным компонентом.
Видеокодер 20 выполнен с возможностью приема данных 19 предварительно обработанного снимка и предоставления данных 21 кодированного снимка (дополнительные подробности будут описаны ниже, например, на основе Фиг.2).
Интерфейс 22 связи устройства-источника 12 может быть выполнен с возможностью приема данных 21 кодированного снимка и для передачи данных 21 кодированного снимка (или любой их дальнейшей обработанной версии) по каналу 13 связи на другое устройство, например, на устройство-получатель 14 или любое другое устройство для хранения или прямого восстановления.
Устройство-получатель 14 содержит декодер 30 (например, видеодекодер 30) и может дополнительно, т.е. в необязательном порядке, содержать интерфейс или модуль 28 связи, постпроцессор 32 и устройство 34 отображения.
Интерфейс 28 связи устройства-получателя 14 выполнен с возможностью приема данных 21 кодированного снимка (или любой их дальнейшей обработанной версии), например, непосредственно от устройства-источника 12 или из любого другого источника, например запоминающего устройства, например устройство хранения данных кодированного снимка, и предоставить данные 21 кодированного снимка в декодер 30.
Интерфейс 22 связи и интерфейс 28 связи могут быть выполнены с возможностью передачи или приема данных 21 кодированного снимка или кодированных данных 13 через прямую линию связи между устройством-источником 12 и устройством-получателем 14, например прямое проводное или беспроводное соединение, или через сеть любого типа, например проводную или беспроводную сеть или любое их сочетание, или любую частную и общедоступную сеть, или любое их сочетание.
Интерфейс 22 связи может быть, например, выполнен с возможностью упаковки данных 21 кодированного снимка в соответствующий формат, например, в пакеты, и/или обработки данных кодированного снимка с использованием любого типа кодирования передачи или обработки для передачи по каналу связи или сети связи.
Интерфейс 28 связи, образующий аналог интерфейса 22 связи, может быть, например, выполнен с возможностью приема переданных данных и обработки данных передачи с использованием любого вида соответствующего декодирования или обработки передачи и/или распаковки для получения данных 21 кодированного снимка.
И интерфейс 22 связи, и интерфейс 28 связи могут быть выполнены как однонаправленные интерфейсы связи, как показано стрелкой для канала 13 связи на Фиг.1A, указывающего от устройства-источника 12 к устройству-получателю 14, или как интерфейсы двунаправленной связи, и может быть сконфигурирован, например, для отправки и приема сообщений, например для установки соединения, для подтверждения и обмена любой другой информацией, относящейся к каналу связи и/или передаче данных, например, к передаче данных кодированного снимка.
Декодер 30 выполнен с возможностью приема данных 21 кодированного снимка и предоставления данных 31 декодированного снимка или декодированного снимка 31 (дополнительные подробности будут описаны ниже, например, на основе Фиг.3 или Фиг.5).
Постпроцессор 32 устройства-получателя 14 выполнен с возможностью постобработки данных 31 декодированного снимка (также называемых данными восстановленного снимка), например, декодированного снимка 31, для получения данных 33 снимка 33 с постобработкой, например снимка 33 с постобработкой. Постобработка, выполняемая модулем 32 постобработки, может включать в себя, например, преобразование цветового формата (например, из YCbCr в RGB), цветокоррекцию, обрезку или повторную дискретизацию, или любую другую обработку, например, для подготовки данных декодированного снимка 31 для отображения, например, с помощью устройства 34 отображения.
Устройство 34 отображения устройства-получателя 14 выполнено с возможностью приема данных 33 снимка с постобработкой для отображения снимка, например, пользователю или зрителю. Устройство 34 отображения может быть или содержать любой вид дисплея для представления восстановленного снимка, например интегрированный или внешний дисплей или монитор. Дисплеи могут, например, содержать жидкокристаллические дисплеи (LCD), дисплеи на органических светодиодах (OLED), плазменные дисплеи, проекторы, микро-светодиодные дисплеи, жидкие кристаллы на кремнии (LCoS), цифровой световой процессор (DLP) или любые другие дисплеи.
Хотя Фиг.1A изображает устройство-источник 12 и устройство-получатель 14 как отдельные устройства, варианты осуществления устройств также могут содержать оба или обе функциональные возможности, устройство-источник 12 или соответствующие функциональные возможности и устройство-получатель 14 или соответствующие функциональные возможности. В таких вариантах осуществления устройство-источник 12 или соответствующие функциональные возможности и устройство-получатель 14 или соответствующие функциональные возможности могут быть реализованы с использованием одного и того же аппаратного и/или программного обеспечения или с помощью отдельного аппаратного и/или программного обеспечения или любого их сочетания.
Как будет очевидно для специального элемента на основании описания, наличие и точное разделение функциональных возможностей различных модулей или функций в устройстве-источнике 12 и/или устройстве-получателе 14, как показано на Фиг.1A, может варьироваться в зависимости от фактического устройства и применения.
Кодер 20 (например, видеокодер 20) или декодер 30 (например, видеодекодер 30), или как кодер 20, так и декодер 30 могут быть реализованы через схемы обработки, как показано на Фиг.1B, таких как один или более микропроцессоров, процессоров цифровых сигналов (DSP), прикладных программ. специальные интегральные схемы (ASIC), программируемые пользователем вентильные матрицы (FPGA), дискретная логика, оборудование, предназначенные для видеокодирования или любые их сочетания. Кодер 20 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении кодера 20 на Фиг.2 и/или любой другой кодирующей системе или подсистеме, описанной здесь. Декодер 30 может быть реализован через схему 46 обработки для воплощения различных модулей, как обсуждалось в отношении декодера 30 на Фиг.3 и/или любую другую систему или подсистему декодера, описанную в данном документе. Схема обработки может быть выполнена с возможностью выполнения различных операций, как описано ниже. Как показано на Фиг.5, если методики частично реализованы в программном обеспечении, устройство может хранить инструкции для программного обеспечения на подходящем долговременном машиночитаемом носителе данных и может выполнять инструкции в аппаратных средствах, используя один или более процессоров для выполнения методик этого раскрытия. Любой из видеокодера 20 и видеодекодера 30 может быть интегрирован как часть объединенного кодера/декодера (CODEC) в одном устройстве, например, как показано на Фиг.1B.
Устройство-источник 12 и устройство-получатель 14 могут включать в себя любое из широкого диапазона устройств, включая любые виды портативных или стационарных устройств, например портативные или портативные компьютеры, мобильные телефоны, смартфоны, планшеты или планшетные компьютеры, камеры, настольные компьютеры, наборы приставки, телевизоры, устройства отображения, цифровые медиаплееры, игровые приставки, устройства потоковой передачи видео (например, серверы служб контента или серверы доставки контента), устройство приемника широковещания, устройство передатчика широковещания и т.п. и могут использовать или не использовать любой вид операционной системы. В некоторых случаях устройство-источник 12 и устройство-получатель 14 могут быть оборудованы для беспроводной связи. Таким образом, устройство-источник 12 и устройство-получатель 14 могут быть устройствами беспроводной связи.
В некоторых случаях система 10 видеокодирования, проиллюстрированная на Фиг.1A является просто примером, и методики настоящей заявки могут применяться к настройкам кодирования видео (например, видеокодирования или видеодекодирования), которые не обязательно включают в себя какой-либо обмен данными между устройствами кодирования и декодирования. В других примерах данные извлекаются из локальной памяти, передаются по сети и т.п. Устройство кодирования видео может кодировать и сохранять данные в памяти, и/или устройство декодирования видео может извлекать и декодировать данные из памяти. В некоторых примерах кодирование и декодирование выполняются устройствами, которые не обмениваются данными друг с другом, а просто кодируют данные в память и/или извлекают и декодируют данные из памяти.
Для удобства описания варианты осуществления изобретения описаны здесь, например, со ссылкой на высокоэффективное видеокодирование (HEVC) или на опорное программное обеспечение универсального кодирования видео (VVC), стандарта кодирования видео следующего поколения, разработанного Объединенной группой сотрудничества по кодированию видео (JCT-VC) Группы экспертов ITU-T по кодированию видео (VCEG) и Группы экспертов ISO/IEC по движущимся изображениям (MPEG). Специалист в данной области техники поймет, что варианты осуществления изобретения не ограничиваются HEVC или VVC.
Кодер и способ кодирования
На Фиг.2 показано схематичное блочное представление примерного видеокодера 20, который выполнен с возможностью реализации способов настоящей заявки. В примере на Фиг.2 видеокодер 20 содержит ввод 201 (или интерфейс 201 ввода), модуль 204 вычисления остатка, модуль 206 обработки преобразования, модуль 208 квантования, модуль 210 обратного квантования и модуль 212 обработки обратного преобразования, модуль 214 восстановления, модуль 220 контурного фильтра, буфер 230 (DPB) декодированных снимков, модуль 260 выбора режима, модуль 270 энтропийного кодирования и вывод 272 (или интерфейс 272 вывода). Модуль 260 выбора режима может включать в себя модуль 244 интер-предсказания, модуль 254 интра-предсказания и модуль 262 разбиения. Модуль 244 интер-предсказания может включать в себя модуль оценки движения и модуль компенсации движения (не показаны). Видеокодер 20, показанный на Фиг.2, также может называться гибридным видеокодером или видеокодером согласно гибридному видеокодеку.
Модуль 204 вычисления остатка, модуль 206 обработки преобразования, модуль 208 квантования, модуль 260 выбора режима могут относится к формированию прямого пути сигнала кодера 20, тогда как модуль 210 обратного квантования, модуль 212 обработки обратного преобразования, модуль 214 восстановления, буфер 216, контурный фильтр 220, буфер 230 (DPB) декодированных снимков, модуль 244 интер-предсказания и модуль 254 интра-предсказания могут относится к формированию обратного пути сигнала видеокодера 20, при этом обратный путь сигнала видеокодера 20 соответствует пути сигнала декодера (см. видеодекодер 30 на Фиг.3). Модуль 210 обратного квантования, модуль 212 обработки обратного преобразования, модуль 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных снимков, модуль 244 интер-предсказания и модуль 254 интра-предсказания также относятся к формированию «Встроенного декодера» видеокодера 20.
Снимки и разбиение снимков (снимки и блоки)
Кодер 20 может быть выполнен с возможностью приема, например, через ввод 201 снимка 17 (или данных 17 снимка), например снимка из последовательности снимков, образующих видео или видеопоследовательность. Принятый снимок или данные снимка также могут представлять собой предварительно обработанный снимок 19 (или предварительно обработанные данные 19 снимка). Для простоты нижеследующее описание ссылается на снимок 17. Снимок 17 также может именоваться текущим снимком или снимком, который подлежит кодированию (в частности, при видеокодировании, чтобы отличать текущий снимок от других снимков, например, ранее кодированных и/или декодированных снимков той же видеопоследовательности, т.е. видеопоследовательности, которая также содержит текущий снимок).
(Цифровой) снимок представляет собой или может рассматриваться как двумерный массив или матрица дискретных отсчетов со значениями интенсивности. Дискретный отсчет в массиве также может называться пикселем (сокращенная форма элемента снимка) или пикселем. Количество дискретных отсчетов в горизонтальном и вертикальном направлении (или по оси) массива или снимка определяет размер и/или разрешение снимка. Для представления цвета обычно используются три цветовых компонента, то есть снимок может быть представлен или включать в себя три массива дискретных отсчетов. В формате RBG или цветовом пространстве снимок содержит соответствующий массив дискретных отсчетов красного, зеленого и синего цветов. Однако при кодировании видео каждый пиксель обычно представлен в формате яркости и цветности или цветовом пространстве, например YCbCr, который содержит компонент яркости, обозначенный Y (иногда вместо него также используется L), и два компонента цветности, обозначенные Cb и Cr. Компонент Y яркости (или короткой яркости) представляет яркость или интенсивность уровня серого (например, как в полутоновом снимке), в то время как два компонента цветности (или короткой цветности) Cb и Cr представляют компоненты цветности или информации о цвете. Соответственно, снимок в формате YCbCr содержит массив дискретных отсчетов яркости значений дискретных отсчетов яркости (Y) и два массива дискретных отсчетов цветности значений цветности (Cb и Cr). Снимки в формате RGB могут быть преобразованы или преобразованы в формат YCbCr, и наоборот, этот процесс также известен как преобразование цвета или преобразование. Если снимок является монохромным, то он может содержать только массив дискретных отсчетов яркости. Соответственно, снимок может быть, например, массивом дискретных отсчетов яркости в монохромном формате или массивом дискретных отсчетов яркости и двумя соответствующими массивами дискретных отсчетов цветности в цветовой формат 4:2:0, 4:2:2 и 4:4:4.
Варианты осуществления видеокодера 20 могут содержать модуль разбиения снимка (не показан на фиг.2), выполненный с возможностью разбиения снимка 17 на множество (обычно не перекрывающихся) блоков 203 снимка. Эти блоки также могут называться корневыми блоками, макроблоками (H.264/AVC) или блоками дерева кодирования (CTB) или единицами дерева кодирования (CTU) (H.265/HEVC и VVC). Блок разбиения снимка может быть выполнен с возможностью использования одного и того же размера блока для всех снимков видеопоследовательности и соответствующей сетки, определяющей размер блока, или для изменения размера блока между снимками или подмножествами или группами снимков, а также для разбиения каждого снимка на соответствующие блоки.
В дополнительных вариантах осуществления видеокодер может быть выполнен с возможностью приема непосредственно блока 203 снимка 17, например одного, нескольких или всех блоков, образующих снимок 17. Блок 203 снимка также может называться блоком текущего снимка или блоком снимка, который должен быть кодирован.
Подобно снимку 17, блок 203 снимка снова является или может рассматриваться как двумерный массив или матрица дискретных отсчетов со значениями интенсивности (значениями дискретных отсчетов), хотя и меньшего размера, чем снимок 17. Другими словами, блок 203 может содержать, например, один массив дискретных отсчетов (например, массив яркости в случае монохромного снимка 17 или массив яркости или цветности цветного снимка) или три массива дискретных отсчетов (например, массив яркости и два массива цветности в случае цветного снимка 17) или любое другое количество и/или вид массивов в зависимости от применяемого цветового формата. Количество дискретных отсчетов в горизонтальном и вертикальном направлении (или по оси) блока 203 определяет размер блока 203. Соответственно, блок может, например, массив дискретных отсчетов MxN (M-столбец на N-строка) или массив MxN коэффициентов преобразования.
Варианты осуществления видеокодера 20, как показано на Фиг.2, могут быть выполнены с возможностью кодирования снимка 17 блок за блоком, например, кодирование и предсказание выполняются для каждого блока 203.
Варианты осуществления видеокодера 20, как показано на фиг.2, могут быть дополнительно выполнены с возможностью разбиения и/или кодирования снимка с использованием сегментов (также называемых видеосегментами), при этом снимок может быть разделен или кодировано с использованием одного или более сегментов. (обычно без перекрытия), и каждый сегмент может содержать один или более блоков (например, CTU).
Варианты осуществления видеокодера 20, как показано на фиг.2, могут быть дополнительно выполнены с возможностью разбиения и/или кодирования снимка с использованием групп клеток (также называемых группами клеток) и/или клеток (также называемых видеоклетками), в котором снимок может быть разделено или кодировано с использованием одной или более групп клеток (обычно не перекрывающихся), и каждая группа клеток может содержать, например, один или более блоков (например, CTU) или одну или более клеток, при этом каждая клетка, например, может иметь прямоугольную форму и может содержать один или более блоков (например, CTU), например полные или дробные блоки.
Вычисление остатка
Модуль 204 вычисления остатка может быть выполнен с возможностью вычисления остаточного блока 205 (также упоминаемого как остаток 205) на основе блока 203 снимка и блока 265 предсказания (дополнительные подробности о блоке 265 предсказания предоставлены позже), например, посредством вычитания значений дискретных отсчетов блока 265 предсказания из значений дискретных отсчетов блока 203 снимка, дискретный отсчет за дискретным отсчетом (пиксель за пикселем), чтобы получить остаточный блок 205 в области дискретных отсчетов.
Преобразование
Модуль 206 обработки преобразования может быть выполнен с возможностью применения преобразования, например дискретного косинусного преобразования (DCT) или дискретного синусного преобразования (DST), к значениям дискретных отсчетов остаточного блока 205 для получения коэффициентов 207 преобразования в области преобразования. Коэффициенты 207 преобразования могут также называться остаточными коэффициентами преобразования и представлять остаточный блок 205 в области преобразования.
Модуль 206 обработки преобразования может быть выполнен с возможностью применения целочисленных аппроксимаций DCT/DST, таких как преобразования, указанные для H.265/HEVC. По сравнению с ортогональным преобразованием DCT, такие целочисленные аппроксимации обычно масштабируются с определенным коэффициентом. Чтобы сохранить норму остаточного блока, который обрабатывается прямым и обратным преобразованиями, в процессе преобразования применяются дополнительные коэффициенты масштабирования. Коэффициенты масштабирования обычно выбираются на основе определенных ограничений, таких как коэффициенты масштабирования, являющиеся степенью двойки для операций сдвига, разрядность коэффициентов преобразования, компромисс между точностью и затратами на реализацию и т.д. Конкретные коэффициенты масштабирования, например, задаются для обратного преобразования, например, модулем 212 обработки обратного преобразования (и соответствующим обратным преобразованием, например, модулем 312 обработки обратного преобразования в видеокодере 30), и соответствующие коэффициенты масштабирования для прямого преобразования, например, посредством модуля 206 обработки преобразования, в кодере 20 может быть определено соответственно.
Варианты осуществления видеокодера 20 (соответственно модуль 206 обработки преобразования) могут быть выполнены с возможностью вывода параметров преобразования, например типа преобразования или преобразований, например, непосредственно или кодированы или сжаты через модуль 270 энтропийного кодирования, так что, например, видеодекодер 30 может принимать и использовать параметры преобразования для декодирования.
Квантование
Модуль 208 квантования может быть выполнен с возможностью квантования коэффициентов 207 преобразования для получения квантованных коэффициентов 209, например, посредством применения скалярного квантования или векторного квантования. Квантованные коэффициенты 209 также могут упоминаться как квантованные коэффициенты 209 преобразования или квантованные остаточные коэффициенты 209.
Процесс квантования может уменьшить битовую глубину, связанную с некоторыми или всеми коэффициентами 207 преобразования. Например, n-битовый коэффициент преобразования может быть округлен до m-битного коэффициента преобразования во время квантования, где n больше m. Степень квантования может быть изменена посредством регулировки параметра квантования (QP). Например, для скалярного квантования может применяться другое масштабирование для достижения более тонкого или более грубого квантования. Меньшие размеры шагов квантования соответствуют более тонкому квантованию, тогда как большие размеры шагов квантования соответствуют более грубому квантованию. Применимый размер шага квантования может быть указан параметром квантования (QP). Параметр квантования может, например, быть индексом для заранее определенного набора применимых размеров шага квантования. Например, малые параметры квантования могут соответствовать точному квантованию (малые размеры шагов квантования), а большие параметры квантования могут соответствовать грубому квантованию (большие размеры шагов квантования) или наоборот. Квантование может включать в себя деление на размер шага квантования, и соответствующее и/или обратное деквантование, например, посредством модуля 210 обратного квантования, может включать в себя умножение на размер шага квантования. Варианты осуществления согласно некоторым стандартам, например HEVC, могут быть выполнены с возможностью использования параметра квантования для определения размера шага квантования. Обычно размер шага квантования может быть вычислен на основе параметра квантования с использованием аппроксимации с фиксированной точкой уравнения, включающего деление. Дополнительные коэффициенты масштабирования могут быть введены для квантования и деквантования, чтобы восстановить норму остаточного блока, который может быть изменен из-за масштабирования, используемого в приближении с фиксированной точкой уравнения для размера шага квантования и параметра квантования. В одной примерной реализации масштабирование обратного преобразования и деквантование могут быть объединены. В качестве альтернативы могут использоваться настроенные таблицы квантования, и кодер может передавать их в декодер, например, в потоке битов. Квантование - это операция с потерями, при которой потери возрастают с увеличением размеров этапов квантования.
Варианты осуществления видеокодера 20 (соответственно модуль 208 квантования) могут быть выполнены с возможностью вывода параметров квантования (QP), например, напрямую или кодированных через модуль 270 энтропийного кодирования, так что, например, видеодекодер 30 может принимать и применять параметры квантования для декодирования.
Обратное квантование
Модуль 210 обратного квантования выполнен с возможностью применения обратного квантования блока 208 квантования к квантованным коэффициентам для получения деквантованных коэффициентов 211, например, посредством применения обратной схемы квантования, применяемой блоком 208 квантования, на основе или с использованием того же размера шага квантования в качестве модуля 208 квантования. Деквантованные коэффициенты 211 также могут упоминаться как деквантованные остаточные коэффициенты 211 и соответствовать - хотя обычно не идентичны коэффициентам преобразования из-за потери при квантовании - коэффициентам 207 преобразования.
Обратное преобразование
Модуль 212 обработки обратного преобразования выполнен с возможностью применения обратного преобразования, применяемого блоком 206 обработки преобразования, например обратного дискретного косинусного преобразования (DCT) или обратного дискретного синусоидального преобразования (DST) или других обратных преобразования, чтобы получить восстановленный остаточный блок 213 (или соответствующие коэффициенты 213 деквантования) в области дискретных отсчетов. Восстановленный остаточный блок 213 также может называться блоком 213 преобразования.
Восстановление
Модуль 214 восстановления (например, сумматор 214) выполнен с возможностью добавления блока 213 преобразования (то есть восстановленного остаточного блока 213) к блоку 265 предсказания, чтобы получить восстановленный блок 215 в области дискретных отсчетов, например, посредством добавления (дискретный отсчет за дискретным отсчетом) значений дискретных отсчетов восстановленных остаточный блок 213 и значения дискретных отсчетов блока 265 предсказания.
Фильтрация
Модуль 220 контурного фильтра (или сокращенно «контурный фильтр» 220) выполнен с возможностью фильтрации восстановленного блока 215, чтобы получить отфильтрованный блок 221, или, в общем, для фильтрации восстановленных дискретных отсчетов для получения отфильтрованных дискретных отсчетов. Модуль контурного фильтра, например, выполнен с возможностью сглаживания переходов пикселей или иного улучшения качества видео. Модуль 220 контурного фильтра может содержать один или более контурных фильтров, таких как фильтр устранения блочности, фильтр с адаптивным смещением дискретных отсчетов (SAO), или один или более других фильтров, таких как двусторонний фильтр, адаптивный контурный фильтр (ALF), фильтры сглаживания, повышения резкости или совместные фильтры, или любое их сочетание. Хотя модуль 220 контурного фильтра показан на Фиг.2 как контурный фильтр, в других конфигурациях модуль 220 контурного фильтра может быть реализован как постконтурный фильтр. Отфильтрованный блок 221 также может именоваться отфильтрованным восстановленным блоком 221.
Варианты осуществления видеокодера 20 (соответственно модуля 220 контурного фильтра) могут быть выполнены с возможностью вывода параметров контурного фильтра (таких как информация адаптивного смещения дискретных отсчетов), например непосредственно или кодированными через модуль 270 энтропийного кодирования, так что, например, декодер 30 может принимать и применять аналогичные параметры контурного фильтра или соответствующие контурные фильтры для декодирования.
Буфер декодированных снимков
Буфер 230 декодированных снимков (DPB) может быть памятью, в которой хранятся опорные снимки или, в общем, данные опорных снимков для кодирования видеоданных посредством видеокодера 20. DPB 230 может быть образован любым из множества запоминающих устройств, таких как динамическая память с произвольным доступом (DRAM), в том числе синхронная DRAM (SDRAM), магниторезистивная RAM (MRAM), резистивная RAM (RRAM) или запоминающие устройства других типов. Буфер 230 (DPB) декодированных снимков может быть выполнен с возможностью хранения одного или более фильтрованных блоков 221. Буфер 230 декодированных снимков может быть дополнительно выполнен с возможностью хранения других ранее отфильтрованных блоков, например ранее восстановленных и отфильтрованных блоков 221, того же самого текущего снимка или разных снимков, например ранее восстановленных снимков, и может предоставлять полные ранее восстановленные, т.е. декодированные, снимки (и соответствующие опорные блоки и дискретные отсчеты) и/или частично восстановленный текущий снимок (и соответствующие опорные блоки и дискретные отсчеты), например, для интер-предсказания. Буфер 230 декодированных снимков (DPB) также может быть выполнен с возможностью хранения одного или более нефильтрованных восстановленных блоков 215 или, в общем, нефильтрованных восстановленных дискретных отсчетов, например если восстановленный блок 215 не фильтруется модулем 220 контурного фильтра, или любой другой дополнительно обработанной версии восстановленных блоков или дискретных отсчетов.
Выбор режима (Разбиение и Предсказание)
Модуль 260 выбора режима содержит модуль 262 разбиения, модуль 244 интер-предсказания и модуль 254 интра-предсказания и выполнен с возможностью приема или получения данных исходного снимка, например исходного блока 203 (текущего блока 203 текущего снимка 17), и данных восстановленного снимка, например отфильтрованных и/или нефильтрованных восстановленных дискретных отсчетов или блоков того же самого (текущего) снимка и/или из одного или множества ранее декодированных снимков, например из буфера 230 декодированных снимков или других буферов (например, линейного (строкового) буфера, не показан). Данные восстановленного снимка используются в качестве данных опорного снимка для предсказания, например интер-предсказания или интра-предсказания, чтобы получить блок 265 предсказания или предиктор 265.
Модуль 260 выбора режима может быть выполнен с возможностью определения или выбора разбиения для текущего режима предсказания блока (включая отсутствие разбиения) и режима предсказания (например, режима внутреннего или интер-предсказания) и генерации соответствующего блока 265 предсказания, который используется для вычисления остаточного блока 205 и для восстановления восстановленного блока 215.
Варианты осуществления модуля 260 выбора режима могут быть выполнены с возможностью выбора разбиения и режима предсказания (например, из тех, которые поддерживаются или доступны для модуля 260 выбора режима), которые обеспечивают наилучшее совпадение или, другими словами, минимальный остаток (минимальный остаток означает лучшее сжатие для передачи или хранения), или минимальные издержки на сигнализацию (минимальные издержки на сигнализацию означают лучшее сжатие для передачи или хранения), или который учитывает или балансирует оба. Модуль 260 выбора режима может быть выполнен с возможностью определения режима разбиения и предсказания на основе оптимизации искажения скорости (RDO), то есть выбора режима предсказания, который обеспечивает минимальное искажение скорости. Такие термины, как «лучший», «минимум», «оптимальный» и т.д. В этом контексте не обязательно относятся к общему «лучшему», «минимуму», «оптимальному» и т.д., Но также могут относиться к выполнению прекращения или критерий выбора, такой как значение, превышающее или падающее ниже порогового значения, или другие характеристик, потенциально ведущие к «неоптимальному выбору», но уменьшающие сложность и время обработки.
Другими словами, модуль 262 разбиения может быть выполнен с возможностью разбиения блока 203 на более мелкие блочные разделы или подблоки (которые снова образуют блоков), например, итеративно с использованием разбиения на квадранты (QT), двоичного разбиения (BT) или разбиения на троичное дерево (TT) или любого их сочетания, и для выполнения, например, предсказания для каждого из разбиений блока или подблоков, при этом выбор режима включает в себя выбор древовидной структуры разделенного блока 203, и режимы предсказания применяются к каждому из разбиений или подблоков блока.
Далее более подробно поясняется разбиение (например, посредством модуля 260 разбиения) и обработка предсказания (посредством модуля 244 интер-предсказания и модуля 254 интра-предсказания), выполняемые примерным видеокодером 20.
Разбиение
Модуль 262 разбиения может разбивать (или разделять) текущий блок 203 на более мелкие разбиения, например меньшие блоки квадратного или прямоугольного размера. Эти меньшие блоки (которые также могут называться подблоками) могут быть дополнительно разделены на еще меньшие разделы. Это также относится к разбиению дерева или иерархическому разбиению дерева, в котором корневой блок, например, на уровне корневого дерева 0 (уровень иерархии 0, глубина 0), может быть рекурсивно разделен, например разделен на два или более блока следующий более низкий уровень дерева, например узлы на уровне дерева 1 (уровень иерархии 1, глубина 1), при этом эти блоки могут быть снова разделены на два или более блоков следующего более низкого уровня, например, уровень дерева 2 (уровень иерархии 2, глубина 2) и т.д. До тех пор, пока разбиение не будет завершено, например, потому что критерий завершения выполняется, например, достигнута максимальная глубина дерева или минимальный размер блока. Блоки, которые не разделяются далее, также называются концевыми блоками или концевыми узлами дерева. Дерево, использующее разбиение на два разбиения, называется двоичным деревом (BT), дерево, использующее разбиение на три разбиения, называется тройным деревом (TT), а дерево, использующее разбиение на четыре разбиения, называется деревом квадрантов (QT).
Как упоминалось ранее, используемый здесь термин «блок» может быть частью, в частности квадратной или прямоугольной частью снимка. Что касается, например, HEVC и VVC, блок может быть или соответствовать единичному блоку дерева кодирования (CTU), единичному блоку кодирования (CU), единичному блоку предсказания (PU) и единичному блоку преобразования (TU) и/или соответствующим блокам, например блоку дерева кодирования (CTB), блоку кодирования (CB), блоку преобразования (TB) или блоку предсказания (PB).
Например, единичный блок дерева кодирования (CTU) может быть или содержать CTB дискретных отсчетов яркости, два соответствующих CTB дискретных отсчетов цветности снимка, которое имеет три массива дискретных отсчетов, или CTB дискретных отсчетов монохромного снимка или снимка, которое кодируется с использованием трех отдельных цветовых плоскостей и синтаксических структур, используемых для кодирования дискретных отсчетов. Соответственно, блок дерева кодирования (CTB) может быть блоком NxN дискретных отсчетов для некоторого значения N, так что разбиение компонента на CTB является разбиением. Единичный блок кодирования (CU) может быть или содержать блок кодирования дискретных отсчетов яркости, два соответствующих блока кодирования дискретных отсчетов цветности снимка, которое имеет три массива дискретных отсчетов, или блок кодирования дискретных отсчетов монохромного снимка или снимка, который кодируется с использованием трех отдельных цветовых плоскости и синтаксические структуры, используемые для кодирования дискретных отсчетов. Соответственно, блок кодирования (CB) может быть блоком MxN дискретных отсчетов для некоторых значений M и N, так что разбиение CTB на блоки кодирования является разбиением.
В вариантах осуществления, например, согласно HEVC, единица дерева кодирования (CTU) может быть разделена на CU с использованием структуры дерева квадрантов, обозначенной как дерево кодирования. Решение о том, кодировать ли область снимка с использованием межснимочного (интер) (временного) или внутриснимочного (интра) (пространственного) предсказания, принимается на уровне CU. Каждый CU может быть дополнительно разделен на один, два или четыре PU в соответствии с типом разбиения PU. Внутри одного PU применяется один и тот же процесс предсказания, и соответствующая информация передается в декодер на основе PU. После получения остаточного блока посредством применения процесса предсказания на основе типа разбиения PU, CU может быть разделен на блоки преобразования (TU) в соответствии с другой структурой дерева квадрантов, аналогичной дереву кодирования для CU.
В вариантах осуществления, например согласно разрабатываемым в настоящее время наиболее новым стандарту видеокодирования, который называется универсальным видеокодированием (VVC), для разделения блока кодирования используется, например, разделение комбинированного квадродерева и двоичного дерева (QTBT). В структуре блока QTBT CU может иметь либо квадратную, либо прямоугольную форму. Например, единичный блок дерева кодирования (CTU) сначала разделяется на структуру квадродерева. Концевые узлы квадродерева дополнительно разделяются посредством структуры двоичного дерева или троичного (или тройного) дерева. Концевые узлы дерева разделения называются единичными блоками кодирования (CU), и эта сегментация используется для обработки предсказания и преобразования без какого-либо дальнейшего разбиения. Это означает, что CU, PU и TU имеют одинаковый размер блока в структуре блока кодирования QTBT. Параллельно, вместе с структурой блока QTBT можно использовать множественного разбиение, например разбиение троичного дерева.
В одном примере модуль 260 выбора режима видеокодера 20 может быть выполнен с возможностью выполнения любого сочетания способов разбиения, описанных в данном документе.
Как описано выше, видеокодер 20 выполнен с возможностью определения или выбора наилучшего или оптимального режима предсказания из набора (например, предварительно определенных) режимов предсказания. Набор режимов предсказания может содержать, например, режимы интра-предсказания и/или режимы интер-предсказания.
Интра-предсказание
Набор режимов интра-предсказания может содержать 35 различных режимов интра-предсказания, например ненаправленные режимы, такие как режим постоянного (или среднего) и планарный режим, или направленные режимы, например, как определено в HVEC, или может содержать 67 различных режимов интра-предсказания, например, ненаправленные режимы, такие как режим постоянного тока (или среднего) и планарный режим, или направленные режимы, например, как определено для VVC.
Модуль 254 интра-предсказания выполнен с возможностью использования восстановленных дискретных отсчетов соседних блоков одного и того же текущего снимка для генерации блока 265 интра-предсказания согласно режиму интра-предсказания набора режимов интра-предсказания.
Модуль 254 интра-предсказания (или, в общем, модуль 260 выбора режима) дополнительно выполнен с возможностью вывода параметров интра-предсказания (или, в общем, информации, указывающей выбранный режим интра-предсказания для блока) в модуль 270 энтропийного кодирования в форме синтаксиса элементы 266 для включения в данные 21 кодированного снимка, чтобы, например, видеодекодер 30 мог принимать и использовать параметры предсказания для декодирования.
Интер-предсказание
Набор (или возможно) режимы интер-предсказания зависит от доступных опорных снимков (т.е. предыдущим, по меньшей мере, частично декодированных снимков, например, хранится в DBP 230) и других параметрах интер-предсказания, например, используется ли весь опорный снимок или только часть, например, область поиска окна вокруг области текущего блока, опорного снимка для поиска наилучшего соответствия опорного блока, и/или, например, применяются ли интерполяции пикселей, например, интерполяция половины/полупикселя и/или четверть пикселя, или нет.
В дополнение к вышеупомянутым режимам предсказания могут применяться режим пропуска и/или прямой режим.
Модуль 244 интер-предсказания может включать в себя модуль оценки движения (ME) (не показан на фиг.2) и модуль компенсации движения (MC) (оба не показаны на фиг.2). Модуль оценки движения может быть выполнен с возможностью приема или получения блока 203 снимка (блока 203 текущего снимка текущего снимка 17) и декодированного снимка 231, или, по меньшей мере, одного или множества ранее восстановленных блоков, например, восстановленных блоков одного или более множество других/различных ранее декодированных снимков 231 для оценки движения. Например, видеопоследовательность может содержать текущий снимок и ранее декодированные снимки 231, или, другими словами, текущий снимок и ранее декодированные снимки 231 могут быть частью или формировать последовательность снимков, образующих видеопоследовательность.
Кодер 20 может, например, быть выполнен с возможностью выбора опорного блока из множества опорных блоков одинаковых или различных снимков из множества других снимков и обеспечивает опорный снимок (или индекс опорного снимка) и/или смещение (пространственное смещение) между положением (X, Y) координатами опорного блока и положением текущего блока в качестве взаимосвязанных параметров предсказания в модуль оценки движения. Это смещение также называется вектором движения (MV).
Модуль компенсации движения выполнен с возможностью получения, например, приема параметра интер-предсказания и выполнения интер-предсказания на основе или с использованием параметра интер-предсказания для получения блока 265 интер-предсказания. Компенсация движения, выполняемая блоком компенсации движения, может включать в себя выборку или генерацию блока предсказания на основе вектора движения/блока, определенного посредством оценки движения, возможно выполнение интерполяции до субпиксельной точности. Интерполяционная фильтрация может генерировать дополнительные дискретные отсчеты пикселей из дискретных отсчетов известных пикселей, таким образом потенциально увеличивая количество блоков предсказания потенциально подходящих вариантов, которые могут использоваться для кодирования блока снимка. После приема вектора движения для PU текущего блока снимка модуль компенсации движения может найти блок предсказания, на который указывает вектор движения, в одном из списков опорных снимков. Модуль компенсации движения также может генерировать элементы синтаксиса, связанные с блоками и видеосегментами, для использования видеодекодером 30 при декодировании блоков снимка видеосегмента. В дополнение или в качестве альтернативы сегментам и соответствующим элементам синтаксиса могут генерироваться или использоваться группы клеток и/или клетки и соответствующие элементы синтаксиса.
Энтропийное кодирование
Модуль 270 энтропийного кодирования выполнен с возможностью применения, например, алгоритма или схемы энтропийного кодирования (например, схемы кодирования с переменной длиной (VLC), схемы контекстно-адаптивного VLC (CAVLC), схемы арифметического кодирования, бинаризации, контекстно-адаптивного двоичного арифметического кодирования (CABAC), основанного на синтаксисе контекстно-адаптивного двоичного арифметического кодирования (SBAC), энтропийного кодирования с разбиением интервала вероятности (PIPE) или другого способа или методики энтропийного кодирования) или обхода (без сжатия) в отношении квантованных коэффициентов 209, параметров интер-предсказания, параметров интра-предсказания, параметров контурного фильтра и/или других элементов синтаксиса для получения данных 21 кодированного снимка, которые могут выводиться через вывод 272, например в форме кодированного битового потока 21, так что, например, видеодекодер 30 может принимать и использовать эти параметры для декодирования. Кодированный битовый поток 21 может быть передан на видеодекодер 30 или сохранен в памяти для последующей передачи или извлечения видеодекодером 30.
Другие изменения в структуре видеокодера 20 могут использоваться для кодирования видеопотока. Например, кодер 20, не основанный на преобразовании, может квантовать остаточный сигнал напрямую без блока 206 обработки преобразования. В другой реализации кодер 20 может иметь модуль 208 квантования и модуль 210 обратного квантования, объединенные в единый блок.
Декодер и способ декодирования
На Фиг.3 показан пример видеодекодера 30, который выполнен с возможностью реализации способов настоящей заявки. Видеодекодер 30 выполнен с возможностью приема данных 21 кодированного снимка (например, кодированного битового потока 21), например кодированных кодером 20, чтобы получить декодированный снимок 331. Данные кодированного снимка или кодированный битовый поток содержат информацию для декодирования данных кодированного снимка, например данных, которые представляют блоки снимка кодированного сегмента видео (и/или клеток или групп клеток) и связанные элементы синтаксиса.
В примере на Фиг.3, декодер 30 содержит модуль 304 энтропийного декодирования, модуль 310 обратного квантования, модуль 312 обработки обратного преобразования, модуль 314 восстановления (например, сумматор 314), контурный фильтр 320, буфер 330 (DPB) декодированных снимков, модуль 360 применения режима, модуль 344 интер-предсказания и модуль 354 интра-предсказания. Модуль 344 интер-предсказания может быть или включать в себя модуль компенсации движения. Видеодекодер 30 может, в некоторых примерах, выполнять этап декодирования, в целом обратный этапу кодирования, описанному в отношении видеокодера 100 на Фиг.2.
Как описано в отношении кодера 20, модуль 210 обратного квантования, модуль 212 обработки обратного преобразования, модуль 214 восстановления, контурный фильтр 220, буфер 230 (DPB) декодированных снимков, модуль 344 интер-предсказания и модуль 354 интра-предсказания также относятся к формированию «встроенного декодера» видеокодера 20. Соответственно, модуль 310 обратного квантования может быть идентичен по функции модулю 110 обратного квантования, модуль 312 обработки обратного преобразования может быть идентичен по функции модулю 212 обработки обратного преобразования, модуль 314 восстановления может быть идентичен по функции модулю 214 восстановления, контурный фильтр 320 может быть идентичен по функции контурному фильтру 220, а буфер 330 декодированных снимков может быть идентичен по функции буферу 230 декодированных снимков. Следовательно, пояснения, предоставленные для соответствующих блоков и функций видеокодера 20, применимы соответственно и к соответствующим блокам и функциям видеодекодера 30.
Энтропийное декодирование
Модуль 304 энтропийного декодирования выполнен с возможностью синтаксического анализа битового потока 21 (или, в общем, данных 21 кодированного снимка) и выполнения, например, энтропийного декодирования для данных 21 кодированного снимка, чтобы получить, например, квантованные коэффициенты 309 и/или параметры декодированного кодирования (не показаны на Фиг.3), например, любые или все из параметров интер-предсказания (например, индекс опорного снимка и вектор движения), параметр интра-предсказания (например, индекс или режим интра-предсказания), параметры преобразования, параметры квантования, параметры контурного фильтра и/или другие элементы синтаксиса. Модуль 304 энтропийного декодирования может быть выполнен с возможностью применения алгоритмов или схем декодирования, соответствующих схемам кодирования, как описано в отношении модуля 270 энтропийного кодирования кодера 20. Модуль 304 энтропийного декодирования может быть дополнительно выполнен с возможностью предоставления параметров интер-предсказания, параметра интра-предсказания и/или других элементов синтаксиса модулю 360 применения режима и других параметров другим модулям декодера 30. Видеодекодер 30 может принимать элементы синтаксиса на уровне видеосегмента и/или уровне видеоблока. В дополнение или в качестве альтернативы сегментам и соответствующим синтаксическим элементам могут приниматься и/или использоваться группы клеток и/или клетки и соответствующие элементы синтаксиса.
Обратное квантование
Модуль 310 обратного квантования может быть выполнен с возможностью приема параметров квантования (QP) (или, в общем, информации, относящейся к обратному квантованию) и квантованных коэффициентов из данных 21 кодированного снимка (например, посредством синтаксического анализа и/или декодирования, например, посредством модуля 304 энтропийного декодирования) и применять на основе параметров квантования обратное квантование к декодированным квантованным коэффициентам 309 для получения деквантованных коэффициентов 311, которые также могут называться коэффициентами 311 преобразования. Процесс обратного квантования может включать в себя использование параметра квантования, определенного видеокодером 20 для каждого видеоблока в видеосегменте (или клетке или группе клеток), для определения степени квантования и, аналогично, степени обратного квантования, которая должна быть применена.
Обратное преобразование
Модуль 312 обработки обратного преобразования может быть выполнен с возможностью приема деквантованных коэффициентов 311, также называемых коэффициентами 311 преобразования, и для применения преобразования к деквантованным коэффициентам 311, чтобы получить восстановленные остаточные блоки 213 в области дискретных отсчетов. Восстановленные остаточные блоки 213 также могут упоминаться как блоки 313 преобразования. Преобразование может быть обратным преобразованием, например, обратным DCT, обратным DST, обратным целочисленным преобразованием или принципиально аналогичным процессом обратного преобразования. Модуль 312 обработки обратного преобразования может быть дополнительно выполнен с возможностью приема параметров преобразования или соответствующей информации из данных 21 кодированного снимка (например, посредством синтаксического анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования), чтобы определять преобразование, которое должно применяться к деквантованным коэффициентам 311.
Восстановление
Модуль 314 восстановления (например, сумматор 314) может быть выполнен с возможностью добавления восстановленного остаточного блока 313 к блоку 365 предсказания, чтобы получить восстановленный блок 315 в области дискретных отсчетов, например, посредством добавления значений дискретных отсчетов восстановленных остаточный блок 313 и значения дискретных отсчетов блока 365 предсказания.
Фильтрация
Модуль 320 контурного фильтра (либо в контуре кодирования, либо после контура кодирования) выполнен с возможностью фильтрации восстановленного блока 315 для получения отфильтрованного блока 321, например, для сглаживания переходов пикселей или иного улучшения качества видео. Модуль 320 контурного фильтра может содержать один или более контурных фильтров, таких как фильтр снятия блочности, фильтр с адаптивным смещением дискретных отсчетов (SAO), или один или более других фильтров, таких как двусторонний фильтр, адаптивный контурный фильтр (ALF), фильтры сглаживания, повышения резкости или совместные фильтры, или любое их сочетание. Хотя модуль 320 контурного фильтра показан на Фиг.3 как контурный фильтр, в других конфигурациях модуль 320 контурного фильтра может быть реализован как постконтурный фильтр.
Буфер декодированных снимков
Декодированные видеоблоки 321 снимка затем сохраняются в буфере 330 декодированных снимков, который сохраняет декодированные снимки 331 в качестве опорных снимков для последующей компенсации движения для других снимков и/или для вывода, соответственно, отображения.
Декодер 30 выполнен с возможностью вывода декодированного снимка 311, например, через вывод 312 для представления или просмотра пользователю.
Предсказание
Модуль 344 интер-предсказания может быть идентичен модулю 244 интер-предсказания (в частности, модулю компенсации движения), а модуль 354 интра-предсказания может быть идентичен модулю 254 интер-предсказания по функции, и принимает решения по разбиению или разделению и выполняет предсказание на основе параметров разбиения и/или предсказания или соответствующей информации, принимаемой из кодированных данных 21 изображения (например, посредством анализа и/или декодирования, например, посредством блока 304 энтропийного декодирования). Модуль 360 применения режима может быть выполнен с возможностью осуществления предсказания (интра- или интер-предсказания) для каждого блока на основе восстановленных снимков, блоков или соответствующих дискретных отсчетов (фильтрованных или нефильтрованных) для получения блока 365 предсказания.
Когда видеосегмент кодируется как сегмент с интра-кодированием (I), модуль 354 интра-предсказания модуля 360 применения режима конфигурируется для генерации блока 365 предсказания для блока снимка текущего видеосегмента на основе сигнального режима интра-предсказания и данных из ранее декодированные блоки текущего снимка. Когда видеоснимок кодируется с интер-кодированием (то есть B или P) сегмент, модуль 344 интер-предсказания (например, модуль компенсации движения) модуля 360 применения режима конфигурируется для создания блоков 365 предсказания для видеоблока текущего видео. Сегмент на основе векторов движения и других элементов синтаксиса, полученных от модуля 304 энтропийного декодирования. Для интер-предсказания блоки предсказания могут быть созданы из одного из опорных снимков в одном из списков опорных снимков. Видеодекодер 30 может создавать списки опорных кадров, Список 0 и Список 1, используя методики построения по умолчанию на основе опорных снимков, хранящихся в DPB 330. То же самое или подобное может применяться для или посредством вариантов осуществления с использованием групп клеток (например, групп видеоклеток) и/или клеток (например, видеоклеток) в дополнение или альтернативно к сегментам (например, видеосегментам), например, видео может быть кодировано с использованием групп I, P или B клеток и/или клеток.
Модуль 360 применения режима выполнен с возможностью определения информации предсказания для видеоблока текущего видеосегмента посредством анализа векторов движения или связанной информации и других элементов синтаксиса, и использует информацию предсказания для создания блоков предсказания для текущего декодируемого видеоблока. Например, модуль 360 применения режима использует некоторые из принятых элементов синтаксиса для определения режима предсказания (например, внутреннее или внешнее предсказание), используемого для кодирования видеоблоков видеосегмента, типа сегмента интер-предсказания (например, B-сегмент, P-сегмент или GPB-сегмент), информация о конструкции для одного или более списков опорных снимков для сегмента, векторы движения для каждого видеоблока с интер-кодированием сегмента, статус интер-предсказания для каждого видеоблока с интер-кодированием сегмента и другие информация для декодирования видеоблоков в текущем видеосегменте. То же самое или подобное может применяться для вариантов осуществления или посредством вариантов осуществления с использованием групп клеток (например, групп видеоклеток) и/или клеток (например, видеоклеток) в дополнение или альтернативно к сегментам (например, видеосегментам), например, видео может быть кодировано с использованием групп I, P или B клеток и/или клеток.
Варианты осуществления видеодекодера 30, как показано на фиг.3, могут быть выполнены с возможностью разбиения и/или декодирования снимка с использованием сегментов (также называемых видео сегментами), при этом снимок может быть разделен на или декодировано с использованием одного или более сегментов (обычно без перекрытия), и каждый сегмент может содержать один или более блоков (например, CTU).
Варианты осуществления видеодекодера 30, как показано на фиг.3, могут быть выполнены с возможностью разбиения и/или декодирования снимка с использованием групп клеток (также называемых группами клеток) и/или клеток (также называемых видеоклетками), при этом снимок может быть разделен на или декодировано с использованием одной или более групп клеток (обычно не перекрывающихся), и каждая группа клеток может содержать, например, один или более блоков (например, CTU) или одну или более клеток, при этом каждая клетка, например, может иметь прямоугольную форму и может содержать один или более блоков (например, CTU), например полные или дробные блоки.
Другие варианты видеодекодера 30 могут использоваться для декодирования данных 21 кодированного снимка. Например, декодер 30 может создавать выходной видеопоток без блока 320 контурной фильтрации. Например, декодер 30, не основанный на преобразовании, может выполнять обратное квантование остаточного сигнала напрямую без модуля 312 обработки обратного преобразования для определенных блоков или кадров. В другой реализации видеодекодер 30 может иметь модуль 310 обратного квантования и модуль 312 обработки обратного преобразования, объединенные в один модуль.
Следует понимать, что в кодере 20 и декодере 30 результат обработки текущего этапа может быть дополнительно обработан и затем выведен на следующий этап. Например, после интерполяционной фильтрации, вывода вектора движения или петлевой фильтрации может выполняться дополнительная операция, такая как обрезка или сдвиг, над результатом обработки интерполяционной фильтрации, вывода вектора движения или петлевой фильтрации.
Следует отметить, что дополнительные операции могут применяться к получаемым векторам движения текущего блока (в том числе, но без ограничения, к векторам движения контрольной точки аффинного режима, векторам движения подблока в аффинном, планарном режимах, режиме ATMVP, временным векторам движения и тому подобному). Например, значение вектора движения ограничивается предварительно определенным диапазоном согласно его представляющему биту. Если представляющий бит вектора движения является bitDepth (битовой глубиной), тогда диапазон составляет -2^(bitDepth-1)~2^(bitDepth-1)-1, где «^» означает возведение в степень. Например, если bitDepth равна 16, то диапазон составляет -32768~32767; если bitDepth равна 18, то диапазон составляет -131072~131071. Например, значение получаемого вектора движения (например, MV четырех подблоков 4×4 в одном блоке 8×8) ограничивается таким образом, чтобы максимальная разность между целыми частями MV четырех подблоков 4×4 не превышала N пикселей, например, была не более 1 пикселя. Здесь представлены два способа ограничения вектора движения согласно bitDepth.
Способ 1: удаление MSB (старшего бита) переполнения посредством следующих операций
где mvx представляет собой горизонтальную компоненту вектора движения блока изображения или подблока, mvy представляет собой вертикальную компоненту вектора движения блока изображения или подблока, а ux и uy указывает промежуточное значение;
Например, если значение mvx равно -32769, то после применения формул (1) и (2) результирующее значение равняется 32767. В компьютерной системе десятичные количества хранятся как дополнение до двойки. Дополнением до двойки для -32769 является 1,0111,1111,1111,1111 (17 битов), затем MSB отбрасывается, поэтому результирующим дополнением до двойки является 0111,1111,1111,1111 (десятичное количество составляет 32767), что совпадает с выходными данными от применения формул (1) и (2).
Операции могут применяться во время суммирования mvp и mvd, как показано в формулах с (5) по (8).
Способ 2: удаление MSB переполнения посредством усечения значения
где vx представляет собой горизонтальную компоненту вектора движения блока изображения или подблока, vy представляет собой вертикальную компоненту вектора движения блока изображения или подблока; x, y и z соответственно соответствуют трем входным значениям процесса усечения MV, а определение функции Clip3 является следующим:
Фиг.4 является схематической диаграммой устройства 400 видеокодирования согласно варианту осуществления раскрытия. Устройство 400 видеокодирования подходит для реализации раскрытых вариантов осуществления, как описано в данном документе. В варианте осуществления устройство 400 видеокодирования может быть декодером, таким как видеодекодер 30 с Фиг.1A или кодер, такой как видеокодер 20 с Фиг.1А.
Устройство 400 видеокодирования содержит входные порты 410 (или порты 410 ввода) и модули 420 приемника (Rx) для приема данных; процессор, логический модуль или центральный процессор (CPU) 430 для обработки данных; модули 440 передатчика (Tx) и выходные порты 450 (или порты 450 вывода) для передачи данных; и память 460 для хранения данных. Устройство 400 видеокодирования может также содержать оптико-электрические (OE) компоненты и электрическо-оптические (EO) компоненты, подключенные к входным портам 410, модулям 420 приемника, модулям 440 передатчика и выходным портам 450 для выход или попадание оптических или электрических сигналов.
Процессор 430 реализован аппаратно и программно. Процессор 430 может быть реализован как одна или более микросхем ЦП, ядер (например, как многоядерный процессор), FPGA, ASIC и DSP. Процессор 430 поддерживает связь с входными портами 410, модулями 420 приемника, модулями 440 передатчика, выходными портами 450 и памятью 460. Процессор 430 содержит модуль 470 кодирования. Модуль 470 кодирования реализует раскрытые варианты осуществления, описанные выше. Например, модуль 470 кодирования реализует, обрабатывает, подготавливает или предоставляет различные операции кодирования. Таким образом, разрешение модуля 470 кодирования обеспечивает существенное улучшение функциональных возможностей устройства 400 видеокодирования и обеспечивает преобразование устройства 400 видеокодирования в другое состояние. В качестве альтернативы модуль 470 кодирования реализован как инструкции, хранящиеся в памяти 460 и выполняемые процессором 430.
Память 460 может содержать один или более дисков, ленточных накопителей и твердотельных накопителей и может использоваться в качестве устройства хранения данных с переполнением, для хранения программ, когда такие программы выбраны для выполнения, и для хранения инструкций и данных, которые считываются во время выполнения программы. Память 460 может быть, например, энергозависимой и/или долговременной и может представлять собой постоянную память (ROM), оперативную память (RAM), троичную память с адресацией по содержимому (TCAM) и/или статическую память с произвольным доступом (SRAM).
Фиг.5 является упрощенной блок-схемой устройства 500, которое может использоваться как одно или оба из устройства-источника 12 и устройства-получателя 14 с Фиг.1 согласно примерному варианту осуществления.
Процессор 502 в устройстве 500 может быть центральным процессором. В качестве альтернативы, процессор 502 может быть устройством любого другого типа или множеством устройств, способных манипулировать или обрабатывать информацию, существующую в настоящее время или разработанную в будущем. Хотя раскрытые реализации могут быть реализованы с одним процессором, как показано, например процессором 502, преимущества в скорости и эффективности могут быть достигнуты с использованием более чем одного процессора.
Память 504 в устройстве 500 может быть постоянным запоминающим устройством (ROM) или устройством оперативной памяти (RAM) в реализации. В качестве памяти 504 может использоваться любой другой подходящий тип запоминающего устройства. Память 504 может включать в себя код и данные 506, к которым обращается процессор 502, используя шину 512. Память 504 может дополнительно включать в себя операционную систему 508 и прикладные программы 510, прикладные программы 510 включают в себя по меньшей мере одну программу, которая позволяет процессору 502 выполнять описанные здесь способы. Например, прикладные программы 510 могут включать в себя приложения с 1 по N, которые дополнительно включают в себя приложение кодирования видео, которое выполняет описанные здесь способы.
Устройство 500 может также включать в себя одно или более устройств вывода, например дисплей 518. Дисплей 518 может быть, в одном примере, сенсорным дисплеем, который объединяет дисплей с сенсорным элементом, способным воспринимать сенсорные вводы (касанием). Дисплей 518 может быть соединен с процессором 502 через шину 512.
Хотя здесь изображена как одна шина, шина 512 устройства 500 может состоять из многочисленных шин. Кроме того, вторичное хранилище 514 может быть напрямую связано с другими компонентами устройства 500 или может быть доступно через сеть и может содержать один встраиваемый блок, такой как карта памяти, или множество блоков, таких как множество карт памяти. Таким образом, устройство 500 может быть реализовано в самых разнообразных конфигурациях.
Модуль 244 интер-предсказания может включать в себя модуль оценки движения (ME) и модуль компенсации движения (MC) (не показан на фиг.2). Модуль оценки движения выполнен с возможностью приема или получения блока 203 снимка (блока 203 текущего снимка текущего снимка 201) и декодированного снимка 331, или, по меньшей мере, одного или множества ранее восстановленных блоков, например, восстановленных блоков одного или более множество других/различных ранее декодированных снимков 331 для оценки движения. Например, видеопоследовательность может содержать текущий снимок и ранее декодированные снимки 331, или, другими словами, текущий снимок и ранее декодированные снимки 331 могут быть частью или формировать последовательность снимков, образующих видеопоследовательность. Кодер 200 может, например, быть выполнен с возможностью выбора опорного блока из множества опорных блоков одинаковых или различных снимков из множества других снимков и обеспечивает опорный снимок (или индекс опорного снимка, ...) и/или смещение (пространственное смещение) между положением (X, Y) координатами опорного блока и положением текущего блока в качестве взаимосвязанных параметров предсказания в модуль оценки движения (не показано на фиг.2). Это смещение также называется вектором движения (MV).
Объединение - важный инструмент оценки движения, используемый в HEVC и унаследованный от VVC. Для выполнения оценки объединения первое, что нужно сделать, это построить список потенциально подходящих вариантов объединения, где каждый из потенциально подходящих вариантов содержит данные о движении, включая информацию о том, используются ли один или два списка опорных снимков, данные о движении также включают в себя информацию о том, что опорный индекс и вектор движения для каждого списка. Список потенциально подходящих вариантов объединения состоит из следующих потенциально подходящих вариантов: a. до четырех потенциально подходящих вариантов пространственного объединения, полученных из пяти соседних пространственных блоков; б. один потенциально подходящий вариант временного объединения, полученный из двух близко расположенных временных блоков; c. дополнительные потенциально подходящие варианты объединения, включающие в себя объединенные потенциально подходящие варианты с двойным предсказанием и потенциально подходящие варианты с нулевым вектором движения.
Потенциально подходящие варианты, впервые добавленные в список потенциально подходящих вариантов объединения, являются пространственными соседями. В список объединения вставляется до четырех потенциально подходящих вариантов посредством последовательной проверки A1, B1, B0, A0 и B2 в указанном порядке, согласно примеру, показанному в правой части Фиг.6.
Помимо простой проверки того, доступен ли блок кодирования и содержит ли он информацию о движении, выполняются некоторые дополнительные проверки избыточности перед принятием всех данных о движении блока кодирования в качестве потенциально подходящего варианта объединения. Эти проверки избыточности можно разделить на две категории для двух разных целей: a. избежать наличия в списке потенциально подходящих вариантов с избыточными данными о движении; б. предотвратить объединение двух разделов, которые могут быть выражены другими способами, которые могут создать избыточный синтаксис.
Когда N - это количество потенциально подходящих вариантов пространственного объединения, полная проверка избыточности будет состоять из (N•(N-1))/2 сравнений данных движения. В случае пяти потенциальных потенциально подходящих вариантов пространственного объединения потребуется десять сравнений данных о движении, чтобы гарантировать, что все потенциально подходящие варианты в списке объединения имеют разные данные о движении. Во время разработки HEVC проверки избыточных данных движения были сокращены до подмножества таким образом, чтобы сохранялась эффективность кодирования, в то время как логика сравнения значительно сокращалась. В окончательном дизайне для каждого потенциально подходящего варианта выполняется не более двух сравнений, в результате чего получается пять общих сравнений. Учитывая порядок {A1, B1, B0, A0, B2}, B0 проверяет только B1, A0 проверяет только A1, а B2 проверяет только A1 и B1. В варианте осуществления проверки избыточности разделения нижний PU разделения 2N×N объединяется с верхним посредством выбора потенциально подходящего варианта B1. Это привело бы к тому, что один CU с двумя PU, имеющими одни и те же данные движения, мог бы передаваться одинаково как 2N×2N CU. В целом, эта проверка применяется ко всем вторым PU прямоугольных и асимметричных разделов 2N×N, 2N×nU, 2N×nD, N×2N, nR×2N и nL×2N. Следует отметить, что для потенциально подходящих вариантов пространственного объединения выполняются только проверки избыточности, и данные движения копируются из потенциально подходящих блоков как есть. Следовательно, масштабирование вектора движения здесь не требуется.
Получение векторов движения для временного потенциально подходящего варианта объединения такое же, как для предиктора временного вектора движения, TMVP. Поскольку потенциально подходящий вариант на объединение содержит все данные движения, а TMVP содержит только один вектор движения, получение всех данных движения зависит от типа сегмента. Для сегментов с двойным предсказанием TMVP выводится для каждого списка опорных снимков. В зависимости от доступности TMVP для каждого списка тип предсказания устанавливается на двунаправленное предсказание или на список, для которого доступен TMVP. Все связанные индексы опорного снимка устанавливаются равными нулю. Следовательно, для сегментов с единым предсказанием выводится только TMVP для списка 0 вместе с индексом опорного снимка, равным нулю.
Когда доступен по меньшей мере один TMVP и потенциально подходящий вариант на временное объединение добавлен в список, проверка избыточности не выполняется. Это делает создание списка объединения независимым от близко расположенного снимка, что улучшает устойчивость к ошибкам. Рассмотрим случай, когда временный потенциально подходящий вариант на объединение будет избыточным и, следовательно, не будет включен в список потенциально подходящих вариантов объединения. В случае потери близко расположенного изображения декодер не может получить временных потенциально подходящих вариантов и, следовательно, не проверить, будет ли оно избыточным. Это повлияет на индексацию всех последующих потенциально подходящих вариантов.
Из соображений устойчивости при (синтаксическом) анализе (парсинге) длина списка потенциально подходящих вариантов объединения фиксирована. После добавления потенциально подходящих вариантов на пространственное и временное объединение список может еще не достичь фиксированной длины. Чтобы компенсировать потерю эффективности кодирования, которая возникает вместе с сигнализацией индекса адаптивного списка без длины, генерируются дополнительные потенциально подходящие варианты. В зависимости от типа сегмента для полного создания списка используются до двух типов потенциально подходящих вариантов: a. Объединенные потенциально подходящие варианты с двойным предсказанием; б. Потенциально подходящие варианты с нулевым вектором движения.
В сегментах с двойным предсказанием дополнительные потенциально подходящие варианты могут быть сгенерированы на основе существующих посредством объединения данных движения из списка 0 опорных снимков одного потенциально подходящего варианта с данными движения из списка 1 другого. Это делается посредством копирования Δx0, Δy0, Δt0 из одного потенциально подходящего варианта, например первого, и Δx1, Δy1, Δt1 из другого, например второго. Различные объединения предварительно определены и приведены в таблице 1.
Таблица 1
Порядок объединения 0 1 2 3 4 5 6 7 8 9 10 11
Δx0, Δy0, Δt0 из Пот.вар. 0 1 0 2 1 2 0 3 1 3 2 3
Δx1, Δy1, Δt1 из Пот.вар. 1 0 2 0 2 1 3 0 3 1 3 2
Когда список все еще не заполнен после добавления объединенных потенциально подходящих вариантов с двойным предсказанием или для сегментов с единым предсказанием, для завершения списка вычисляются потенциально подходящие варианты с нулевым вектором движения. Все потенциально подходящие варианты с нулевым вектором движения имеют один вектор движения с нулевым смещением для сегментов с единым предсказанием и два для сегментов с двойным предсказанием. Опорные индексы устанавливаются равными нулю и увеличиваются на единицу для каждого дополнительного потенциально подходящего варианта до тех пор, пока не будет достигнуто максимальное количество опорных индексов. Если по-прежнему отсутствуют дополнительные потенциально подходящие варианты, для их создания используется нулевой ссылочный индекс. Для всех дополнительных потенциально подходящих вариантов проверки избыточности не выполняются, поскольку оказалось, что пропуск этих проверок не приведет к потере эффективности кодирования.
Для каждой PU, кодированной в режиме межкадрового (интер) предсказания, merge_flag указывает, что объединение блоков используется для получения данных движения. Merge_idx дополнительно используется для определения потенциально подходящего варианта в списке объединения, который предоставляет данные о движении. Помимо этой сигнализации на уровне PU, в заголовке сегмента сигнализируется ряд потенциально подходящих вариантов в списке объединения. Значение по умолчанию - пять, количество потенциально подходящих вариантов в списке объединения представлено как разность с пятью (five_minus_max_num_merge_cand). Таким образом, пять сигнализируется коротким кодовым словом для 0, тогда как использование только одного потенциально подходящего варианта сигнализируется более длинным кодовым словом для 4. Что касается влияния на процесс построения списка потенциально подходящих вариантов объединения, общий процесс остается таким же, хотя он завершается после того, как список содержит максимальное количество потенциально подходящих вариантов объединения. В одной схеме максимальное значение для кодирования индекса объединения задавалось количеством доступных пространственных и временных потенциально подходящих вариантов в списке. Когда, например, доступны только два потенциально подходящего варианта, индекс может быть эффективно закодирован как флаг. Но для анализа индекса объединения необходимо создать весь список потенциально подходящих вариантов объединения, чтобы получить фактическое количество потенциально подходящих вариантов. Если предположить, что соседние блоки недоступны из-за ошибок передачи, анализировать индекс объединения будет невозможно.
Применение концепции объединения блоков в HEVC - это комбинация с режимом пропуска. В предыдущих стандартах кодирования видео режим пропуска использовался для указания для блока, что данные движения выводятся, а не явно сигнализируются, и что остаток предсказания равен нулю, то есть коэффициенты преобразования не передаются. В HEVC в начале каждого CU в сегменте межкадрового предсказания сигнализируется skip_flag, что подразумевает следующее: a. CU содержит только один PU (тип разбиения 2N×2N); б. режим объединения используется для получения данных о движении (значение merge_flag равно 1); c. в потоке битов нет остаточных данных.
Другой инструмент оценки движения, представленный в HEVC и присущий VVC, называется усовершенствованное предсказание вектора движения (Advanced Motion Vector Prediction (AMVP)). В режиме AMVP векторы движения кодируются в виде горизонтальных (x) и вертикальных (y) компонентов в отличие от предиктора вектора движения (MVP). Расчет обоих компонентов разности векторов движения (MVD) показан как MVDx=MVx-MVPx, MVDy=MVy-MVPy.
Векторы движения текущего блока обычно коррелированы с векторами движения соседних блоков в текущем снимке или в ранее кодированных снимках. Соседние блоки, вероятно, будут соответствовать одному и тому же движущемуся объекту с аналогичным движением, и движение объекта вряд ли резко изменится с течением времени. Следовательно, использование векторов движения в соседних блоках в качестве предсказателей уменьшает размер сигнализируемой разности векторов движения. MVP обычно выводятся из уже декодированных векторов движения пространственно соседних блоков или из соседних по времени блоков в близко расположенном списке. В HEVC подход неявного получения MVP был заменен техникой, известной как конкуренция векторов движения, которая явно сигнализирует, какой MVP из списка MVP используется для получения вектора движения. Структура блока дерева квадрантов с переменным кодированием в HEVC может привести к одному блоку, который имеет несколько соседних блоков с векторами движения в качестве потенциальных потенциально подходящих вариантов MVP. Если взять в качестве примера левого соседа, в худшем случае блок предсказания яркости 64×64 может иметь 16 блоков предсказания яркости 8×4 слева, когда блок дерева кодирования яркости 64×64 не разделяется дальше, а левый блок разделяется на максимальную глубину. Усовершенствованное предсказание вектора движения (AMVP) было введено для изменения конкуренции векторов движения с учетом гибкой структуры блоков. Во время разработки HEVC первоначальный дизайн AMVP был значительно упрощен, чтобы обеспечить хороший компромисс между эффективностью кодирования и удобством реализации.
Первоначальный версия AMVP включала в себя пять MVP из трех разных классов предикторов: три вектора движения от пространственных соседей, медиана трех пространственных предикторов и масштабированный вектор движения от близко расположенного, соседнего по времени блока. Кроме того, список предсказателей был изменен посредством переупорядочения, чтобы поместить наиболее вероятный предсказатель движения в первую позицию и посредством удаления избыточных потенциально подходящих вариантов, чтобы гарантировать минимальные накладные расходы на сигнализацию. Это привело к значительным упрощениям конструкции AMVP, таким как удаление среднего предиктора, уменьшение количества потенциально подходящих вариантов в списке с пяти до двух, фиксация порядка потенциально подходящих вариантов в списке и уменьшение количества проверок избыточности. Окончательный вариант построения списка потенциально подходящих вариантов AMVP включает следующих двух потенциально подходящих вариантов MVP:
- до двух пространственных потенциально подходящих вариантов MVP, полученных из пяти пространственных соседних блоков;
- один временной потенциально подходящий MVP, полученный из двух временных, совмещенных блоков, когда оба пространственных потенциально подходящих MVP недоступны или идентичны;
- нулевые векторы движения, когда пространственный, временной или оба потенциально подходящего варианта недоступны.
В описании пространственного потенциально подходящего варианта последовательность операций процесса получения для двух пространственных потенциально подходящих вариантов A и B изображена на Фиг.6. Для потенциально подходящего варианта A данные движения из двух блоков A0 и A1 в нижнем левом углу учитываются при двухпроходном подходе. На первом проходе проверяется, содержит ли какой-либо из потенциально подходящих блоков опорный индекс, равный опорному индексу текущего блока. Первый найденный вектор движения будет взят в качестве потенциально подходящего варианта A. Когда все опорные индексы из A0 и A1 указывают на другой опорный снимок с опорным индексом текущего блока, связанный вектор движения не может использоваться напрямую. Следовательно, во втором проходе векторы движения необходимо масштабировать согласно временными расстояниями между потенциально подходящим опорным снимком и текущим опорным снимком. Временное расстояние выражается в терминах разности между значениями порядкового номера снимка (POC), которые определяют порядок отображения снимков.
Для потенциально подходящего варианта B потенциально подходящие варианты от B0 до B2 проверяются последовательно так же, как A0 и A1 проверяются на первом проходе. Второй проход, однако, выполняется только тогда, когда блоки A0 и A1 не содержат никакой информации о движении, то есть блоки A0 и A1 недоступны или кодируются с использованием внутрикадрового (интра) предсказания. Затем потенциально подходящий вариант A устанавливается равным немасштабированному потенциально подходящему варианту B, если найден немасштабированный потенциально подходящий вариант B, и потенциально подходящий вариант B устанавливается равным второму, немасштабированному или масштабированному варианту потенциально подходящего варианта B. Второй проход может быть завершен, когда все еще могут быть потенциальные немасштабированные подходящие варианты, второй проход выполняет поиск немасштабированных, а также масштабированных MV, полученных из потенциально подходящих вариантов от B0 до B2. Эта конструкция позволяет обрабатывать A0 и A1 независимо от B0, B1 и B2. При получении B следует учитывать только доступность как A0, так и A1, чтобы искать масштабированный или дополнительный немасштабированный MV, полученный из B0 в B2. Эта зависимость приемлема при условии, что она сокращает сложные операции масштабирования вектора движения для потенциально подходящего варианта B. Уменьшение количества масштабирования вектора движения представляет собой значительное снижение сложности процесса вывода предиктора вектора движения.
В процессе временного отбора потенциально подходящих вариантов. Из Фиг.6 видно, что только векторы движения пространственных соседних блоков слева и над текущим блоком рассматриваются как пространственные потенциально подходящие варианты MVP. Это можно объяснить тем фактом, что блоки справа и ниже текущего блока еще не декодированы и, следовательно, их данные о движении недоступны. Поскольку близко расположенный снимок является опорным снимком, который уже декодирован, можно также учитывать данные движения из блока в той же позиции, из блоков справа от близко расположенного блока или из блоков ниже. В HEVC блок в правом нижнем углу и в центре текущего блока был определен как наиболее подходящий для обеспечения хорошего предиктора временного вектора движения (TMVP). Эти потенциально подходящие варианты проиллюстрированы на Фиг.6, где C0 представляет нижнего правого соседа, а C1 представляет центральный блок. Данные движения C0 считаются первыми, и, если данные движения C0 недоступны, данные движения потенциально подходящего блока в центре используются для получения временного потенциально подходящего варианта MVP C. Данные движения C0 считаются ненадежными. доступен, когда связанный PU принадлежит CTU за пределами текущей строки CTU. Это минимизирует требования к пропускной способности памяти для хранения близко расположенных данных движения. В отличие от пространственных потенциально подходящих вариантов MVP, где векторы движения могут относиться к одному и тому же опорному снимку, масштабирование вектора движения является обязательным для TMVP.
Как для построения списка объединения, так и для построения списка AMVP используется предиктор вектора движения на основе предыстории (HMVP). Потенциально подходящие варианты объединения MVP на основе предыстории (HMVP) добавляются в список объединения/AMVP после пространственных MVP и TMVP. В этом способе информация о движении ранее кодированного блока сохраняется в таблице и используется как MVP для текущего CU. Таблица с несколькими потенциально подходящими вариантами HMVP поддерживается в процессе кодирования/декодирования. Таблица сбрасывается (очищается) при обнаружении новой строки CTU. Всякий раз, когда есть некодированный CU, не являющийся подблоком, соответствующая информация о движении добавляется к последней записи таблицы в качестве нового потенциально подходящего варианта HMVP.
В примере размер S таблицы HMVP установлен равным 5, что указывает на то, что в таблицу могут быть добавлены до 5 потенциально подходящих вариантов MVP на основе предыстории (HMVP). При вставке нового потенциально подходящего варианта движения в таблицу используется ограниченное правило «первым пришел - первым обслужен» (FIFO), при котором сначала применяется проверка избыточности, чтобы определить, есть ли в таблице идентичный HMVP. Если в таблице есть идентичный HMVP, идентичный HMVP удаляется из таблицы, а затем все потенциально подходящие варианты HMVP перемещаются вперед,
Потенциально подходящие варианты HMVP могут использоваться в процессе создания списка потенциально подходящих вариантов объединения/списка AMVP. Несколько последних потенциально подходящих вариантов HMVP в таблице проверяются по порядку и вставляются в список потенциально подходящих вариантов после потенциально подходящего варианта TMVP. Проверка избыточности применяется к потенциально подходящего вариантам HMVP к потенциально подходящему варианту пространственного или временного объединения.
Для уменьшения количества операций проверки избыточности введены следующие упрощения:
Количество потенциально подходящих вариантов HMVP, используемых для генерации списка объединения, установлено как (N<=4)?M:(8-N), где N указывает количество существующих потенциально подходящих вариантов в списке объединения, а M указывает количество доступных потенциально подходящих вариантов HMVP в таблице.
Когда общее количество доступных потенциально подходящих вариантов объединения достигает максимально разрешенных потенциально подходящих вариантов объединения минус 1, процесс построения списка потенциально подходящих вариантов объединения из HMVP завершается.
В режиме Черновой варианте VVC параллельно с интер-режимом вводится режим IBC.
Внутриблочное копирование (IBC) - это инструмент, принятый в расширениях HEVC на SCC. Он повышает эффективность кодирования материалов содержимого экрана. Поскольку режим IBC реализован как режим кодирования на уровне блоков, соответствие блоков (BM) выполняется в кодере, чтобы найти оптимальный вектор блока (или вектор движения) для каждого CU. Здесь вектор движения используется для указания смещения от текущего блока к опорному блоку, который уже восстановлен внутри текущего снимка. Вектор движения яркости CU с кодировкой IBC имеет целочисленную точность. Вектор движения цветности также обрезается до целочисленной точности. В сочетании с AMVR режим IBC может переключаться между точностью вектора движения 1 и 4 пикселя. IBC-кодированный CU обрабатывается как третий режим предсказания, отличный от режимов внутреннего или интер-предсказания.
Чтобы уменьшить потребление памяти и сложность декодера, IBC в VTM5 позволяет использовать только восстановленную часть предварительно определенной области, включая текущий CTU. Это ограничение позволяет реализовать режим IBC с использованием локальной памяти на кристалле для аппаратных реализаций.
На стороне кодера оценка движения на основе хеша выполняется для IBC. Кодер выполняет проверку RD для блоков с шириной или высотой не более 16 отсчетов яркости. Для режима без объединения поиск векторов блоков выполняется сначала с использованием поиска на основе хешей. Если поиск по хешу не возвращает действительного потенциально подходящего варианта, будет выполнен локальный поиск на основе совпадения блоков.
При поиске на основе хеша соответствие хеш-ключа (32-битный CRC) между текущим блоком и опорным блоком распространяется на все разрешенные размеры блока. Расчет хеш-ключа для каждой позиции в текущем снимке основан на подблоках 4×4. Для текущего блока большего размера определяется, что хеш-ключ совпадает с ключом контрольного блока, когда все хеш-ключи всех подблоков 4×4 совпадают с хеш-ключами в соответствующих ссылочных местоположениях. Если обнаруживается, что хеш-ключи нескольких ссылочных блоков совпадают с хеш-ключами текущего блока, вычисляются стоимости векторов блоков для каждой согласованной ссылки и выбирается один с минимальной стоимостью.
При поиске соответствия блоков диапазон поиска устанавливается равным N отсчетам слева и сверху от текущего блока в текущем CTU. В начале CTU значение N инициализируется значением 128, если временное опорный снимок отсутствует, и инициализируется значением 64, если существует по меньшей мере один временный опорный снимок. Коэффициент совпадения хеша определяется как процент дискретных отсчетов в CTU, которые нашли совпадение с помощью поиска на основе хеша. При кодировании текущего CTU, если коэффициент попадания в хеш ниже 5%, N уменьшается вдвое.
На уровне CU режим IBC сигнализируется флагом, и он может сигнализироваться как режим IBC AMVP или режим пропуска/объединения IBC следующим образом:
Режим пропуска/объединения IBC: индекс потенциально подходящего варианта объединения используется, чтобы указать, какой из векторов блоков в списке из соседних потенциально подходящих блоков, кодированных IBC, используется для предсказания текущего блока.
Режим IBC AMVP: разность векторов блоков кодируется так же, как разность векторов движения. Способ предсказания вектора блока использует двух потенциально подходящих вариантов в качестве предикторов. Сигнализируется флагом, указывающим индекс предиктора вектора блока.
Поскольку IBC представила режим объединения/пропуска IBC и режим AMVP IBC, необходимо создать дополнительный список объединения IBC и список AMVP. В Черновом проекте VVC 5.0 предикторы BV для режима объединения и режима AMVP в IBC имеют общий список предикторов, который состоит из следующих элементов:
- 2 пространственные соседние позиции (A1, B1)
- 5 записей HMVP
- Нулевые векторы по умолчанию
Для режима объединения будет использоваться до 6 записей этого списка; для режима AMVP будут использоваться первые 2 записи из этого списка. И список соответствует требованиям области общего списка объединения (общий список в SMR).
В дополнение к вышеупомянутому списку потенциально подходящих вариантов предикторов BV, отдельный способ используется для упрощения операций сокращения между потенциально подходящими вариантами HMVP и существующими потенциально подходящими вариантами объединения (A1, B1). В упрощении будет до 2-х операций обрезки:
- Обрезка между последними потенциально подходящими вариантами HMVP Hk и A1
- Обрезка между последним потенциально подходящим вариантом HMVP Hk и B1.
Средство обработки сокращения сравнивает, являются ли два потенциально подходящего варианта объединения IBC одинаковыми. Более конкретно, обработка отсечения сравнивает, одинаковы ли векторы блоков между двумя потенциально подходящими вариантами объединения IBC.
Предсказание вектора движения яркости IBC описано в подпункте 8.6.2.2 документа JVET-N1001-v5 (VVC Draft 5.0) следующим образом:
8.6.2.2 Процесс получения для предсказания вектора движения яркости IBC
Вектор движения яркости mvL получается с помощью следующих упорядоченных этапов:
1. Процесс получения потенциально подходящих вариантов пространственного вектора движения из соседних единичных блоков кодирования, как указано в пункте 8.6.2.3, вызывается с положением блока кодирования яркости (xCb, yCb), установленным равным (xSmr, ySmr), шириной блока кодирования яркости cbWidth и Высота блока кодирования яркости cbHeight установлена равной smrWidth и smrHeight в качестве входных данных, а выходными данными являются флаги доступности availableFlagA1, availableFlagB1 и векторы движения mvA1 и mvB1.
2. Список потенциально подходящих вариантов вектора движения, mvCandList, строится следующим образом:
3. Переменная numCurrCand устанавливается равной количеству потенциально подходящих вариантов объединения в mvCandList.
4. Когда numCurrCand меньше MaxNumMergeCand и smrNumHmvpIbcCand больше 0, процесс создания потенциально подходящих вариантов вектора движения на основе предыстории IBC, как указано в 8.6.2.4, вызывается с помощью mvCandList, isInSmr устанавливается равным IsInSmr[xCb][yCb], и numCurrCand в качестве входных данных, и измененные mvCandList и numCurrCand в качестве выходных данных.
5. Когда numCurrCand меньше MaxNumMergeCand, применяется следующее, пока numCurrCand не станет равным MaxNumMergeCand:
- mvCandList[numCurrCand][0] устанавливается равным 0.
- mvCandList[numCurrCand][1] устанавливается равным 0.
- numCurrCand увеличивается на 1.
6. Переменная mvIdx получается следующим образом:
mvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]: mvp_l0_flag[xCb][yCb] (8-916)
7. Сделаны следующие присвоения:
mvL[0]=mergeCandList[mvIdx][0] (8-917)
mvL[1]=mergeCandList[mvIdx][1] (8-918)
В другом примере предсказание вектора движения яркости IBC описывается следующим образом:
8.6.2.2 Процесс получения для предсказания вектора блока яркости IBC
Этот процесс вызывается только тогда, когда CuPredMode[0][xCb][yCb] равен MODE_IBC, где (xCb, yCb) задают верхний левый дискретный отсчет текущего блока кодирования яркости относительно верхнего левого дискретного отсчета яркости текущего снимка.
Входные данные для этого процесса являются следующими:
местоположение яркости (xCb, yCb) верхнего левого дискретного отсчета текущего блока кодирования яркости относительно верхнего левого дискретного отсчета яркости текущего снимка,
переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетов яркости,
переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетов яркости.
Результатами этого процесса являются:
вектор блока яркости с точностью 1/16 дробного дискретного отсчета (bvL).
Вектор блока яркости bvL получается с помощью следующих упорядоченных этапов:
1. Когда IsGt4by4 имеет значение ИСТИНА (в примере, переменная IsGt4by4 получается следующим образом: IsGt4by4=(cbWidth*cbHeight)>16), процесс получения потенциально подходящих вариантов пространственного вектора блока из соседних единичных блоков кодирования, как указано в пункте 8.6.2.3, вызывается с местоположением блока кодирования яркости (xCb, yCb), шириной блока кодирования яркости cbWidth и height cbHeight в качестве входных данных, а выходными данными являются флаги доступности availableFlagA1, availableFlagB1 и векторы блоков bvA1 и bvB1.
2. Когда IsGt4by4 имеет значение ИСТИНА, список потенциально подходящих вариантов вектора блока, bvCandList, строится следующим образом:
3.Переменная numCurrCand получается следующим образом:
IsGt4by4 имеет значение ИСТИНА, numCurrCand устанавливается равным количеству потенциально подходящих вариантов объединения в bvCandList.
В противном случае (IsGt4by4 имеет значение ЛОЖЬ) numCurrCand устанавливается равным 0.
4.Когда numCurrCand меньше MaxNumIbcMergeCand и NumHmvpIbcCand больше 0, процесс получения потенциально подходящих вариантов вектора блока на основе предыстории IBC, как указано в 8.6.2.4, вызывается с bvCandList и numCurrCand в качестве входных данных, а также изменяются bvCandList и numCur.
5.Когда numCurrCand меньше MaxNumIbcMergeCand, следующее применяется до тех пор, пока numCurrCand не станет равным MaxNumIbcMergeCand:
bvCandList[numCurrCand][0] устанавливается равным 0.
bvCandList[numCurrCand][1] устанавливается равным 0.
numCurrCand увеличивается на 1.
6. Переменная bvIdx получается следующим образом:
bvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]: mvp_l0_flag[xCb][yCb] (1119)
7. Сделаны следующие присвоения:
bvL[0]=bvCandList[bvIdx][0] (1120)
bvL[1]=bvCandList[bvIdx][1] (1121)
MaxNumMergeCand получается следующим образом:
six_minus_max_num_merge_cand указывает максимальное количество потенциально подходящих вариантов предсказания вектора движения объединения (MVP), поддерживаемых в сегменте, вычтенном из 6. Максимальное количество потенциально подходящих вариантов объединения, MaxNumMergeCand определяется следующим образом:
MaxNumMergeCand=6-six_minus_max_num_merge_cand
Значение MaxNumMergeCand должно быть в диапазоне от 1 до 6 включительно.
six_minus_max_num_merge_cand определяет максимальное количество потенциально подходящих вариантов предсказания вектора движения объединения (MVP), поддерживаемых в SPS, вычитаемое из 6. Значение six_minus_max_num_merge_cand должно находиться в диапазоне от 0 до 5 включительно.
Максимальное количество потенциально подходящих вариантов объединения MVP, MaxNumMergeCand, определяется следующим образом:
MaxNumMergeCand=6-six_minus_max_num_merge_cand.
В некоторых вариантах осуществления для режима IBC этот синтаксис также может называться MaxNumIbcMergeCand. В этом случае MaxNumMergeCand может использоваться для межпроцессного взаимодействия.
six_minus_max_num_ibc_merge_cand, когда sps_ibc_enabled_flag равен 1, указывает максимальное количество потенциально подходящих вариантов предсказания вектора блока объединения (BVP) IBC, поддерживаемых в SPS, вычитаемое из 6. Значение six_minus_max_num_ibc_merge_cand должно быть в диапазоне от 0 до 5 включительно.
Максимальное количество потенциально подходящих вариантов BVP объединения IBC, MaxNumIbcMergeCand, определяется следующим образом:
если (sps_ibc_enabled_flag)
MaxNumIbcMergeCand=6-six_minus_max_num_ibc_merge_cand
иначе
MaxNumIbcMergeCand=0.
sps_ibc_enabled_flag, равный 1, указывает, что режим предсказания IBC может использоваться при декодировании снимков в закодированной в одном слое видеопоследовательности (CLVS). sps_ibc_enabled_flag, равный 0, указывает, что режим предсказания IBC не используется в CLVS. Если sps_ibc_enabled_flag отсутствует, предполагается, что он равен 0.
general_merge_flag определяется следующим образом:
general_merge_flag[x0][y0] указывает, выводятся ли параметры интер-предсказания для текущего единичного блока кодирования из соседнего разбиения интер-предсказания. Индексы массива x0, y0 указывают местоположение (x0, y0) верхнего левого дискретного отсчета яркости рассматриваемого блока кодирования относительно верхнего левого дискретного отсчета яркости снимка.
Когда general_merge_flag[x0][y0] отсутствует, он получается следующим образом:
Если cu_skip_flag[x0][y0] равен 1, то general_merge_flag[x0][y0] предполагается равным 1.
В противном случае предполагается, что general_merge_flag[x0][y0] равняется 0.
cu_skip_flag[x0][y0], равное 1, указывает, что для текущего единичного блока кодирования при декодировании P- или B-сегмента после cu_skip_flag[x0][y0] не анализируются никакие другие элементы синтаксиса, кроме одного или нескольких из следующих: флаг режима pred_mode_ibc_flag[x0][y0] и структура синтаксиса merge_data(); при декодировании I-сегмента после cu_skip_flag[x0][y0] не анализируются никакие элементы синтаксиса, кроме merge_idx[x0][y0]. cu_skip_flag[x0][y0], равное 0, указывает, что единичный блок кодирования не пропускается. Индексы массива x0, y0 указывают местоположение (x0, y0) верхнего левого дискретного отсчета яркости рассматриваемого блока кодирования относительно верхнего левого дискретного отсчета яркости снимка.
Когда cu_skip_flag[x0][y0] отсутствует, предполагается, что он равен 0.
mvp_l0_flag определяется следующим образом:
mvp_l0_flag[x0][y0] указывает индекс предиктора вектора движения для списка 0, где x0, y0 указывают местоположение (x0, y0) верхнего левого дискретного отсчета яркости рассматриваемого блока кодирования относительно верхнего левого дискретного отсчета яркости снимка.
Когда mvp_l0_flag[x0][y0] отсутствует, предполагается, что он равен 0.
Когда MaxNumMergeCand или MaxNumIbcMergeCand установлен равным 1, длина созданного списка потенциально подходящих вариантов объединения может быть равна 1 или 2, в зависимости от количества доступных потенциально подходящих вариантов пространственного вектора движения. Если mvp_l0_flag для декодированного блока IBC равно 1, вектор движения для блока IBC может быть неопределенным. Для решения этой проблемы предлагаются следующие решения.
В таблице 2 показаны векторы движения в списке потенциально подходящих вариантов с различным статусом availableFlagA1 и availableFlagB1.
Таблица 2 Векторы движения в списке потенциально подходящих вариантов
availableFlagA1 availableFlagB1 Потенциально подходящ вариант. 0 Потенциально подходящ вариант. 1
1 1 mvA1 mvB1
1 0 mvA1 неопределенный
0 1 mvB1 неопределенный
0 0 HMVP/Zero неопределенный
Вариант 1 осуществления:
Когда значение MaxNumMergeCand или MaxNumIbcMergeCand установлено равным 1, то стороне декодера не нужно анализировать значение mvp_l0_flag из битового потока, и значение mvp_l0_flag устанавливается равным 0.
В примере измененная таблица синтаксиса показана следующим образом:
coding_unit (x0, y0, cbWidth, cbHeight, treeType) { Дескриптор
если (CuPredMode[x0][y0]==MODE_INTRA) {
} иначе если (treeType!=DUAL_TREE_CHROMA) {/*MODE_INTER или MODE_IBC*/
если (cu_skip_flag[x0][y0]== 0)
general_merge_flag[x0][y0] ае (v)
если (general_merge_flag[x0][y0]) {
merge_data (x0, y0, cbWidth, cbHeight)
} else если (CuPredMode[x0][y0]== MODE_IBC) {
mvd_coding (x0, y0, 0, 0)
если (MaxNumMergeCand> 1)
mvp_l0_flag[x0][y0] ае (v)
если (sps_amvr_enabled_flag && (MvdL0[x0][y0][0]!=0 | | MvdL0[x0][y0][1]!=0)) {
amvr_precision_flag[x0][y0] ае (v)
}
} иначе {
ае (v)
}
}
}
В другом примере
Синтаксис единичного блока кодирования:
если (MaxNumIbcMergeCand> 1)
mvp_l0_flag[x0][y0] ае (v)
В этом варианте
Общий процесс декодирования для единичных блоков кодирования, закодированных в режиме предсказания IBC
входные данные для этого процесса являются следующими:
- местоположение яркости (xCb, yCb), указывающее верхний левый дискртеный отсчет текущего блока кодирования относительно верхнего левого дискретного отсчета яркости текущего снимка,
- переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетов яркости,
- переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетов яркости,
- переменная treeType, указывающая, используется ли одинарное или двойное дерево, и если используется двойное дерево, она указывает, соответствует ли текущее дерево компонентам яркости или цветности.
Результатом этого процесса является измененный восстановленный список до внутриконтурной фильтрации.
Процесс получения параметров квантования вызывается с местоположением яркости (xCb, yCb), шириной текущего блока кодирования в дискретных отсчетов яркости cbWidth и высотой текущего блока кодирования в дискретных отсчетов яркости cbHeight и переменной treeType в качестве входных данных.
Переменная IsGt4by4 получается следующим образом:
IsGt4by4=(cbWidth*cbHeight)>16
Процесс декодирования единичных блоков кодирования, закодированных в режиме предсказания IBC, включает следующие упорядоченные этапы:
1. Компоненты вектора блока текущего единичного блока кодирования выводятся следующим образом:
- Процесс получения для компонентов вектора блока запускается с местоположением блока кодирования яркости (xCb, yCb), шириной блока кодирования яркости cbWidth и высотой блока кодирования яркости cbHeight в качестве входных данных и вектором блока яркости bvL в качестве вывода.
- Когда treeType равен SINGLE_TREE, вызывается процесс получения векторов блоков цветности с вектором блока яркости bvL в качестве входа и вектором блока цветности bvC в качестве вывода.
2. Дискретные отсчеты предсказания текущего единичного блока кодирования выводятся следующим образом:
- Процесс декодирования для блоков IBC запускается с местоположением блока кодирования яркости (xCb, yCb), шириной блока кодирования яркости cbWidth и высотой блока кодирования яркости cbHeight, вектором блока яркости bvL, переменной cIdx, установленной равной 0 в качестве входных данных, и дискретные отсчеты предсказания IBC (predSamples), которые представляют собой массив (cbWidth) x (cbHeight) predSamplesL предсказуемых образцов яркости в качестве выходных данных.
- Когда treeType равно SINGLE_TREE, дискретные отсчеты предсказания текущего единичного блока кодирования выводятся следующим образом:
- Процесс декодирования для блоков IBC запускается с местоположением блока кодирования яркости (xCb, yCb), шириной блока кодирования яркости cbWidth и высотой блока кодирования яркости cbHeight, вектором блока цветности bvC и переменной cIdx, установленными равными 1 в качестве входных данных, и дискретные отсчеты предсказания IBC (predSamples), которые представляют собой массив (cbWidth/SubWidthC)x(cbHeight/SubHeightC) predSamplesCb дискретных отсчетов цветности предсказания для компонентов Cb цветности в качестве выходных данных.
- Процесс декодирования для блоков IBC вызывается с местоположением блока кодирования яркости (xCb, yCb), шириной блока кодирования яркости cbWidth и высотой блока кодирования яркости cbHeight, вектором блока цветности bvC и переменной cIdx, установленными равными 2 в качестве входных данных, и дискретные отсчеты предсказания IBC (predSamples), которые представляют собой массив (cbWidth/SubWidthC) x (cbHeight/SubHeightC) predSamplesCr дискретных отсчетов цветности предсказания для компонентов Cr цветности в качестве выходных данных.
3. Остаточные дискретные отсчеты текущего единичного блока кодирования выводятся следующим образом:
- Процесс декодирования остаточного сигнала блоков кодирования, закодированных в режиме интер-предсказания, запускается с положением (xTb0, yTb0), установленным равным положению яркости (xCb, yCb), шириной nTbW, установленной равной ширине блока кодирования яркости cbWidth, высоту nTbH устанавливают равной высоте cbHeight блока кодирования яркости, а переменную cIdx устанавливают равной 0 в качестве входных данных и массив resSamplesL в качестве выходных данных.
- Когда treeType равно SINGLE_TREE, процесс декодирования остаточного сигнала блоков кодирования, закодированных в режиме межкадрового предсказания, запускается с положением (xTb0, yTb0), установленным равным положению цветности (xCb/SubWidthC, yCb/SubHeightC), ширине nTbW устанавливается равным ширине блока кодирования цветности cbWidth/SubWidthC, высота nTbH устанавливается равной высоте блока кодирования цветности cbHeight/SubHeightC, а переменная cIdx устанавливается равной 1 в качестве входных данных, а массив resSamplesCb - в качестве выходных данных.
- Когда treeType равен SINGLE_TREE, процесс декодирования остаточного сигнала блоков кодирования, закодированных в режиме межкадрового предсказания, запускается с местоположением (xTb0, yTb0), установленным равным местоположению цветности (xCb/SubWidthC, yCb/SubHeightC), ширине nTbW устанавливается равным ширине блока кодирования цветности cbWidth/SubWidthC, высота nTbH устанавливается равной высоте блока кодирования цветности cbHeight/SubHeightC, а переменная cIdxset равна 2 в качестве входных данных, а массив resSamplesCr - в качестве выходных данных.
4. Восстановленные дискретные отсчеты текущего единичного блока кодирования выводятся следующим образом:
- Процесс восстановления изображения для цветового компонента вызывается с положением блока (xCurr, yCurr), установленным равным (xCb, yCb), шириной блока nCurrSw, установленным равным cbWidth, высотой блока nCurrSh, установленным равным cbHeight, переменной cIdx, установленной равно 0, массив (cbWidth)x(cbHeight) predSamples установлен равным predSamplesL, а массив (cbWidth) x (cbHeight) resSamples установлен равным resSamplesL в качестве входных данных, а на выходе - измененное восстановленное изображение перед внутриконтурной фильтрацией.
- Когда treeType равно SINGLE_TREE, процесс восстановления снимка для цветового компонента вызывается с положением блока (xCurr, yCurr), установленным равным (xCb/SubWidthC, yCb/SubHeightC), шириной блока nCurrSw, установленным равным cbWidth/SubWidthC, высота блока nCurrSh установлена равной cbHeight/SubHeightC, переменная cIdx установлена равной 1, массив (cbWidth/SubWidthC)x(cbHeight/SubHeightC) массив predSamples установлен равным predSamplesCb и (cbWidth/SubWidthC)x(cbHeight/SubHeightCight) массив resSamples устанавливается равным resSamplesCb в качестве входных данных, а выход представляет собой измененное восстановленное изображение перед внутриконтурной фильтрацией.
- Когда treeType равно SINGLE_TREE, процесс восстановления изображения для цветового компонента вызывается с положением блока (xCurr, yCurr), установленным равным (xCb/SubWidthC, yCb/SubHeightC), шириной блока nCurrSw, установленным равным cbWidth/SubWidthC, высота блока nCurrSh установлена равной cbHeight/SubHeightC, переменная cIdx установлена равной 2, массив (cbWidth/SubWidthC)x(cbHeight/SubHeightC) массив predSamples установлен равным predSamplesCr, а (cbWidth/SubWidthC)x(cbHeightC/SubHeightC) массив resSamples устанавливается равным resSamplesCr в качестве входных данных, а выход представляет собой измененное восстановленное изображение перед внутриконтурной фильтрацией.
Процесс получения компонентов вектора блоков для блоков IBC
Общий
Входные данные для этого процесса являются следующими:
- местоположение яркости (xCb, yCb) верхнего левого дискретного отсчета текущего блока кодирования яркости относительно верхнего левого дискретного отсчета яркости текущего снимка,
- переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетов яркости,
- переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетов яркости.
Результатами этого процесса являются:
- вектор блока яркости с точностью 1/16 дробного дискретного отсчета (bvL).
Вектор mvL блока яркости получается следующим образом:
- Процесс получения для предсказания вектора блока яркости IBC вызывается с местоположением яркости (xCb, yCb), входными переменными cbWidth и cbHeight, а на выходе - вектором блока яркости bvL.
Когда general_merge_flag[xCb][yCb] равно 0, применяется следующее:
1. Переменная bvd получается следующим образом:
bvd[0]=MvdL0[xCb][yCb][0]
bvd[1]=MvdL0[xCb][yCb][1]
2. Процесс округления векторов движения вызывается с mvX, установленным равным bvL, rightShift установлен равным AmvrShift, а leftShift установлен равным AmvrShift в качестве входных данных и округленным bvL в качестве выходных данных.
3. Вектор блока яркости bvL модифицируется следующим образом:
u[0]=(bvL[0]+bvd[0]+218)%218
bvL[0]=(u[0]>=217)?(u[0]-218): u[0]
u[1]=(bvL[1]+bvd[1]+218)%218
bvL[1]=(u[1]>=217)?(u[1]-218): u[1]
ПРИМЕЧАНИЕ - Результирующие значения bvL[0] и bvL[1], как указано выше, всегда будут в диапазоне от -217 до 217-1 включительно.
Когда IsGt4by4 имеет значение ИСТИНА, процесс обновления для основанного на предыстории списка предикторов вектора блоков запускается с вектором блока яркости bvL.
Для соответствия битового потока требуется, чтобы вектор блока яркости bvL подчинялся следующим ограничениям:
- CtbSizeY больше или равно ((yCb+(bvL[1]>>4))&(CtbSizeY-1))+cbHeight.
- IbcVirBuf[0][(x+(bvL[0]>>4))&(IbcBufWidthY-1)][(y+(bvL[1]>>4))&(CtbSizeY-1)] не должно быть равно −1 для x=xCb..xCb+cbWidth-1 и y=yCb..yCb+cbHeight-1.
Процесс получения для предсказания вектора блока яркости IBC
Этот процесс вызывается только тогда, когда CuPredMode[0][xCb][yCb] равен MODE_IBC, где (xCb, yCb) указывают верхний левый дискретный отсчет текущего блока кодирования яркости относительно верхнего левого дискретного отсчета яркости текущего снимка.
Входные данные для этого процесса являются следующими:
- местоположение яркости (xCb, yCb) верхнего левого дискретного отсчета текущего блока кодирования яркости относительно верхнего левого дискретного отсчета яркости текущего снимка,
- переменная cbWidth, указывающая ширину текущего блока кодирования в дискретных отсчетов яркости,
- переменная cbHeight, указывающая высоту текущего блока кодирования в дискретных отсчетов яркости.
Результатами этого процесса являются:
- вектор блока яркости с точностью 1/16 дробного дискретного отсчета (bvL).
Вектор блока яркости bvL получается с помощью следующих упорядоченных этапов:
1.Когда IsGt4by4 имеет значение ИСТИНА, процесс получения для потенциально подходящих вариантов пространственного вектора блока из соседних единичных блоков кодирования вызывается с местоположением блока кодирования яркости (xCb, yCb), шириной блока кодирования яркости cbWidth и высотой cbHeight в качестве входных и выходных данных, являются флагами доступности availableFlagA1, availableFlagB1 и векторами блоков bvA1 и bvB1.
2. Когда IsGt4by4 имеет значение ИСТИНА, список потенциально подходящих вариантов вектора блока, bvCandList, строится следующим образом:
i=0
если (availableFlagA1)
bvCandList[i++]=bvA1
если (availableFlagB1)
bvCandList[i++]=bvB1
3.Переменная numCurrCand получается следующим образом:
- IsGt4by4 имеет значение ИСТИНА, numCurrCand устанавливается равным количеству потенциально подходящих вариантов объединения в bvCandList.
- В противном случае (IsGt4by4 имеет значение ЛОЖЬ) numCurrCand устанавливается равным 0.
4. Когда numCurrCand меньше MaxNumIbcMergeCand, а NumHmvpIbcCand больше 0, вызывается процесс получения потенциально подходящих вариантов вектора блока на основе предыстории IBC с bvCandList и numCurrCand в качестве входных данных и измененных bvCandList и numCurrCand в качестве выходных данных.
5.Когда numCurrCand меньше MaxNumIbcMergeCand, следующее применяется до тех пор, пока numCurrCand не станет равным MaxNumIbcMergeCand:
- bvCandList[numCurrCand][0] устанавливается равным 0.
- bvCandList[numCurrCand][1] устанавливается равным 0.
- numCurrCand увеличивается на 1.
6. Переменная bvIdx получается следующим образом:
bvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]: mvp_l0_flag[xCb][yCb].
7. Сделаны следующие присвоения:
bvL[0]=bvCandList[bvIdx][0].
bvL[1]=bvCandList[bvIdx][1].
Вариант 2 осуществления:
Когда значение MaxNumMergeCand или MaxNumIbcMergeCand установлено равным 1, второй потенциально подходящий вариант в списке потенциально подходящих вариантов вектора движения устанавливается равным значению по умолчанию, например нулевому вектору движения.
8.6.2.2 Процесс получения для предсказания вектора движения яркости IBC
Вектор движения яркости mvL получается с помощью следующих упорядоченных этапов:
1. Процесс получения потенциально подходящих вариантов пространственного вектора движения из соседних единичных блоков кодирования, как указано в пункте 8.6.2.3, вызывается с местоположением блока кодирования яркости (xCb, yCb), установленным равным (xSmr, ySmr), шириной блока кодирования яркости cbWidth и Высота блока кодирования яркости cbHeight установлена равной smrWidth и smrHeight в качестве входных данных, а выходными данными являются флаги доступности availableFlagA1, availableFlagB1 и векторы движения mvA1 и mvB1.
2. Список потенциально подходящих вариантов вектора движения, mvCandList, строится следующим образом:
3. Переменная numCurrCand устанавливается равной количеству потенциально подходящих вариантов объединения в mvCandList.
4. Когда numCurrCand меньше MaxNumMergeCand и smrNumHmvpIbcCand больше 0, процесс создания потенциально подходящих вариантов вектора движения на основе предыстории IBC, как указано в 8.6.2.4, вызывается с помощью mvCandList, isInSmr установлен равным IsInSmr[xCb][yCb], и в качестве входных данных и измененные mvCandList и numCurrCand в качестве выходных данных.
5. Когда numCurrCand меньше MaxNumMergeCand, применяется следующее, пока numCurrCand не станет равным MaxNumMergeCand:
- mvCandList[numCurrCand][0] устанавливается равным 0.
- mvCandList[numCurrCand][1] устанавливается равным 0.
- numCurrCand увеличивается на 1.
6. Если MaxNumMergeCand равно 1 (необязательно: и general_merge_falg[xCb][yCb] равно 0), применяется следующее:
- mvCandList[1][0] устанавливается равным 0.
- mvCandList[1][1] устанавливается равным 0.
7. Переменная mvIdx получается следующим образом:
mvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]: mvp_l0_flag[xCb][yCb] (8-916)
8. Сделаны следующие присвоения:
mvL[0]=mergeCandList[mvIdx][0] (8-917)
mvL[1]=mergeCandList[mvIdx][1] (8-918)
9. Если general_merge_flag[xCb][yCb] равно 0, процесс округления для векторов движения, как указано в пункте 8.5.2.14, вызывается с mvX, установленным равным mvL, rightShift установлен равным MvShift+2, а leftShift установлен равным MvShift+2 в качестве входных данных и округленный mvL в качестве выходных данных.
Вариант 3 осуществления:
Убедитесь, что в списке потенциально подходящих вариантов вектора движения есть по меньшей мере 2 записи для режима IBC AMVP.
В этом решении список потенциально подходящих вариантов вектора движения создается в зависимости от general_merge_flag. Когда general_merge_flag имеет значение "истина" (например, значение general_merge_flag равно 1), переменная maxNumListCand устанавливается равной MaxNumMergeCand или MaxNumIbcMergeCand; когда general_merge_flag имеет значение "ложь" (например, значение general_merge_flag равно 0), maxNumListCand или MaxNumIbcMergeCand устанавливается равным 2. И затем при построении списка потенциально подходящих вариантов вектора движения в список добавляются HMVP и нулевые потенциально подходящие варианты, пока количество потенциально подходящих вариантов в списке не станет равным maxNumListCand.
8.6.2.2 Процесс получения для предсказания вектора движения яркости IBC
Вектор движения яркости mvL получается с помощью следующих упорядоченных этапов:
1. Переменная maxNumListCand получается следующим образом:
maxNumListCand=general_merge_flag[xCb][yCb]?MaxNumMergeCand: 2 (8-916)
2. Процесс получения потенциально подходящих вариантов пространственного вектора движения из соседних единичных блоков кодирования, как указано в пункте 8.6.2.3, вызывается с положением блока кодирования яркости (xCb, yCb), установленным равным (xSmr, ySmr), шириной блока кодирования яркости cbWidth и Высота блока кодирования яркости cbHeight установлена равной smrWidth и smrHeight в качестве входных данных, а выходными данными являются флаги доступности availableFlagA1, availableFlagB1 и векторы движения mvA1 и mvB1.
3. Список потенциально подходящих вариантов вектора движения, mvCandList, строится следующим образом:
4. Переменная numCurrCand устанавливается равной количеству потенциально подходящих вариантов объединения в mvCandList.
5. Когда numCurrCand меньше maxNumListCand и smrNumHmvpIbcCand больше 0, процесс создания потенциально подходящих вариантов вектора движения на основе предыстории IBC, как указано в 8.6.2.4, вызывается с помощью mvCandList, isInSmr устанавливается равным IsInSmr[xCb][yCb], и numCurrCand в качестве входных данных, и измененные mvCandList и numCurrCand в качестве выходных данных.
6. Когда numCurrCand меньше maxNumListCand, применяется следующее, пока numCurrCand не станет равным maxNumListCand:
- mvCandList[numCurrCand][0] устанавливается равным 0.
- mvCandList[numCurrCand][1] устанавливается равным 0.
- numCurrCand увеличивается на 1.
7. Переменная mvIdx получается следующим образом:
mvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]: mvp_l0_flag[xCb][yCb] (8 916)
8. Сделаны следующие присвоения:
mvL[0]=mergeCandList[mvIdx][0] (8-917)
mvL[1]=mergeCandList[mvIdx][1] (8-918)
9. Если general_merge_flag[xCb][yCb] равно 0, процесс округления для векторов движения, как указано в пункте 8.5.2.14, вызывается с mvX, установленным равным mvL, rightShift установлен равным MvShift+2, и leftShift, установленным равным MvShift+2 в качестве входных данных, и округленный mvL в качестве выходных данных.
8.6.2.4 Процесс получения потенциально подходящих вариантов вектора движения на основе предыстории IBC
Для каждого потенциально подходящего варианта в smrHmvpIbcCandList[hMvpIdx] с индексом hMvpIdx=1..smrNumHmvpIbcCand следующие упорядоченные этапы повторяются до тех пор, пока numCurrCand не станет равным maxNumListCand:
1. Переменная sameMotion получается следующим образом:
- Если все следующие условия выполняются для любого потенциально подходящего варианта в вектор движения N, где N равно A1 или B1, sameMotion и isPrunedN оба устанавливаются равными ИСТИНА:
- hMvpIdx меньше или равен 1.
- Потенциально подходящий вариант smrHmvpIbcCandList[smrNumHmvpIbcCand-hMvpIdx] равен потенциально подходящему варианту вектора движения N.
- isPrunedN имеет значение ЛОЖЬ.
В противном случае sameMotion устанавливается равным FALSE.
2. Когда sameMotion имеет значение ЛОЖЬ, потенциально подходящий вариант smrHmvpIbcCandList[smrNumHmvpIbcCand- hMvpIdx] добавляется в список потенциально подходящих вариантов вектора движения следующим образом:
mvCandList[numCurrCand++]=
smrHmvpIbcCandList[smrNumHmvpIbcCand-hMvpIdx] (8-923)
Вариант 4 осуществления:
Убедитесь, что в списке потенциально подходящих вариантов вектора движения есть по меньшей мере 2 записи для режима IBC AMVP.
В этом решении создается список потенциально подходящих вариантов на вектор движения с по меньшей мере двумя записями. При построении списка потенциально подходящих вариантов векторов движения HMVP и нулевые потенциально подходящие варианты добавляются в список до тех пор, пока количество потенциально подходящих вариантов в списке не станет равным максимальному количеству между MaxNumMergeCand или MaxNumIbcMergeCand и 2.
8.6.2.2 Процесс получения для предсказания вектора движения яркости IBC
Вектор движения яркости mvL получается с помощью следующих упорядоченных этапов:
1. Процесс получения потенциально подходящих вариантов пространственного вектора движения из соседних единичных блоков кодирования, как указано в пункте 8.6.2.3, вызывается с положением блока кодирования яркости (xCb, yCb), установленным равным (xSmr, ySmr), шириной блока кодирования яркости cbWidth и Высота блока кодирования яркости cbHeight установлена равной smrWidth и smrHeight в качестве входных данных, а выходными данными являются флаги доступности availableFlagA1, availableFlagB1 и векторы движения mvA1 и mvB1.
2. Список потенциально подходящих вариантов вектора движения, mvCandList, строится следующим образом:
3. Переменная numCurrCand устанавливается равной количеству потенциально подходящих вариантов объединения в mvCandList.
4. Когда numCurrCand меньше Max(MaxNumMergeCand, 2) и smrNumHmvpIbcCand больше 0, процесс получения потенциально подходящих вариантов вектора движения на основе предыстории IBC, как указано в 8.6.2.4, вызывается с помощью mvCandList, isInSmr, устанавленных равными IsInSmr[xCb][yCb][yCb] и numCurrCand в качестве входных данных, и измененные mvCandList и numCurrCand в качестве выходных данных.
5. Когда numCurrCand меньше Max(MaxNumMergeCand, 2), следующее применяется до тех пор, пока numCurrCand не станет равным Max(MaxNumMergeCand, 2):
- mvCandList[numCurrCand][0] устанавливается равным 0.
- mvCandList[numCurrCand][1] устанавливается равным 0.
- numCurrCand увеличивается на 1.
6. Переменная mvIdx получается следующим образом:
mvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]: mvp_l0_flag[xCb][yCb] (8-916)
7. Сделаны следующие присвоения:
mvL[0]=mergeCandList[mvIdx][0] (8-917)
mvL[1]=mergeCandList[mvIdx][1] (8-918)
8. Если general_merge_flag[xCb][yCb] равно 0, процесс округления для векторов движения, как указано в пункте 8.5.2.14, вызывается с mvX, установленным равным mvL, rightShift установлен равным MvShift+2, и leftShift, установленным равным MvShift+2 в качестве входных данных, и округленный mvL в качестве выходных данных.
8.6.2.4 Процесс получения потенциально подходящих вариантов вектора движения на основе предыстории IBC
Для каждого потенциально подходящего варианта в smrHmvpIbcCandList[hMvpIdx] с индексом hMvpIdx=1..smrNumHmvpIbcCand следующие упорядоченные этапы повторяются до тех пор, пока numCurrCand не станет равным Max(MaxNumMergeCand, 2):
1. Переменная sameMotion получается следующим образом:
- Если все следующие условия выполняются для любого потенциально подходящего варианта вектора движения N, где N равно A1 или B1, sameMotion и isPrunedN устанавливаются равными ИСТИНА:
- hMvpIdx меньше или равен 1.
- Потенциально подходящий вариант smrHmvpIbcCandList[smrNumHmvpIbcCand-hMvpIdx] равен потенциально подходящему варианту вектора движения N.
- isPrunedN имеет значение ЛОЖЬ.
- В противном случае sameMotion устанавливается равным ЛОЖЬ.
2. Когда sameMotion имеет значение ЛОЖЬ, потенциально подходящий вариант smrHmvpIbcCandList[smrNumHmvpIbcCand- hMvpIdx] добавляется в список потенциально подходящих вариантов вектора движения следующим образом:
mvCandList[numCurrCand++]=
smrHmvpIbcCandList[smrNumHmvpIbcCand-hMvpIdx] (8-923)
Вариант 5 осуществления:
Убедитесь, что в списке потенциально подходящих вариантов вектора движения есть по меньшей мере 2 записи для режима IBC AMVP.
В этом решении построение списка потенциально подходящих вариантов векторов движения разделяется с помощью MaxNumMergeCand или MaxNumIbcMergeCand, и всегда создается список потенциально подходящих вариантов векторов движения с 6 записями. HMVP и нулевые потенциально подходящие варианты добавляются в список до тех пор, пока количество потенциально подходящих вариантов в списке не станет равным 6.
8.6.2.2 Процесс получения для предсказания вектора движения яркости IBC
Вектор движения яркости mvL получается с помощью следующих упорядоченных этапов:
1. Процесс получения потенциально подходящих вариантов пространственного вектора движения из соседних единичных блоков кодирования, как указано в пункте 8.6.2.3, вызывается с положением блока кодирования яркости (xCb, yCb), установленным равным (xSmr, ySmr), шириной блока кодирования яркости cbWidth и Высота блока кодирования яркости cbHeight установлена равной smrWidth и smrHeight в качестве входных данных, а выходными данными являются флаги доступности availableFlagA1, availableFlagB1 и векторы движения mvA1 и mvB1.
2. Список потенциально подходящих вариантов вектора движения, mvCandList, строится следующим образом:
3. Переменная numCurrCand устанавливается равной количеству потенциально подходящих вариантов объединения в mvCandList.
4. Когда numCurrCand меньше 6 и smrNumHmvpIbcCand больше 0, процесс получения потенциально подходящих вариантов вектора движения на основе предыстории IBC, как указано в 8.6.2.4, вызывается с помощью mvCandList, isInSmr устанавливается равным IsInSmr[xCb][yCb], и numCurrCand в качестве входных данных, и измененные mvCandList и numCurrCand в качестве выходных данных.
5. Когда numCurrCand меньше 6, следующее применяется до тех пор, пока numCurrCand не станет равным 6:
- mvCandList[numCurrCand][0] устанавливается равным 0.
- mvCandList[numCurrCand][1] устанавливается равным 0.
- numCurrCand увеличивается на 1.
6. Переменная mvIdx получается следующим образом:
mvIdx=general_merge_flag[xCb][yCb]?merge_idx[xCb][yCb]: mvp_l0_flag[xCb][yCb] (8-916)
7. Сделаны следующие присвоения:
mvL[0]=mergeCandList[mvIdx][0] (8-917)
mvL[1]=mergeCandList[mvIdx][1] (8-918)
8. Если general_merge_flag[xCb][yCb] равно 0, процесс округления для векторов движения, как указано в пункте 8.5.2.14, вызывается с mvX, установленным равным mvL, rightShift установленным равным MvShift+2, и leftShift, установленным равным MvShift+2 в качестве входных данных, и округленный mvL в качестве выходных данных.
8.6.2.4 Процесс получения потенциально подходящих вариантов вектора движения на основе предыстории IBC
Для каждого потенциально подходящего варианта в smrHmvpIbcCandList[hMvpIdx] с индексом hMvpIdx=1..smrNumHmvpIbcCand следующие упорядоченные этапы повторяются до тех пор, пока numCurrCand не станет равным 6:
1. Переменная sameMotion получается следующим образом:
- Если все следующие условия выполняются для любого потенциально подходящего варианта в вектор движения N, где N равно A1 или B1, sameMotion и isPrunedN устанавливаются равными ИСТИНА:
- hMvpIdx меньше или равен 1.
- Потенциально подходящий вариант smrHmvpIbcCandList[smrNumHmvpIbcCand-hMvpIdx] равен потенциально подходящему варианту вектора движения N.
- isPrunedN имеет значение ЛОЖЬ.
- В противном случае sameMotion устанавливается равным ЛОЖЬ.
2. Когда sameMotion имеет значение ЛОЖЬ, потенциально подходящий вариант smrHmvpIbcCandList[smrNumHmvpIbcCand- hMvpIdx] добавляется в список потенциально подходящих вариантов вектора движения следующим образом:
mvCandList[numCurrCand++]=
smrHmvpIbcCandList[smrNumHmvpIbcCand-hMvpIdx] (8-923)
Следует отметить, что варианты осуществления с 3 по 5 представляют собой разные описания одной и той же идеи и могут привести к одним и тем же результатам.
Вариант 6 осуществления:
Убедитесь, что MaxNumMergeCand или MaxNumIbcMergeCand больше 1.
six_minus_max_num_merge_cand указывает максимальное количество потенциально подходящих вариантов предсказания вектора движения объединения (MVP), поддерживаемых в сегменте, вычтенном из 6. Максимальное количество потенциально подходящих вариантов объединения, MaxNumMergeCand определяется следующим образом:
MaxNumMergeCand=6-six_minus_max_num_merge_cand (7-57)
Значение MaxNumMergeCand должно быть в диапазоне от 2 до 6 включительно.
Пример 1. Способ кодирования, реализуемый устройством декодирования, содержащий:
получение значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, причем текущий блок предсказан с использованием внутриблочного копирования (IBC) режима MVP;
установку значения индекса MVP равным нулю, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному;
получение вектора движения текущего блока согласно индексу MVP и списку потенциально подходящих вариантов;
получение дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
Пример 2. Способ по примеру 1, в котором значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа элемента синтаксиса на уровне сегмента или уровне группы клеток, уровне sps или уровне pps из битового потока.
Пример 3. Способ по п.1 или 2, в котором список потенциально подходящих вариантов получается согласно по меньшей мере одному соседнему блоку, смежному с текущим блоком, и списку предиктора вектора движения на основе предыстории (HMVP), при этом по меньшей мере один соседний блок предсказан с использованием режима IBC.
Пример 4. Способ кодирования, реализуемый устройством декодирования, содержащий:
получение значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, при этом текущий блок предсказан с использованием внутриблочного копирования (IBC) режима MVP;
установку вектора движения текущего блока в значение по умолчанию, когда значение индекса MVP для текущего блока равно одному, и значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному;
получение дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
Пример 5. Способ по примеру 4, в котором значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа элемента синтаксиса на уровне сегмента или уровне группы клеток, уровне sps или уровне pps из битового потока.
Пример 6. Способ по примеру 4 или 5, в котором значение по умолчанию равно нулю.
Пример 7. Способ кодирования, реализуемый устройством декодирования, содержащий:
получение значения максимального количества потенциально подходящих вариантов предсказания вектора движения объединения (MVP) для текущего блока, причем текущий блок предсказан с использованием режима MVP внутриблочного копирования (IBC);
когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному, получение списка потенциально подходящих вариантов для текущего блока согласно по меньшей мере одному соседнему блоку, смежному с текущим блоком, и списку предикторов вектора движения на основе предыстории (HMVP), при этом список потенциально подходящих вариантов для текущего блока содержит два потенциально подходящих варианта, и упомянутый по меньшей мере один соседний блок предсказан с использованием режима IBC;
получение вектора движения текущего блока согласно индексу MVP для текущего блока и списку потенциально подходящих вариантов;
получение дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
Пример 8. Способ по примеру 7, в котором значение максимального количества потенциально подходящих вариантов MVP для текущего блока получается посредством анализа элемента синтаксиса на уровне сегмента или уровне группы клеток или уровне sps или уровне pps из битового потока.
Пример 9. Декодер (30), содержащий схему обработки для выполнения способа по любому из примеров с 1 по 8.
Пример 10. Компьютерный программный продукт, содержащий программный код для выполнения способа по любому из примеров с 1 по 8.
Пример 11. Декодер, содержащий:
один или более процессоров; и
долговременный машиночитаемый носитель, соединенный с процессорами и хранящий программы для исполнения процессорами, причем программы, при их исполнении процессорами, конфигурируют декодер для выполнения способа по любому из пп.1-8.
Ниже приводится объяснение применений способа кодирования, а также способа декодирования, как показано в вышеупомянутых вариантах осуществления, и системы, использующей их.
Фиг.8 - это блок-схема, показывающая систему 3100 поставки контента для реализации услуги распространения контента. Эта система 3100 предоставления контента включает в себя устройство 3102 захвата, терминальное устройство 3106 и, в необязательном порядке, включает в себя дисплей 3126. Устройство 3102 захвата обменивается данными с терминальным устройством 3106 по линии 3104 связи. Линия связи может включать в себя канал 13 связи, описанный выше. Линия 3104 связи включает в себя, помимо прочего, WIFI, Ethernet, кабель, беспроводную связь (3G/4G/5G), USB или любое их сочетание и т.п.
Устройство 3102 захвата генерирует данные и может кодировать данные способом кодирования, как показано в приведенных выше вариантах осуществления. В качестве альтернативы устройство 3102 захвата может распространять данные на сервер потоковой передачи (не показан на фигурах), и сервер кодирует данные и передает кодированные данные на терминальное устройство 3106. Устройство 3102 захвата включает в себя, помимо прочего, камеру, смартфон или планшет, компьютер или портативный компьютер, систему видеоконференцсвязи, PDA, установленное на транспортном средстве устройство или сочетание любого из них или тому подобное. Например, устройство 3102 захвата может включать в себя устройство-источник 12, как описано выше. Когда данные включают в себя видео, видеокодер 20, включенный в устройство 3102 захвата, может фактически выполнять обработку кодирования видео. Когда данные включают в себя звук (то есть голос), аудиокодер, включенный в устройство 3102 захвата, может фактически выполнять обработку кодирования звука. Для некоторых практических сценариев устройство 3102 захвата распределяет кодированные видео- и аудиоданные, мультиплексируя их вместе. Для других практических сценариев, например, в системе видеоконференцсвязи, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. Устройство 3102 захвата отдельно распределяет кодированные аудиоданные и кодированные видеоданные на терминальное устройство 3106.
В системе 3100 поставки контента терминальное устройство 310 принимает и воспроизводит кодированные данные. Терминальное устройство 3106 может быть устройством с возможностью приема и восстановления данных, таким как смартфон или планшет 3108, компьютер или ноутбук 3110, сетевой видеорегистратор (NVR)/цифровой видеорегистратор (DVR) 3112, телевизор 3114, телеприставка (STB) 3116, система 3118 видеоконференцсвязи, система 3120 видеонаблюдения, персональный цифровой помощник (PDA) 3122, установленное в транспортном средстве устройство 3124, или их сочетание, или подобное, способное декодировать вышеупомянутые кодированные данные. Например, терминальное устройство 3106 может включать в себя устройство-получатель 14, как описано выше. Когда кодированные данные включают в себя видео, видеодекодеру 30, включенному в терминальное устройство, отдается приоритет для выполнения декодирования видео. Когда кодированные данные включают в себя звук, аудиодекодер, включенный в терминальное устройство, получает приоритет для выполнения обработки декодирования звука.
Для терминального устройства с дисплеем, например смартфона или планшета 3108, компьютера или ноутбука 3110, сетевого видеорегистратора (NVR)/цифрового видеорегистратора (DVR) 3112, телевизора 3114, персонального цифрового помощника (PDA) 3122 или установленное в транспортном средстве устройство 3124, терминальное устройство может передавать декодированные данные на свой дисплей. Для терминального устройства, не оборудованного дисплеем, например STB 3116, системы 3118 видеоконференцсвязи или системы 3120 видеонаблюдения, в нем устанавливается контакт с внешним дисплеем 3126 для приема и отображения декодированных данных.
Когда каждое устройство в этой системе выполняет кодирование или декодирование, может использоваться устройство кодирования снимка или устройство декодирования снимка, как показано в вышеупомянутых вариантах осуществления.
Фиг.9 - схема, показывающая структуру примера терминального устройства 3106. После того, как терминальное устройство 3106 принимает поток от устройства 3102 захвата, модуль 3202 обработки протокола анализирует протокол передачи потока. Протокол включает в себя, помимо прочего, протокол потоковой передачи в реальном времени (RTSP), протокол передачи гипертекста (HTTP), протокол потоковой передачи в реальном времени HTTP (HLS), MPEG-DASH, транспортный протокол в реальном времени (RTP), протокол обмена сообщениями в реальном времени (RTMP), или любое их сочетание или тому подобное.
После того, как модуль 3202 обработки протокола обработает поток, создается файл потока. Файл выводится в модуль 3204 демультиплексирования. Модуль 3204 демультиплексирования может разделять мультиплексированные данные на кодированные аудиоданные и кодированные видеоданные. Как описано выше, для некоторых практических сценариев, например в системе видеоконференцсвязи, кодированные аудиоданные и кодированные видеоданные не мультиплексируются. В этой ситуации кодированные данные передаются на видеодекодер 3206 и аудиодекодер 3208 без использования модуля 3204 демультиплексирования.
Посредством обработки демультиплексирования генерируются элементарный поток (ES) видео, ES аудио и, в необязательном порядке, субтитры. Видеодекодер 3206, который включает в себя видеодекодер 30, как объяснено в вышеупомянутых вариантах осуществления, декодирует видео ES с помощью способа декодирования, как показано в вышеупомянутых вариантах осуществления, для генерации видеокадра и подает эти данные в модуль 3212 синхронизации. Аудиодекодер 3208 декодирует аудио ES для генерации аудиокадра и подает эти данные в модуль 3212 синхронизации. В качестве альтернативы видеокадр может сохраняться в буфере (не показан на Фиг.9) перед подачей его в модуль 3212 синхронизации. Точно так же аудиокадр может сохраняться в буфере (не показан на Фиг.9) перед подачей его в модуль 3212 синхронизации.
Модуль 3212 синхронизации синхронизирует видеокадр и аудиокадр и подает видео/аудио на видео/аудио дисплей 3214. Например, модуль 3212 синхронизации синхронизирует представление видео и аудиоинформации. Информация может закодироваться в синтаксисе с использованием меток времени, касающихся представления кодированных аудио- и визуальных данных, и меток времени, касающихся доставки самого потока данных.
Если субтитры включены в поток, декодер 3210 субтитров декодирует субтитры и синхронизирует их с видеокадром и звуковым кадром и передает видео/аудио/субтитры на дисплей 3216 видео/аудио/субтитров.
Настоящее изобретение не ограничивается вышеупомянутой системой, и либо устройство кодирования снимка, либо устройство декодирования снимка в вышеупомянутых вариантах осуществления может быть включено в другую систему, например, автомобильную систему.
Математические операторы
Математические операторы, используемые в настоящей заявке, аналогичны тем, которые используются в языке программирования C. Однако результаты операций целочисленного деления и арифметического сдвига определяются более точно, а также определяются дополнительные операции, такие как возведение в степень и деление с действительным знаком. Правила нумерации и подсчета обычно начинаются с 0, например, «первый» эквивалентен 0-му, «второй» эквивалентен 1-му и т.д.
Арифметические операторы
Следующие арифметические операторы определены следующим образом:
+ Сложение
Вычитание (как оператор с двумя аргументами) или отрицание (как унарный префиксный оператор)
* Умножение, в том числе матричное умножение
xy Возведение в степень. Определяет x в степени y. В других контекстах такое обозначение используется в качестве надстрочного индекса, которое не следует интерпретировать в качестве возведения в степень.
/ Целочисленное деление с усечением результата в сторону нуля. Например, 7/4 и -7/-4 усекаются до 1, а -7/4 и 7 /-4 усекаются до -1.
÷ Используется для обозначения деления в математических уравнениях, где не предполагается усечение или округление.
Используется для обозначения деления в математических уравнениях, где не предполагается усечение или округление.
Суммирование f(i), где i принимает все целые значения от x до y включительно.
x%y Операция по модулю. Остаток от деления x на y, определена только для целых чисел x и y, где x >= 0 и y > 0.
Логические операторы
Следующие логические операторы определены следующим образом:
x && y Булево логическое "и" для x и y
х || y Булево логическое "или" для x и y
! Булево логическое «не»
x?y:z Если x равен ИСТИНЕ или не равен 0, вычисляется значение y; в противном случае вычисляется значение z.
Операторы отношения
Следующие операторы отношения определены следующим образом:
> Больше чем
>= Больше или равно
< Менее чем
<= Меньше или равно
== Равно
!= Не равно
Когда оператор отношения применяется к элементу или переменной синтаксиса, которой присвоено значение «na» (не применимо), значение «na» обрабатывается как отдельное значение для элемента или переменной синтаксиса. Значение «na» не считается равным любому другому значению.
Побитовые операторы
Следующие побитовые операторы определены следующим образом:
& Побитовое "и". При работе с целочисленными аргументами оперирует дополнительным до двух представлением целочисленного значения. При работе с двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется посредством добавления более значимых битов, равных 0.
| Побитовое "или". При работе с целочисленными аргументами оперирует дополнительным до двух представлением целочисленного значения. При работе с двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется посредством добавления более значимых битов, равных 0.
^ Побитовое «исключающее ИЛИ». При работе с целочисленными аргументами оперирует дополнительным до двух представлением целочисленного значения. При работе с двоичным аргументом, который содержит меньше битов, чем другой аргумент, более короткий аргумент расширяется посредством добавления более значимых битов, равных 0.
x >> y Арифметический сдвиг вправо целочисленного представления x с двоичным дополнением на y двоичных цифр. Эта функция определена только для неотрицательных целых значений y. Биты, сдвинутые в старшие значащие биты (MSB) в результате сдвига вправо, имеют значение, равное MSB x до операции сдвига.
x << y Арифметический сдвиг влево целочисленного представления x с дополнением до двух на y двоичных цифр. Эта функция определена только для неотрицательных целых значений y. Биты, сдвинутые в младшие значащие биты (LSB) в результате сдвига влево, имеют значение, равное 0.
Операторы присваивания
Следующие арифметические операторы определены следующим образом:
= Оператор присваивания
++ Приращение, т.е. x++ эквивалентно x=x+1; при использовании в индексе массива оценивается в значение переменной до операции приращения.
−− Уменьшение, т.е. x−− эквивалентно x=x-1; при использовании в индексе массива оценивает значение переменной до операции уменьшения.
+= Приращение на указанную величину, т.е. x+=3 эквивалентно x=x+3, а x+=(−3) эквивалентно x=x+(−3).
−= Уменьшение на указанную величину, т.е. x−=3 эквивалентно x=x−3, а x−=(−3) эквивалентно x=x−(−3).
Обозначение диапазона
Следующее обозначение используется для указания диапазона значений:
x=y..z x принимает целочисленные значения от y до z, включительно, где x, y и z являются целыми числами, и z больше y.
Математические функции
Определены следующие математические функции:
Abs(x)=
Asin(x) тригонометрическая функция арксинуса, работающая с аргументом x, который находится в диапазоне от -1,0 до 1,0 включительно, с выходным значением в диапазоне от -π÷2 до π÷2 включительно в единицах счисления радиан.
Atan(x) тригонометрическая функция арктангенса, работающая с аргументом x, с выходным значением в диапазоне от -π÷2 до π÷2 включительно в единицах счисления радиан.
Ceil(x) наименьшее целое число, большее или равное x.
Clip1Y(x)=Clip3(0, (1 << BitDepthY) − 1, x)
Clip1C(x)=Clip3(0, (1 << BitDepthC) − 1, x)
Cos(x) тригонометрическая функция косинуса, работающая с аргументом x в единицах счисления радиан.
Floor(x) наибольшее целое количество, меньшее или равное x.
Ln(x) натуральный логарифм x (логарифм по основанию e, где e - постоянная основания натурального логарифма 2,781 281 828...).
Log2(x) логарифм x по основанию 2.
Log10(x) логарифм x по основанию 10.
Min(x, y)=
Max(x, y)=
Round(x)=Sign(x)*Floor(Abs(x)+)
Sign(x)=
Sin(x) тригонометрическая функция синуса, работающая с аргументом x в единицах счисления радиан.
Sqrt(x)=
Swap(x, y)=(y, x)
Tan(x) тригонометрическая функция тангенса, работающая с аргументом x в единицах счисления радиан.
Порядок приоритетности операций
Когда порядок приоритетности в выражении явно не указан с помощью круглых скобок, применяются следующие правила:
- Операции с более высоким приоритетом оцениваются перед любой операцией с более низким приоритетом.
- Операции с одинаковым приоритетом оцениваются последовательно слева направо.
В таблице ниже указан приоритет операций от наивысшего к низшему; более высокая позиция в таблице указывает на более высокий приоритет.
Для тех операторов, которые также используются в языке программирования C, порядок приоритетности, используемый в этом описании, является таким же, что и в языке программирования C.
Таблица: Приоритетность операций от наивысшего (в верхней части таблицы) до низшего (в нижней части таблицы)
операции (с операндами x, y и z)
"x++", "x− −"
"!x", "−x" (как унарный префиксный оператор)
xy
"x*y", "x/y", "x ÷ y", "x%y"
"x+y", "x − y" (как оператор с двумя аргументами), " "
"x << y", "x>>y"
"x < y", "x <= y", "x > y", "x >= y"
"x== y", "x != y"
"x&y"
"x | y"
"x && y"
"x | | y"
"x ? y : z"
"x..y"
"x=y", "x += y", "x −= y"
Текстовое описание логических операций
В тексте определение логических операций, которое математически бы описывалось в следующей форме:
если(условие 0)
утверждение 0
иначе если(условие 1)
утверждение 1
...
иначе /* информативный комментарий по оставшемуся условию */
утверждение n
может быть описано следующим образом:
... как указано ниже / ... применяется следующее:
- Если условие 0, утверждение 0
- Иначе, Если условие 1, утверждение 1
- ...
-- Иначе (информативный комментарий по оставшемуся условию), утверждение n.
Каждое утверждение «Если ... Иначе, Если ... Иначе, ...» в тексте вводится словами «... как указано ниже» или «...применяется следующее», за которым сразу следует «Если ...». Последним условием «Если ... Иначе Если ... Иначе, ...» всегда является «Иначе, ...». Чередование определений «Если ... Иначе Если ... Иначе, ...» может быть идентифицировано посредством сопоставления «... как указано ниже» или «... применяется следующее» с завершающим «Иначе, ...».
В тексте утверждение логических операций, которое математически бы описывалось в следующей форме:
если(условие 0a && условие 0b)
утверждение 0
иначе если(условие 1a | | условие 1b)
утверждение 1
...
иначе
утверждение n
может быть описано следующим образом:
... как указано ниже / ... применяется следующее:
-- Если все из следующих условий истинны, утверждение 0:
- условие 0a
- условие 0b
- Иначе, если истинными являются одно или более из следующих условий, утверждение 1:
- условие 1a
- условие 1b
- ...
- Иначе, утверждение n
В тексте утверждение логических операций, которое математически бы описывалось в следующей форме:
если(условие 0)
утверждение 0
если(условие 1)
утверждение 1
может быть описано следующим образом:
Когда условие 0, утверждение 0
Когда условие 1, утверждение 1.
Хотя варианты осуществления данного изобретения были в основном описаны на основе видеокодирования, следует отметить, что варианты осуществления системы 10 кодирования, кодера 20 и декодера 30 (и, соответственно, системы 10), а также другие варианты осуществления, описанные в данном документе, также могут быть выполнены с возможностью обработки или кодирования неподвижного снимка (изображения), т.е. обработки или кодирования отдельного снимка независимо от любого предшествующего или последующего снимка, как при видеокодировании. В общем, только модули 244 интер-предсказания (кодер) и 344 (декодер) могут не быть доступны в случае, если кодирование для обработки снимка ограничено одним снимком 17. Все другие функциональные возможности (также именуемые инструментами или технологиями) видеокодера 20 и видеодекодера 30 могут в равной степени использоваться для обработки неподвижных снимков, например вычисления 204/304 остатка, преобразования 206, квантования 208, обратного квантования 210/310, (обратного) преобразования 212/312, разделения 262/362, интра-предсказания 254/354 и/или контурной фильтрации 220, 320 и энтропийного кодирования 270 и энтропийного декодирования 304.
Варианты осуществления, например кодера 20 и декодера 30, а также описанные в данном документе функции, например применительно к кодеру 20 и декодеру 30 могут быть реализованы аппаратным обеспечением, программным обеспечением, встроенным программным обеспечением или любым их сочетанием. Если реализованы в программном обеспечении, функции могут храниться на машиночитаемом носителе или передаваться по среде связи в виде одной или более инструкций или кода выполняться аппаратным блоком обработки. Машиночитаемый носитель может включать в себя машиночитаемый носитель данных, который соответствует материальному носителю, например носителю данных, или среде передачи, включая в себя любой носитель, который облегчает передачу компьютерной программы из одного места в другое, например, в соответствии с протоколом связи. Таким образом, машиночитаемые носители обычно могут соответствовать (1) материальным машиночитаемым носителям данных, которые являются долговременными, или (2) средам передачи, таким как сигнал или несущая волна. Носители данных могут быть любыми доступными носителями, к которым может получить доступ один или более компьютеров или один или более процессоров для извлечения инструкций, кода и/или структур данных для реализации методик, описанных в этом раскрытии. Компьютерный программный продукт может включать в себя машиночитаемый носитель.
В качестве примера, но не ограничений, такие машиночитаемые носители данных могут содержать RAM, ROM, EEPROM, CD-ROM или другое запоминающее устройство на оптическом диске, запоминающее устройство на магнитном диске или другие магнитные запоминающие устройства, флеш-память или любой другой носитель, который может использоваться для хранения желаемого программного кода в форме инструкций или структур данных и может быть доступен для компьютера. Кроме того, любое соединение правильно называть машиночитаемым носителем. Например, если инструкции передаются с веб-сайта, сервера или другого удаленного источника с использованием коаксиального кабеля, оптоволоконного кабеля, витой пары, цифровой абонентской линии (DSL) или беспроводных технологий, таких как инфракрасный порт, радио и микроволновая печь, тогда коаксиальный кабель, оптоволоконный кабель, витая пара, DSL или беспроводные технологии, такие как инфракрасный порт, радио и микроволновая связь, включены в определение носителя. Однако следует понимать, что машиночитаемые носители данных и носители данных не включают в себя соединения, несущие волны, сигналы или другие временные носители, а вместо этого направлены на долговременные материальные носители данных. Диск и диск, используемые здесь, включают компакт-диск (CD), лазерный диск, оптический диск, цифровой универсальный диск (DVD), дискету и диск Blu-ray, где диски обычно воспроизводят данные магнитным способом, а диски воспроизводят данные оптически с помощью лазеров. Объединения вышеперечисленного также должны быть включены в объем машиночитаемых носителей.
Инструкции могут выполняться одним или более процессорами, такими как один или более процессоров цифровых сигналов (DSP), микропроцессоры общего назначения, специализированные интегральные схемы (ASIC), программируемые логические матрицы (FPGA) или другие эквивалентные интегральные или дискретные логические схемы. Соответственно, термин «процессор», используемый здесь, может относиться к любой из вышеупомянутой структуры или любой другой структуре, подходящей для реализации описанных здесь методик. Кроме того, в некоторых аспектах описанные здесь функциональные возможности могут быть предоставлены в рамках выделенных аппаратных и/или программных модулей, сконфигурированных для кодирования и декодирования или включенных в объединенный кодек. Кроме того, методики могут быть полностью реализованы в одной или более схемах или логических элементах.
Методики этого раскрытия могут быть реализованы в большом количестве устройств или устройств, включая беспроводной телефон, интегральную схему (IC) или набор IC (например, набор микросхем). В этом раскрытии описаны различные компоненты, модули или блоки, чтобы подчеркнуть функциональные аспекты устройств, сконфигурированных для выполнения раскрытых технологий, но не обязательно требующих реализации различными аппаратными блоками. Скорее, как описано выше, различные блоки могут быть объединены в аппаратный блок кодека или предоставлены набором взаимодействующих аппаратных блоков, включая один или более процессоров, как описано выше, в сочетании с подходящим программным обеспечением и/или встроенным программным обеспечением.

Claims (15)

1. Способ кодирования, реализуемый устройством декодирования, содержащий этапы, на которых:
получают значение максимального количества потенциально подходящих вариантов предсказания вектора движения (MVP) на объединение для текущего блока, при этом текущий блок предсказан с использованием режима внутриблочного копирования (IBC);
устанавливают значение mvp_10_flag[x0][y0] равным нулю, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока равно одному, при этом mvp_10_flag[x0][y0] указывает индекс предиктора вектора движения для списка 0, где x0, y0 указывают местоположение (x0, y0) верхнего левого дискретного отсчета яркости текущего блока относительно верхнего левого дискретного отсчета яркости снимка, причем данное значение mvp_10_flag[x0][y0] не получено посредством анализа из битового потока;
получают, посредством анализа, значение mvp_10_flag[x0][y0] из битового потока, когда значение максимального количества потенциально подходящих вариантов MVP для текущего блока больше одного;
получают вектор движения текущего блока согласно mvp_10_flag[x0][y0] и списку потенциально подходящих вариантов;
получают значения дискретных отсчетов предсказания текущего блока согласно вектору движения текущего блока.
2. Способ по п. 1, в котором значение mvp_10_flag[x0][y0] получают посредством анализа с уровня единичного блока кодирования.
3. Способ по п. 1 или 2, в котором значение максимального количества потенциально подходящих вариантов MVP для текущего блока получено посредством анализа уровня набора параметров последовательности (sps) из битового потока.
4. Способ по п. 1 или 2, в котором значение максимального количества потенциально подходящих вариантов MVP для текущего блока получено посредством анализа элемента синтаксиса на уровне сегмента, уровне группы клеток или уровне pps из битового потока.
5. Способ по любому из пп. 1-4, в котором список потенциально подходящих вариантов получен согласно по меньшей мере одному соседнему блоку, смежному с текущим блоком, и списку предикторов вектора движения на основе предыстории (HMVP), при этом упомянутый по меньшей мере один соседний блок предсказан с использованием режима IBC.
6. Декодер (30), содержащий схему обработки для выполнения способа по любому одному из пп. 1-5.
7. Машиночитаемый носитель, содержащий программный код для выполнения способа по любому одному из пп. 1-5.
8. Декодер, содержащий:
один или более процессоров; и
долговременный машиночитаемый носитель, соединенный с процессорами и хранящий программы для исполнения процессорами, причем программы, при их исполнении процессорами, конфигурируют декодер для выполнения способа по любому одному из пп. 1-5.
RU2021133871A 2019-05-24 2020-05-20 Кодер, декодер и соответствующие способы использования для списка объединения ibc RU2817030C2 (ru)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CNPCT/CN2019/088335 2019-05-24

Publications (2)

Publication Number Publication Date
RU2021133871A RU2021133871A (ru) 2023-06-26
RU2817030C2 true RU2817030C2 (ru) 2024-04-09

Family

ID=

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20130336405A1 (en) * 2012-06-15 2013-12-19 Qualcomm Incorporated Disparity vector selection in video coding
RU2614542C2 (ru) * 2011-05-31 2017-03-28 Сан Пэтент Траст Способ кодирования видео, устройство кодирования видео, способ декодирования видео, устройство декодирования видео и устройство кодирования/декодирования видео
EP2728882B1 (en) * 2011-06-30 2017-11-22 JVC KENWOOD Corporation Image decoding device, image decoding method, and image decoding program
US9918105B2 (en) * 2014-10-07 2018-03-13 Qualcomm Incorporated Intra BC and inter unification
US20180213227A1 (en) * 2009-08-07 2018-07-26 Electronics And Telecommunications Research Institute Motion picture encoding apparatus and method thereof
WO2019010123A1 (en) * 2017-07-05 2019-01-10 Qualcomm Incorporated MODEL-BASED MATCHING BASED ON PARTIAL RECONSTRUCTION FOR A MOTION VECTOR DIVERSION
CN109644272A (zh) * 2016-09-06 2019-04-16 高通股份有限公司 用于建构候选列表的几何型优先级

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180213227A1 (en) * 2009-08-07 2018-07-26 Electronics And Telecommunications Research Institute Motion picture encoding apparatus and method thereof
RU2614542C2 (ru) * 2011-05-31 2017-03-28 Сан Пэтент Траст Способ кодирования видео, устройство кодирования видео, способ декодирования видео, устройство декодирования видео и устройство кодирования/декодирования видео
EP2728882B1 (en) * 2011-06-30 2017-11-22 JVC KENWOOD Corporation Image decoding device, image decoding method, and image decoding program
US20130336405A1 (en) * 2012-06-15 2013-12-19 Qualcomm Incorporated Disparity vector selection in video coding
US9918105B2 (en) * 2014-10-07 2018-03-13 Qualcomm Incorporated Intra BC and inter unification
CN109644272A (zh) * 2016-09-06 2019-04-16 高通股份有限公司 用于建构候选列表的几何型优先级
WO2019010123A1 (en) * 2017-07-05 2019-01-10 Qualcomm Incorporated MODEL-BASED MATCHING BASED ON PARTIAL RECONSTRUCTION FOR A MOTION VECTOR DIVERSION

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
BROSS B. et al., "Versatile Video Coding (Draft 5)", JVET-N1001-v6, 14th Meeting, Geneva, Mar. 2019. Yao-Jen Chang et al, "Non-CE4: On MMVD signaling", JVET-N0448-v2, 14th Meeting, Geneva, Mar. 2019. *

Similar Documents

Publication Publication Date Title
CN112913250B (zh) 编码器、解码器及对任意ctu尺寸使用ibc搜索范围优化的对应方法
US11909959B2 (en) Encoder, a decoder and corresponding methods for merge mode
CN113660497B (zh) 编码器、解码器和使用ibc合并列表的对应方法
JP2022541700A (ja) イントラ予測モードに関連するエンコーダ、デコーダ、および対応する方法
CN113473134A (zh) 子块融合候选的单独融合列表和视频编码的帧内和帧间预测技术协调
JP2024023666A (ja) Ibcマージ・リストのために使用する符号化器、復号器、及び対応する方法
RU2817030C2 (ru) Кодер, декодер и соответствующие способы использования для списка объединения ibc
RU2815734C1 (ru) Способ и устройство для хранения информации о движении
RU2797574C2 (ru) Кодер, декодер и соответствующие способы, использующие список на слияние внутрикадрового копирования блоков
US11985305B2 (en) Encoder, a decoder and corresponding methods using for IBC merge list
RU2816918C2 (ru) Кодер, декодер и соответствующие способы выполнения устранения блочности цветности для блоков, использующих кодирование объединенной цветности
US20240137499A1 (en) Encoder, a decoder and corresponding methods for merge mode
RU2793825C1 (ru) Способ и устройство для хранения информации о движении
RU2814812C2 (ru) Выведение веса выборки цветности для геометрического режима разделения