NO329837B1 - Fremgangsmate for prosessor-effektivt deblokkingsfiltrering - Google Patents

Fremgangsmate for prosessor-effektivt deblokkingsfiltrering Download PDF

Info

Publication number
NO329837B1
NO329837B1 NO20083085A NO20083085A NO329837B1 NO 329837 B1 NO329837 B1 NO 329837B1 NO 20083085 A NO20083085 A NO 20083085A NO 20083085 A NO20083085 A NO 20083085A NO 329837 B1 NO329837 B1 NO 329837B1
Authority
NO
Norway
Prior art keywords
data
macroblock
group
simd register
byte
Prior art date
Application number
NO20083085A
Other languages
English (en)
Other versions
NO20083085L (no
Inventor
Lars Petter Endresen
Original Assignee
Tandberg Telecom As
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 Tandberg Telecom As filed Critical Tandberg Telecom As
Priority to NO20083085A priority Critical patent/NO329837B1/no
Priority to US12/499,601 priority patent/US8503537B2/en
Priority to PCT/NO2009/000256 priority patent/WO2010005316A1/en
Priority to EP09794693A priority patent/EP2311265A4/en
Priority to CN200980126897.XA priority patent/CN102090064B/zh
Publication of NO20083085L publication Critical patent/NO20083085L/no
Publication of NO329837B1 publication Critical patent/NO329837B1/no

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/436Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation using parallelised computational arrangements
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/60Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding
    • H04N19/61Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using transform coding in combination with predictive coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/85Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression
    • H04N19/86Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using pre-processing or post-processing specially adapted for video compression involving reduction of coding artifacts, e.g. of blockiness

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

Den foreliggende oppfinnelsen omhandler dekoding av blokkvise kodede videobilder i generelle prosessorer. Den relaterer seg til implementering av deblokkeringsfilteringsalgoritmer eller lignende i et SIMD-miljø, spesielt for prosessorer med 128-bit vektorregistre. SIMD-konseptet er en metode for å forbedre ytelsen i applikasjoner hvor høyt repeterbare operasjoner må utføres. Strengt sagt er SIMD en teknikk for å utføre samme operasjon på multiple deler av data samtidig. Den foreliggende oppfinnelsen utnytter parallellarkitekturen til SIMD og det faktum at registerstørrelsen passer perfekt til makroblokkstørrelsen fremlagt i H.264- og MPEG-4- standardene.

Description

Introduksjon
Den foreliggende oppfinnelsen omhandler implementering av dekoding av blokkvise kodede videobilder.
Bakgrunn for oppfinnelsen
Transmisjon av bevegelige bilder i sanntid blir utført i flere ulike applikasjoner slik som f.eks. videokonferanser, nettmøter, TV-kringkasting og videotelefoni.
Imidlertid krever representering av bevegelige bilder stor informasjon siden digital video typisk blir beskrevet ved å representere hvert piksel i et bilde med 8 bits (1 byte). Slike ukomprimerte videodata resulterer i store bitvolumer, og kan ikke bli overført over konvensjonelle kommunikasjonsnettverk og transmisjonslinjer i sanntid på grunn av begrenset båndbredde.
Dermed krever muliggjøring av sanntidsvideotransmisjon en stor utstrekning av datakompresjon. Datakompresjon kan imidlertid kompromittere billedkvaliteten. Derfor har store ressurser blitt brukt på å utvikle kompresjonsteknikker som tillater sanntidstransmisjon av høy videokvalitet over båndbreddebegrensede dataforbindelser.
Et antall algoritmer er generelt vanlig mellom multiple videodekodings/ kodingsstandarder, slik som MPEG-<*>, H.26<*>, og SMPTE-VC-1. Deblokkeringsfiltrering og bevegelsesestimering/kompensering er to typiske eksempler på generelle algoritmer som er nødvendig for videokoding.
Koding blir utført på blokkvise deler av videobildet. En makroblokk omfatter flere underblokker for luminans (luma) så vel som for krominans (kroma).
Blokkbasert koding/dekoding har vist seg å være svært effektivt. Imidlertid er én av ulempene at det rekonstruerte bildet kan innbefatte visuelle artefakter som korresponderer til blokkene brukt for prediksjon og residuell signalkoding. Dette fenomenet blir vanligvis referert til som blokking eller blokkeartefakter.
En måte å redusere blokkingsartefakter på er å integrere et deblokkeringsfilter i kodeløkken, som er den foretrukne løsningen i spesifikasjonen ITU-T Ree. H.264 ISO/IEC 14496-10 AVC. Denne kodingsintegrerte løsningen er forholdsvis prosessorkrevende, dvs. den krever en testprosedyre for hver piksellinje som krysser blokkanter til å bli glattet.
Selv om deblokkeringsfilteret per se ikke er komplekst, trenger under filtreringsprosessen nesten hvert piksel til en rekonstruert billedramme å bli aksessert av filtreringsalgoritmen. Deblokkeringsoperasjonen er derfor forholdsvis prosessorkrevende.
US-2008/0123750A1 beskriver en prosess og apparatur for implementering og paralellisering i deblokkingsfilter brukt i en H.264 kodek.
Prosessen blir utført på en parallell arkitektur omfattende et flertall av grupper som hver omfatter åtte klustere, hvor hvert kluster er en separate prosessor som er I stand til å utføre vektoroperasjoner i SIMD MIMD eller en mode på 4x4 matrise data. Alle åtte klustere til en gruppe blir brukt for å samtidig deblokke bade luma og kroma vertikal- og horisontal kanter mellom 4x4 blokker med piksler i en makroblokk med et totalt antall på åtte iterasjoner, ved å utnytte den beste måten med databinding mellom to kanter.
US-2007/0071106A1 beskriver to par med deblokkeringsinstruksjoner for å utføre deblokkeringsfiltrering på en horisontal rekke med piksler 1 henhold til H.264 og VC1 video kodek algoritmer. Den første instruksjonen til hvert par har tre 128-bit operander omfattende 16-bit komponentene til en horisontal linje med 8 piksler som krysser en vertikal blokkant mellom pikslene 4 og 5 i et YUV bilde, en serie med filterterskelparametere, og en 128-bit måloperand for å lagre utgangsverdien til den første instruksjonen. Den andre instruksjonen til hvert par aksepterer de samme 16-bit komponentene som sin første inngangsverdi, utgangsverdien til den første instruksjonen som sin andre inngangsverdi og en måloperand for å lagre en utgangsverdi til den andre instruksjonen som sin tredje inngangsverdi. Instruksjons-parene er tiltenkt brukt for bruk med H.264 eller VC1 videokodeker.
Videokoding i HD-formater øker kravet for minne og dataprosessering, og krever effektiv og høy båndbreddeminneorganiseringer koblet med beregningsintensive muligheter. På grunn av disse multiple kravene, må en fleksibel parallell prosesseringstilnærmelse bli funnet for å møte kravene på en kostnadseffektiv måte.
For å effektiv støtte deblokkeringsfiltreringsalgoritmer og andre komplekse programmerbare funksjoner, som kan variere i krav langs multiple standarder, vil en prosessor i seg selv kreve signifikant parallellisme og svært høye klokkerater for å møte kravene. En prosessor av denne kapabiliteten vil det være vanskelig å utvikle på en kostnadseffektiv måte for kommersielle produkter.
På mange måter er deblokkeringsfiltrering én av hovedflaskehalsene i både kodings-og dekodingsprosessen, spesielt for høyoppløselige bilder som er tilfelle for HD.
Ettersom filtreringen opptrer på en per makroblokkbasis, med horisontal filtrering og vertikale kanter utført først, og etterfulgt av vertikal filtrering (av horisontalkantene), må både retningen til filtrering på hver makroblokk bli utført før bevegelse til neste makroblokk.
Videokodeker blir typisk installert på skreddersydd hardware i videoendepunkter med DSP-baserte prosessorer. Imidlertid har det nylig blitt mer vanlig å installere videokodeker i generelt formålsprosessorer med en SIMD-prosessoromgivelse. Ved implementering i typiske generelt formålprosessorer, må hver makroblokk typisk bli lastet fra RAM til registrene i CPU to ganger, én gang for vertikaldeblokkerings-filtrering, og én gang for horisontal deblokkeringsfiltrering, og muligens transportering av hver makroblokk i flere inneffektive og små trinn. Dette er spesielt krevende beregningsmessig siden det involverer å laste fjerntliggende minnereferanser.
Sammendrag av oppfinnelsen
Den foreliggende oppfinnelsen omhandler en metode, et system og et datamaskinprogram som fremsatt i de vedlagte kravene.
Den foreliggende oppfinnelsen fremviser en metode for å utføre en deblokkeringsfiltreringsoperasjon på grensenabopiksler mellom makroblokker i en videokoding eller dekodingsprosess eksekvert i en 16-bytes SIMD-registerprosessoromgivelse, omfattende trinnet med å laste et første sett av data som utgjør en luminansmakroblokk eller to krominansmakroblokker fra en RAM til en gruppe med 16 16-bytes horisontal SIMD-registervariabler med å sette inn hver rad med blokker i de respektive registervariablene, å eksekvere en transponeringsinstruksjon på første nevnte sett av data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable som lager et andre sett av data som blir lagret i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable, å utføre en vertikal deblokkeringsfiltreringsoperasjon på nevnte andre sett av data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable og et korresponderende sett grensepikseldata til en første naboliggende makroblokk, å eksekvere en transponeringsinstruksjon på nevnte andre sett av data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable og lage tredje sett av data som blir lagret i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable, å utføre en vertikal deblokkeringsfiltreringsoperasjon på nevnte tredje sett med data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable og et korresponderende sett med grensepikseldata til en andre naboliggende makroblokk.
Kort beskrivelse av tegningene
For å gjøre oppfinnelsen mer forståelig refererer den etterfølgende diskusjonen til vedlagte tegninger og tabeller. Fig. 1 illustrerer en grense mellom to makroblokker som betegner pikslene involvert i en deblokkeringsfiltreringsprosess langs grensen, Fig. 2 viser en oppslagstabell fra H.264/AVC-spesifikasjonen for terskelverdier, Fig. 3 viser en oppslagstabell for H.264/AVC-spesifikasjonen for klippingsverdier, Fig. 4 er et flytskjema som illustrerer utførelsen til den foreliggende oppfinnelsen hvor luminansmakroblokken er filtrert, Fig. 5 er et flytskjema som illustrerer utførelsen til den foreliggende oppfinnelsen hvor to krominansmakroblokker blir filtrert, Fig. 6 er et blokkdiagram som illustrerer en parallelloperasjon eller to vektorregistervariable, Fig. 7 er et blokkdiagram som illustrerer en makroblokk satt inn i 16 16-bytes registervariabler før transponering, og Fig. 8 er et blokkdiagram som illustrerer en makroblokk som blir satt inn i en 16 16-bytes registervariabler etter transponering.
Detaljert beskrivelse av den foreliggende oppfinnelsen
Den foreliggende oppfinnelsen tilveiebringer en måte for å implementere deblokkeringsfiltre for å redusere artefakter i videobilder for generelt formålsprosessorer, spesielt tilpasset for tidligere kjente teknikkmetoder beskrevet i spesifikasjonen ITU-T Ree. H.264 ISO/IEC 14496-10 AVC, som blir beskrevet i det følgende.
I H.264/AVC blir et adaptivt deblokkeringsfilter anvendt i kodingsløkken. Dette betyr videre at prediksjon blir utført på filtrerte bilder. Filteret blir designet til å fjerne så mye som mulig av blokking og kvantiseringsstøy og fremdeles opprettholde så mye av bildeinnholdet som mulig. Det er ofte en utfordring å separere kvantiseringsstøy og billedinnhold. Dette er grunnen til at filteret er svært innholdstilpasset og derfor komplekst når det gjelder beregningsoperasjoner.
I fig. 1 er kanten mellom to billedblokker vist. Bokstavene c og d betyr to tilliggende pikselposisjoner på hver side av kanten og de andre bokstavene betyr fire horisontale pikselposisjoner nærmest til de to første nevnte pikslene. I henhold til H.264/AVC, kan pikslene b c d e bli modifisert basert på verdien til hvert av pikslene og på karakteriseringen av kanten i seg selv. Denne modifikasjonen gjøres for å utligne de ovenfor nevnte artefaktene. Modifiseringen blir derfor utført på kun artefakter som sannsynlig vil oppstå.
Lignende filtreringsoperasjoner blir utført på alle linjene a, b, c, d, e, f. I den følgende beskrivelsen vil bokstavene bli brukt uten nummerering 0-7.
I henhold til H.264, er en styrkeverdi (Str) definert for kanten. Denne styrkeverdien reflekterer om artefakter sannsynlig vil opptre mellom to blokker avhengig av én eller flere av følgende situasjoner som blir detektert: Dersom noen av to blokker på hver side av en grense er intrakodet, dvs. kodet basert på allerede kodede blokker i det foreliggende bildet.
Dersom enhver av to blokker på hver side av grensen innbefatter ikke-null transformasj onskoeffi sienter.
Dersom størrelsen av bevegelsesvektoren blir brukt for å prediktere blokker på hver side av grensene overstiger en viss terskelverdi.
Videre blir en kvantiseringsparameter (QP) tilegnet til hver 4x4 blokk. QP som representerer kanten er maksimumsverdien til QP'er som representerer to blokker.
Flere QP-avhengige terskelparametere blir brukt:
o(QP)
P(QP)
y (QP, str)
a, p og y blir funnet i oppslagstabeller vist i fig. 2 og 3. Fig. 1 viser oppslagstabell for å bestemme a, (3 og fig. 3 er en oppslagstabell for å bestemme y, som er en klippings verdi. Her er indeksA og indeksB QP, og bs = 1, 2, 3 korresponderende til kriteriet c, b, a, respektivt, som er listet over. Følgelig bestemmer kriteriene a, b, c også tilstanden til grensekarakteristikkene.
Basert på disse verdiene blir en hovedtest utført ved å bestemme om deblokkeringsfiltrering skal utføres eller ikke.
Filtrering blir utført kun dersom:
Dersom dette uttrykket er sant, så blir delta beregnet:
A = (b -4c + 4d -e)/8
Denne deltaverdien blir så klippet innenfor området (-y, y). Som et eksempel på klipping, dersom kvantiseringsverdien er 32 og karakteristikken til grensen overholder kriteriet b, som korresponderer til bS=2, så indikerer tabellen at y er 2. Dette impliserer at delta bør bli klippet innenfor intervallet {-2, 2}. Dvs. når delta er større enn 2, så blir delta designert verdien 2, når delta er mindre enn -2, så blir delta designert verdien -2, og når delta ligger innenfor {-2, 2}, så forblir delta uforandret.
Delta blir så brukt for å beregne modifiserte verdier:
En tilleggstest blir utført for å bestemme om b også skal bli rettet:
Dersom dette er sant, vil verdien 8 bli beregnet:
Verdien blir så videre klippet til en verdi i området (-y', y'), hvor y' er liten modifisering av y. En modifisering av b blir så beregnet ved hjelp av 8:
Testen og beregningen er lignende for e:
Dersom denne er sann, vil en annen verdi 8 bli beregnet:
Verdien blir så videre klippet til området (-y', y'). En modifisering av e blir så beregnet ved hjelp av 8:
Den foreliggende oppfinnelsen omhandler implementering av deblokkerings-filtreringsalgoritme eller lignende i et SIMD-miljø, spesielt for prosessorer med 128-bit vektorregistere. SIMD-konseptet er en metode for å forbedre ytelsen til applikasjoner hvor svært repeterbare operasjoner er nødvendig for å bli utført. Strengt sagt er SIMD en teknikk med å utføre samme operasjon på multiple deler av data samtidig.
Tradisjonelt, når en applikasjon blir programmert og en enkel operasjon trengs å bli utført langs et stort datasett, blir en løkke brukt for å iterere gjennom hvert element i datasettet og utføre den nødvendige prosedyren. Under hver iterasjon, har en enkelt del med data hatt en enkel operasjon utført på seg. Dette er det som er kjent som "Single Instruction Single Data" (SISD) programmering. SISD blir generelt trivielt å implementere og både hensikten og metoden til programmereren kan raskt bli ettersett på et senere tidspunkt.
Imidlertid er slike løkker som dette typisk svært inneffektive, og de kan måtte iterere tusenvis eller også millionvis av ganger. Ideelt for å øke ytelsen, trenger antall iterasjoner til en løkke å bli redusert.
En metode for å redusere iterasjoner er kjent som løkkeutrulling. Dette tar en enkel operasjon som blir utført i løkken og utfører den multiple ganger i hver iterasjon. F.eks. dersom en løkke tidligere utførte en enkel operasjon som tar 100000 iterasjoner, kan dens effektivitet bli forbedret ved å utføre denne operasjonen fire ganger i hver løkke og kun ha 2500 iterasjoner. SIMD-konseptet tar løkkeutrulling ett trinn videre ved å inkorporere multiple handlinger på hver løkkeiterasjon, og utføre dem samtidig. Med SIMD, kan ikke kun antall løkkeiterasjoner bli redusert, men også multiple operasjoner som er nødvendig kan bli redusert i en enkel, optimalisert handling.
SIMD gjør dette gjennom bruk av såkalte pakke vektorer. En pakket vektor, er, lik som tradisjonelle programmeringsvektorer eller matriser en datastruktur som inneholder multiplene biter med basisdata. Ulike tradisjonelle vektorer, kan imidlertid en SIMD-pakket vektor så bli brukt som et argument for en spesifikk instruksjon (f.eks. en aritmetisk operasjon) som så vil bli utført på alle elementene i vektoren samtidig. På grunn av dette kan antall verdier som kan bli lastet inn i vektoren direkte påvirke ytelsen; jo flere verdier som blir prosessert samtidig, jo raskere kan et komplett datasett bli avsluttet.
Når verdier blir lagret i pakkede vektorer og "arbeidet på" av SIMD-operasjonen blir de faktisk flyttet til et spesielt sett med CPU-registere eller registervariabler hvor parallellprosessering utføres. Størrelsen og antall av disse registervariablene blir bestemt av SIMD-implementeringen som blir brukt.
Det andre området som dikterer brukbarheten av en SIMD-implementering er instruksjonssettet. Instruksjonssettet er en liste med tilgjengelige operasjoner som en SIMD-implementering tilveiebringer for bruk med pakkede vektorer. Disse innbefatter typisk operasjoner for effektiv lagring og lasting av verdier til og fra en vektor, aritmetiske operasjoner (addere, subtrahere, dividere, kvadratrot, etc.), logiske operasjoner (AND, OR, etc), og sammenligningsoperasjoner (større enn, lik til, etc). Jo flere operasjoner en SIMD-implementering tilveiebringer, jo enklere er det for utvikleren å utføre den nødvendige funksjonen. SIMD-operasjoner er tilgjengelig direkte når en skriver kode i ensemblet, imidlertid ikke i høyere nivå programmeringsspråk slik som et C språk.
Deblokkeringsfiltrering i henhold til f.eks. H.264/MPEG-4-AVC opptrer på en permakroblokkbasis, med horisontalfiltrering av vertikalkanter utført først og etterfulgt av vertikalfiltrering av horisontalkanter. Begge retninger med filtrering på hver makroblokk må bli utført før en beveger seg til neste makroblokk. I tidligere kjent teknikk softwareimplementering av deblokkering ble hver makroblokk vanligvis lastet to ganger fra RAM til CPU-registervariablene, én gang for vertikalfiltrering, og én gang for horisontalfiltrering, noe som er spesielt krevende beregningsmessig og involverer å laste fjerntliggende minnereferanser.
Den foreliggende oppfinnelsen tilveiebringer en metode som krever kun én lasting for hver makroblokk. Trinnet involvert er primært som følger: laste makroblokken - transponere makroblokken - utføre horisontalfiltrering - transponere makroblokken
- utføre vertikalfiltrering - lagre makroblokken.
På denne måten er det kun én lasting og én lagring for hver makroblokk og implementeringene av vertikal og horisontal filtrering blir identiske, ved å faktisk utføre vertikal filtrering på den transponerte makroblokken for å utføre horisontalfiltrering. En annen fordel med den foreliggende oppfinnelsen er at ved å ta fordel av vektor og instruksjonsnivåparallellalisme, blir mer avanserte prosessornyheter enn det som vanligvis blir utført i deblokkeringsfiltreringsberegninger utnyttet. Den foreliggende tilnærmelsen avviker fra alle andre kjente tilnærmelser ved at hele makroblokken blir transponert. Ved å utnytte forbedrede beregningsmessige ressurser tilgjengelige i moderne prosessorer, er en full makroblokktransponering (som beskrevet i f.eks. F. Franchetti og M. Puschel "Generating SIMD Vectorized Permutations" i Proceedings of International Conference on Compiler Construction (CC) 2008) relativt billig, og den foreslåtte tilnærmelsen blir spesielt effektiv.
Franchetti og Puschel illustrerer en svært effektiv metode for å transponere en 8x8 matrise som utfører en minimal nummerblokkeringsoverføringsoperasjon som blir implementert ved å bruke vektorskyflingsinstruksjoner. En algoritmeprosess i henhold til den foreliggende oppfinnelsen blir generalisert til en enkel 16x16 transponering for luminansmakroblokken og en til en 2x8x8 transponering for to krominansmakroblokker. I moderne prosessorer, vil et enkelt register typisk holde 16 piksler, derfor er et foretrukket valg i henhold til den foreliggende oppfinnelsen å beregne transponeringen for U og V krominansmakroblokker samtidig ved å bruke
16 byte instruksjoner.
Moderne prosessorer inneholder et økende antall med eksekveringsenheter som generelt forblir ute av drift (idle). I implementeringen av deblokkeringsfiltreringen i henhold til den foreliggende oppfinnelsen, blir alle eksekveringsenhetene holdt opptatt det meste av tiden, siden algoritmen er formulert på en måte som tar maksimal fordel av Single Instruction Multiple Data (SIMD) instruksjoner og Instruction Level Parallelism (ILP).
Ett aspekt som bidrar til unikheten til den foreliggende oppfinnelsen er at den sikter på eksekveringen av omgivelser hvor den best kan utnytte fordelene med ILP hvor andre kjente implementeringer antas å forsøke å parallellisere mer generelt formål algoritmer.
Flytskjemaene vist i fig. 4 og 5 beskriver deblokkingsfiltrering (DF) og én luminansmakroblokk (fig. 4) og to krominans (fig. 5) makroblokker (MB).
Det refereres nå til flytskjemaene, hvor én utførelse av den foreliggende oppfinnelsen blir beskrevet på et høynivå. Først blir makroblokkene lastet til et 16-byte innrettet register variabel matrise som bruker effektivt 16 byte innrettet lasting. Matrisen blir så effektivt transponert av en SIMD-instruksjon ved å bruke et minimalt antall av blokkoverføringsoperasjoner. Horisontalfiltrering blir så utført på den transponerte makroblokken. Videre blir matrisen transponert tilbake til dens opprinnelige orientering. Vertikalfiltrering blir utført ved å bruke samme algoritmer for horisontalfiltrering nevnt over. Til slutt blir makroblokkene lagret tilbake i
RAM.
I tillegg blir regionen som angir horisontaloverlapping (Patch 1) brukt for beregning av neste makroblokk nedover, og regionen som angir vertikaloverlapp (Patch 2) brukt for å beregne neste makroblokk til høyre respektivt transponert og lagret til minne for senere bruk.
Som tidligere indikert tillater Signal Instruction Multiple Data (SIMD) instruksjoner tilstede i foreliggende generering x86 mikroprosessorer en enkel vanlig operasjon til å bli eksekvert samtidig langs opptil 16 sett med data. F.eks. når data blir formatert korrekt innenfor prosessorene SIMD sine registre, en addisjonsoperasjon kan så bli beregnet på 16 individuelle sett og data som gir 16 resultater samtidig, som vist i fig. 6. Den tidsmessige kostnaden med å eksekvere denne operasjonen er identisk til eksekvering av en enkel addisjonsoperasjon på et enkelt datasett med normale prosessorinstruksjoner på generelt formålregistre.
Den reelle kostnaden med prosessering opptrer i forberedelsen med datasett som det skal bli operert på. I tilfelle med å utføre vertikalfiltrering av horisontalkanter, er det mulig å laste alle verdiene til en enkel linje med inputdata ved å bruke en enkel, laveksekveringskostnadslasting siden SIMD tilveiebringer instruksjoner for lasting av 16 bytes lineært ved å bruke en enkel instruksjon.
Algoritmen i henhold til den foreliggende oppfinnelsen utnytter det faktum at prosessoren tilveiebringer nok registerplass til å lagre en hel 16x16 sett med data som er den nøyaktige størrelsen til en luminansmakroblokk eller to krominansmakroblokker. Ved å utvide 16 etterfølgende lesinger med 16 lineære innrettede verdier til 16 SIMD-registervariable som hver er i stand til å lagre 16 verdier, kan hele datasettet for operering bli lagret innenfor prosessorenes SIMD-registervariable og kan bli operert på uten noe minnerelatert latens. Ved dette punktet kan en transponeringsalgoritme bli anvendt for å innrette vertikalkantene innenfor registervariablene slik at de kan bli handlet på som en horisontal kant som er den ønskede interne orienteringen for SIMD-prosessering. Før lagring av verdiene igjen, blir en andre transponeringsoperasjon anvendt for å reorientere kantene til deres opprinnelige posisjon.
Alternativet ville være å velge lasting og posisjonere hver pikselverdi individuelt på et høyere instruksjonstellekostnad for å produsere det samme resultatet. I tillegg, siden samme datasett også må bli brukt for prosessering i alternative orienteringer, blir denne prosessen teoretisk svært redundant, siden transponeringsoperasjonen gir dataene en perfekt match for "de-locking" av filtrering av makroblokker.
Som allerede indikert over, for å anvende den samme høye ytelsen, vektoriserte algoritmer til vertikale kolonner med sampler som ble brukt for de horisontale radene, er det nødvendig å transponere sampelmatrisen til å innrette seg til vertikalkolonnene som horisontalradene. Denne prosessen er transponeringstrinnet. Fig. 7 og 8 representerer datasett hvor hver rad med sampeldata blir lagret i en enkel vektorregistervariabel. Fig. 7 viser at når en opererer på vertikale kolonner, blir ikke datasettet orientert ideelt siden en enkel kolonne med sampler blir spredt langs 16 vektorregistervariable. Diagrammet vist i fig. 8 som er en transponert representasjon demonstrerer hvordan, etter transponering av settet, orienteringen er ideell for SIMD-instruksjoner siden hver kolonne nå blir lagret innenfor en enkel vektorregistervariabel. Resultatet er at 16 samtidige på tvers av kolonneoperasjoner kan opptre nå som data har blitt forberedt for dette formålet.
Mens andre implementeringer velger å transponere makroblokken delvis "on the fly" for å forbedrede for en SIMD-vennlig filtrering, transponerer den foreliggende oppfinnelsen makroblokken i et effektivt trinn - som også gjør vei for intern lagring av makroblokker i registervariablene og gjør det unødvendig å laste makroblokker to ganger. Dette vil klart også lede til identiske implementeringer av horisontal og vertikal filtrering, som er en hovedfordel med den foreliggende oppfinnelsen, som siden kun vertikalfiltrering har blitt ansett å være SIMD-vennlig.
Ettersom oppløsningen til kilderammen brukt i videokonferanser øker, blir det økende vanskelig å effektivisere lasting og lagring av makroblokker uten store ytelsesstraffer. F.eks. for 1080p, vil avstanden mellom den første og den siste byte i en 16x16 piksel makroblokk være tilnærmet 30 Kbytes. Det å laste disse 256 bytes én av gangen er opplagt ikke effektivt selv om minnet som er i bruk okkuperer mindre enn 64 Kytes LI datacash tilgjengelig i moderne prosessorer. Tvert imot laster en prosess i henhold til den foreliggende oppfinnelsen, data i bolker på 16 bytes ved å bruke en effektiv 16 bytes innrettet lasting.
Moderne prosessorer kan typisk eksekvere to eller tre 16-byte instruksjoner pr. klokkesyklus, spesielt dersom mange uavhengige instruksjoner er gruppert i det samme området. Dermed kan 16 etterfølgende 16 bytes lastinger som er uavhengige bli eksekvert i en hvilken som helst rekkefølge av prosessorenes ikke i rekkefølge eksekveringskjerne. Den overordnede latensen minker fordi uavhengige instruksjoner kan gjemme hverandres latens.
Selv om det å laste 256 byte samples individuelt kan fremtre som fordelaktig siden transponeringsoperasjonen ikke ville være nødvendig, er fordelene ved SIMD-vennlige og cachvennlig eksekvering stor nok, blir kostnaden med full 16x16 matrisetransponering neglisjerbar i sammenligning.
Bemerk at uttrykket registervariabel ikke nødvendigvis refererer til et fysisk register i prosessorhardware. Den foreliggende oppfinnelsen kan bli implementert f.eks. både i assemblykode og såkalt indre (intrinsic) funksjoner. F.eks. er Intel C/C++ kompillerer intrinsic ekvivalente spesielle C/C++ utvidelser som tillater å bruke syntaksen med C-funksjonskall og C-variabler i stedet for hardwareregistre. En variabel i intrinsic funksjoner som er tiltenkt innført i et register er ikke garantert å bli innført i et faktisk hardwareregister, men den blir håndtert i henhold til det og er like effektiv som om den var der. Uttrykket registervariabel kan derfor bli tolket både som et fysisk hardwareregister så vel som registervariabel håndtert som om den var innført i et hardwareregister.
Det finnes et antall fordeler forbundet til den foreliggende oppfinnelsen. Det krever færre lastinger - 16 istedenfor 256 - i tillegg til mer effektive og innrettede lastinger. SIMD-omgivelsene tilveiebringer også samtidig lastinger - 16 etterfølgende 16 bytes lastinger istedenfor mange enkle "blocking" lastinger. Alt leder til redusert behov for minnetilgang, økt makroblokktransponeringsytelse og økt horisontal filtreringsytelse siden det gjenbruker høyt vertikalifltrering.
I et aspekt blir oppfinnelsen implementert som et system for å utføre en deblokkeringsfiltreringsoperasjon på grensenabopiksler mellom makroblokker i en videokoding eller dekodingsprosess eksekvert i et 16-bytes SIMD-register prosessormiljø. Et slikt system kan omfatte midler for å utføre trinnene til metoden som beskrevet i beskrivelsen ovenfor. Slike midler kan tilveiebringes ved en prosesseringsinnretning som er innbefattet i en datamaskin, f.eks. en datamaskin brukt i et videokonferansesystem. Prosesseringsinnretningen kan bli konfigurert ved å eksekvere et datamaskinprogram. Datamaskinprogrammet kan innbefatte instruksjoner som forårsaker at prosesseringsinnretningen utfører den frembrakte metoden når instruksjonene blir eksekvert av prosesseringsinnretningen. Datamaskinprogrammet kan være konkret i et minne i en datamaskin, eller på et lagringsmedium, slik som magnetisk, optisk eller halvleder digitalt lagringsmedium, eller på et utbredelsessignal som kan være f.eks. overført mellom nettverkselementer i en lokal, vidt område eller globalt kommunikasjonsnettverk.

Claims (10)

1. Metode for å utføre en deblokkeringsfiltreringsoperasjon på grenseliggende nabopiksler mellom makroblokker i en videokodings- eller dekodingsprosess eksekvert i et 16-bytes SIMD-register prosessormiljø, karakterisert ved: - å laste et første sett med data omfattende en luminansmakroblokk eller to krominansmakroblokker fra en RAM til en gruppe med 16 16-bytes horisontal SIMD-registervariable ved å innsette hver rad i blokken i de respektive registervariable, - å eksekvere en transponeringsinstruksjon på nevnte første sett med data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariabler som lager et andre sett med data som blir lagret i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable, - å utføre en vertikal deblokkeringsfiltreringsoperasjon på nevnte andre sett av data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable og et korresponderende sett grensepikseldata til en første naboliggende makroblokk, - å eksekvere en transponeringsinstruksjon på nevnte andre sett med data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable som lager et tredje sett med data som blir lagret i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable, - å utføre en vertikal deblokkeringsfiltreringsoperasjon på nevnte tredje sett med data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable og et korresponderende sett av grensepikseldata til en andre naboliggende makroblokk.
2. Metode i henhold til krav 1, karakterisert vedat deblokkeringsfiltreringsoperasjonen er en deblokkeringsfilteroperasjon i henhold til H.264 eller MPEG-4-standarden.
3. Metode i henhold til krav 1 eller 2, karakterisert vedat den videre innbefatter det følgende trinnet: - å transformere og lagre et første undersett av nevnte tredje sett med data korresponderende til grensepikseldata relativt til den første tilliggende makroblokk på den høyre siden av nevnte ene luminansmakroblokk eller to krominansmakroblokker.
4. Metode i henhold til et av de foregående kravene, karakterisert vedat den videre innbefatter det følgende trinnet: - å transformere og lagre et andre undersett av nevnte tredje datasett korresponderende til grensepikseldata relativt til en andre tilliggende makroblokk under nevnte ene luminansmakroblokk eller to krominansmakroblokker.
5. Metode i henhold til et av de foregående kravene, karakterisert vedat den videre innbefatter følgende trinn: - å lagre nevnte tredje sett med data i RAM og erstatte nevnte første sett med data som omfatter nevnte ene luminansmakroblokk eller to krominansmakroblokker.
6. System for å utføre en deblokkeringsfiltreringsoperasjon på grenseliggende nabopiksler mellom makroblokker i en videokoding eller dekodingsprosess eksekvert i en 16-bytes SIMD-registerprosessoromgivelse, karakterisert vedat systemet omfatter: - midler for å laste et første sett med data omfattende en luminansmakroblokk eller to krominansmakroblokker fra en RAM til en gruppe med 16 16-bytes horisontal SIMD-registervariabler ved å innføre hver rad i blokken(e) i respektive registervariable, - midler for å eksekvere en transponeringsinstruksjon på nevnte første sett med data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariabler ved å lage et andre sett med data som blir lagret i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable, - midler for å utføre en vertikal deblokkeringsfiltreringsoperasjon på nevnte andre sett med data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable og et korresponderende sett grensepikseldata til en første naboliggende makroblokk, - midler for å eksekvere en transponeringsinstruksjon på nevnte andre sett med data i nevnte gruppe med 16 16-bytes horisontale SIMD-registervariable som lager et tredje sett med data som blir lagret i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable, - midler for å utføre vertikal deblokkeringsfiltreringsoperasjon på nevnte tredje sett med data i nevnte gruppe med 16 16-bytes horisontal SIMD-registervariable og et korresponderende sett med grensepikseldata til en andre naboliggende makroblokk.
7. Et system i henhold til krav 6, karakterisert vedat den videre innbefatter: - midler for å transformere og lagre et første undersett med nevnte tredje sett av data korresponderende til grensepikseldata relativt til den første tilliggende makroblokk på høyre side av nevnte ene luminansmakroblokk eller to krominansmakroblokker.
8. System i henhold til kravene 6 eller 7, karakterisert vedat det videre innbefatter: - midler for å transformere og lagre et andre undersett av nevnte tredje sett med data korresponderende til grensepikseldata relativt til en andre tilliggende makroblokk under nevnte ene luminansmakroblokk eller to krominansmakroblokker.
9. Et system i henhold til kravene 6, 7 eller 8, karakterisert vedat det videre innbefatter: - midler for å lagre nevnte tredje sett med data i RAM som erstatter nevnte første sett med data som utgjør nevnte ene luminansmakroblokk eller to krominansmakroblokker.
10. Datamaskinprogram lagret på et lagringsmedium, for eksekvering på en datamaskin, karakterisert vedat den omfatter instruksjoner for å utføre metoden i henhold til kravene 1-5.
NO20083085A 2008-07-09 2008-07-09 Fremgangsmate for prosessor-effektivt deblokkingsfiltrering NO329837B1 (no)

Priority Applications (5)

Application Number Priority Date Filing Date Title
NO20083085A NO329837B1 (no) 2008-07-09 2008-07-09 Fremgangsmate for prosessor-effektivt deblokkingsfiltrering
US12/499,601 US8503537B2 (en) 2008-07-09 2009-07-08 System, method and computer readable medium for decoding block wise coded video
PCT/NO2009/000256 WO2010005316A1 (en) 2008-07-09 2009-07-09 High performance deblocking filter
EP09794693A EP2311265A4 (en) 2008-07-09 2009-07-09 HIGH PERFORMANCE DEAGROUP FILTER
CN200980126897.XA CN102090064B (zh) 2008-07-09 2009-07-09 高性能去块化滤波器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
NO20083085A NO329837B1 (no) 2008-07-09 2008-07-09 Fremgangsmate for prosessor-effektivt deblokkingsfiltrering

Publications (2)

Publication Number Publication Date
NO20083085L NO20083085L (no) 2010-01-11
NO329837B1 true NO329837B1 (no) 2011-01-03

Family

ID=40545828

Family Applications (1)

Application Number Title Priority Date Filing Date
NO20083085A NO329837B1 (no) 2008-07-09 2008-07-09 Fremgangsmate for prosessor-effektivt deblokkingsfiltrering

Country Status (5)

Country Link
US (1) US8503537B2 (no)
EP (1) EP2311265A4 (no)
CN (1) CN102090064B (no)
NO (1) NO329837B1 (no)
WO (1) WO2010005316A1 (no)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110314253A1 (en) * 2010-06-22 2011-12-22 Jacob Yaakov Jeffrey Allan Alon System, data structure, and method for transposing multi-dimensional data to switch between vertical and horizontal filters
JP6078923B2 (ja) * 2011-10-14 2017-02-15 パナソニックIpマネジメント株式会社 転置演算装置とその集積回路、および転置処理方法
CN109905709B (zh) * 2019-03-21 2021-05-07 南京威翔科技有限公司 一种基于流水线重组方式的去方块滤波方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6823087B1 (en) * 2001-05-15 2004-11-23 Advanced Micro Devices, Inc. Parallel edge filters in video codec
US20050117653A1 (en) * 2003-10-24 2005-06-02 Jagadeesh Sankaran Loop deblock filtering of block coded video in a very long instruction word processor
US20060165164A1 (en) * 2005-01-25 2006-07-27 Advanced Micro Devices, Inc. Scratch pad for storing intermediate loop filter data

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110087859A1 (en) * 2002-02-04 2011-04-14 Mimar Tibet System cycle loading and storing of misaligned vector elements in a simd processor
US6963341B1 (en) * 2002-06-03 2005-11-08 Tibet MIMAR Fast and flexible scan conversion and matrix transpose in a SIMD processor
GB2409059B (en) * 2003-12-09 2006-09-27 Advanced Risc Mach Ltd A data processing apparatus and method for moving data between registers and memory
US8090028B2 (en) * 2004-05-21 2012-01-03 Broadcom Corporation Video deblocking memory utilization
US7483595B2 (en) * 2004-09-16 2009-01-27 Marvell International Technology Ltd. Image processing method and device
US8542744B2 (en) * 2006-05-19 2013-09-24 Altera Corporation Methods and apparatus for providing a scalable deblocking filtering assist function within an array processor
US20080123750A1 (en) * 2006-11-29 2008-05-29 Michael Bronstein Parallel deblocking filter for H.264 video codec

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6823087B1 (en) * 2001-05-15 2004-11-23 Advanced Micro Devices, Inc. Parallel edge filters in video codec
US20050117653A1 (en) * 2003-10-24 2005-06-02 Jagadeesh Sankaran Loop deblock filtering of block coded video in a very long instruction word processor
US20060165164A1 (en) * 2005-01-25 2006-07-27 Advanced Micro Devices, Inc. Scratch pad for storing intermediate loop filter data

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
AMD: "Porting and optimizing multimedia codecs for AMD64 architecture on Microsoft Windows", 21 July 2004 (2004-07-21), XP002524545, Retrieved from the Internet <URL:http://www.amd.com/us-en/assets/content_type/DownloadableAssets/dwamd_MMCodec_amd64.pdf> [retrieved on 20090421] *
CHEN Y K ET AL: "Implementation of H.264 encoder and decoder on personal computers", JOURNAL OF VISUAL COMMUNICATION AND IMAGE REPRESENTATION, ACADEMIC PRESS, INC, US, vol. 17, no. 2, 1 April 2006 (2006-04-01), pages 509 - 532, XP024905104, ISSN: 1047-3203, [retrieved on 20060401] *
WARRINGTON S ET AL: "Performance improvement of the H.264/AVC deblocking filter using SIMD instructions", 2006 IEEE INTERNATIONAL SYMPOSIUM ON CIRCUITS AND SYSTEMS 21-24 MAY 2006 ISLAND OF KOS, GREECE, 2006, 2006 IEEE International Symposium on Circuits and Systems (IEEE Cat. No. 06CH37717C) IEEE Piscataway, NJ, USA, pages 2697 - 2700, XP002524546, ISBN: 0-7803-9389-9 *

Also Published As

Publication number Publication date
WO2010005316A1 (en) 2010-01-14
US8503537B2 (en) 2013-08-06
NO20083085L (no) 2010-01-11
CN102090064B (zh) 2014-10-22
US20100008429A1 (en) 2010-01-14
EP2311265A1 (en) 2011-04-20
CN102090064A (zh) 2011-06-08
EP2311265A4 (en) 2012-03-28

Similar Documents

Publication Publication Date Title
US7747088B2 (en) System and methods for performing deblocking in microprocessor-based video codec applications
US8537895B2 (en) Method and apparatus for parallel processing of in-loop deblocking filter for H.264 video compression standard
Sima et al. An efficient architecture for adaptive deblocking filter of H. 264/AVC video coding
US9060169B2 (en) Methods and apparatus for providing a scalable deblocking filtering assist function within an array processor
US20100321579A1 (en) Front End Processor with Extendable Data Path
WO2006063260A2 (en) Digital signal processing structure for decoding multiple video standards
de Souza et al. HEVC in-loop filters GPU parallelization in embedded systems
US8238429B2 (en) Statistically cycle optimized bounding box for high definition video decoding
Koziri et al. Implementation of the AVS video decoder on a heterogeneous dual-core SIMD processor
US11790485B2 (en) Apparatus and method for efficient motion estimation
Park et al. Programmable multimedia platform based on reconfigurable processor for 8K UHD TV
NO329837B1 (no) Fremgangsmate for prosessor-effektivt deblokkingsfiltrering
KR100729241B1 (ko) 디블록킹 필터
EP1351512A2 (en) Video decoding system supporting multiple standards
US7756351B2 (en) Low power, high performance transform coprocessor for video compression
KR101031493B1 (ko) 에이치 닷 264 표준에 근거한 디코더용 움직임 보상기 및 그 보간 연산 방법
Azevedo et al. Analysis of video filtering on the cell processor
Ayadi et al. A novel deblocking filter architecture for H. 264/AVC
Alle et al. High performance VLSI implementation for H. 264 Inter/Intra prediction
Du et al. uAVS3D—Fast multi-platform and open source decoder for AVS3
Torabi et al. A fast architecture for H. 264/AVC deblocking filter using a clock cycles saving process
Bae et al. Quarter-pel interpolation architecture in H. 264/AVC decoder
KR101656009B1 (ko) Hevc의 디블록킹 필터
Yang et al. Mapping deblocking algorithm of H. 264 decoder onto a reconfigurable array architecture
Lee et al. A pipelined hardware architecture of an h. 264 deblocking filter with an efficient data distribution

Legal Events

Date Code Title Description
MM1K Lapsed by not paying the annual fees