151 lines
6.6 KiB
Plaintext
151 lines
6.6 KiB
Plaintext
\usetikzlibrary{arrows,matrix}
|
|
% \usepackage{amssymb, amsmath, mathptmx}
|
|
|
|
\begin{tikzpicture}[font=\footnotesize,node distance=1.5cm]
|
|
|
|
\tikzstyle{sumBlock}=[draw,circle, inner sep=0cm, minimum size=0.1cm]
|
|
|
|
|
|
\tikzstyle{templateBlock} = [inner sep=0.1cm, text centered]
|
|
\tikzstyle{processBlock} = [templateBlock, draw, fill=TikZColorFill, minimum height=0.9cm, text width=2cm]
|
|
\tikzstyle{proposedBlock} = [processBlock, fill=gray!30]
|
|
\tikzstyle{labels} = [templateBlock, text width=2cm, font=\scriptsize]
|
|
\tikzstyle{blockArrow} = [draw,-latex]
|
|
\tikzstyle{arrowControl} = [blockArrow, dashed]
|
|
\tikzstyle{arrowOutput} = [blockArrow, shorten >=6, thick]
|
|
\tikzstyle{point} = [draw, fill=black, circle,inner sep=1pt]
|
|
|
|
\tikzstyle{frame} = [anchor=north west, inner sep=0]
|
|
\tikzstyle{ctu} = [draw, step=12.8mm]
|
|
|
|
\def\framescale{0.23753}
|
|
|
|
%% CUs
|
|
% \begin{scope}[scale=\framescale, every node/.style={scale=\framescale}]
|
|
\node[frame, on grid] at (0,0) (FrameCU) {\includegraphics[width=2cm]{FrameList/RaceCUCrop} };
|
|
% \draw[ctu] (0,0) grid ++(84.2mm,-48.0mm);
|
|
% \end{scope}
|
|
\node[labels, above=0 of FrameCU] {Coding Units quad-tree};
|
|
|
|
%% CTUs
|
|
\node[frame, on grid] at (0,-2.5cm) (FrameCTU) {\includegraphics[width=2cm]{FrameList/RaceCTUCrop} };
|
|
|
|
\begin{scope}[yshift=-5cm]
|
|
\def\spacing{.1}
|
|
\node[frame] at (\spacing*-2 ,\spacing*0 ) (is) {\includegraphics[width=2cm]{FrameList/Race_CodedCrop} };
|
|
\node[frame] at (\spacing*-1 ,\spacing*-1) {\includegraphics[width=2cm]{FrameList/Race_CodedCrop} };
|
|
\node[frame] at (\spacing*0 ,\spacing*-2) {\includegraphics[width=2cm]{FrameList/Race_CodedCrop} };
|
|
\node[frame] at (\spacing*1 ,\spacing*-3) {\includegraphics[width=2cm]{FrameList/Race_CodedCrop} };
|
|
\node[frame] at (\spacing*2 ,\spacing*-4) (ie) {\includegraphics[width=2cm]{FrameList/Race_CodedCrop} };
|
|
\node[fit=(is) (ie), inner sep=1pt] (in) {};
|
|
\end{scope}
|
|
|
|
|
|
\path[blockArrow] (in) -- (FrameCTU) node[labels, text width=1.5cm, midway, left] {Partitioning into CTUs};
|
|
\path[blockArrow] (FrameCTU) -- (FrameCU);
|
|
|
|
\node[sumBlock, right=1.2 of FrameCU] (ResidueDiff) {$+$};
|
|
|
|
%% CTUs
|
|
\node[frame, right=2.2cm of FrameCU] (FTu) {\includegraphics[width=2cm]{FrameList/RaceTUCrop} };
|
|
|
|
\node[labels, text width=2.3cm, above=0 of FTu] {Transform Units \\quad-tree};
|
|
|
|
\node[processBlock, text width=.9cm, right=0.5 of FTu] (Transf) {$T$};
|
|
\node[processBlock, text width=.9cm, right=0.5 of Transf] (Quant) {$Q$};
|
|
\node[processBlock, text width=3.3cm, above=1 of Transf, xshift=.5cm] (GCC) {Encoder control};
|
|
|
|
\node[labels,right=1.8 of Quant] (QuantCoef) {Quantized Coefficients};
|
|
\node[labels,right=2.7 of GCC] (ControlData) {Control data};
|
|
|
|
\path[blockArrow] (Quant) -- (QuantCoef) node [point,pos=0.5] (pointQuant) {};
|
|
|
|
\node[processBlock, below=0.5 of pointQuant, text width=.9cm,] (InvQuant) {$Q^{-1}$};
|
|
\node[processBlock, below=0.5 of InvQuant, text width=.9cm, ] (InvTransf) {$T^{-1}$};
|
|
|
|
\node[sumBlock, below=0.6 of InvTransf] (ReconResidue) {$+$};
|
|
|
|
\node[processBlock, below=.9 of FTu, xshift=.9cm] (IntraEstm) {Intra-frame estimation};
|
|
\node[labels, scale=.8, below=0 of IntraEstm.200, align=right, yshift=-3] {34 modes};
|
|
|
|
\node[processBlock, below=.6 of IntraEstm] (Intra) {Intra prediction};
|
|
\node[processBlock, below=.9 of Intra] (Inter) {Inter prediction};
|
|
\node[processBlock, below=.6 of Inter] (MotionSearch) {Motion Estimation};
|
|
% \node[labels, scale=.8, below=0 of MotionSearch, text width=2cm] {Symmetric \& asymmetric partitions};
|
|
\node[labels, scale=.8, below=0 of MotionSearch.200, align=right, yshift=-3, text width=4cm] {AMVP, Merge Mode};
|
|
|
|
\node[processBlock, below=1.2 of ReconResidue, text width=2.3cm] (Filters) {Deblocking \& SAO filters};
|
|
% \node[processBlock, text width=2.3cm] at (Filters |- MotionSearch) (RefBuffer) {Decoded Picture Buffer};
|
|
\node[processBlock, text width=2.3cm] at (Filters |- MotionSearch) (RPSet) {Reference Picture Set};
|
|
|
|
|
|
%% Intra / Inter prediction arrows
|
|
\node [point,left=.7 of Intra] (IntraPred) {};
|
|
\node [point,left=.7 of Inter] (InterPred) {};
|
|
\path[blockArrow,-] (Intra) -- (IntraPred);
|
|
\path[blockArrow,-] (Inter) -- (InterPred);
|
|
\node[coordinate,left of=IntraPred, below of=IntraPred, node distance=0.15cm] (w1) {};
|
|
\node[coordinate,left of=InterPred, above of=InterPred, node distance=0.15cm] (w2) {};
|
|
\path (IntraPred) -- (InterPred) node [coordinate, midway] (pointPred) {};
|
|
\path (pointPred) -- (pointPred -| ResidueDiff) node [point] (pointPred) {};
|
|
\draw[-latex,densely dashed] (w1) to [bend left=60] (w2);
|
|
\draw[thick,blockArrow] (IntraPred)+(0.1,-0.1) -- (pointPred);
|
|
\path[blockArrow] (pointPred) -- node[pos=0.96,right] {-} (ResidueDiff);
|
|
|
|
|
|
\path[blockArrow] (FrameCU) -- (ResidueDiff) node [point, midway] (pointIn) {};
|
|
\path[blockArrow] (ReconResidue) -- (Filters) node[point,pos=.4] (pointRecon) {};
|
|
|
|
% \path[blockArrow] (ResidueDiff) -- (Transf);
|
|
\path[blockArrow] (ResidueDiff) -- (FTu);
|
|
\path[blockArrow] (FTu) -- (Transf);
|
|
|
|
\path[blockArrow] (pointIn) |- (GCC);
|
|
\path[blockArrow] (GCC) -- (ControlData);
|
|
|
|
\path[blockArrow] (pointQuant) -- (InvQuant);
|
|
\path[blockArrow] (InvQuant) -- (InvTransf);
|
|
\path[blockArrow] (InvTransf) -- (ReconResidue);
|
|
|
|
\path[blockArrow] (pointRecon) -| (Intra);
|
|
% \path[blockArrow] (RefBuffer) -- (RPSet);
|
|
% \path[blockArrow] (RPSet) -- (MotionSearch);
|
|
\path[blockArrow] (Filters) -- (RPSet);
|
|
\path[blockArrow] (RPSet) -- (MotionSearch);
|
|
|
|
\path[blockArrow] (IntraEstm) -- (Intra);
|
|
\path[blockArrow] (MotionSearch) -- (Inter);
|
|
\path[blockArrow] (pointIn) |- (MotionSearch);
|
|
|
|
\path[blockArrow] (pointIn |- IntraEstm) node[point] {} -- (IntraEstm);
|
|
|
|
\node[left=.6 of InvQuant, coordinate] (x1) {};
|
|
\path[blockArrow,-] (x1 -| ResidueDiff) node[point] () {} -- (x1);
|
|
\path[blockArrow] (x1) |- (ReconResidue);
|
|
|
|
|
|
\node[processBlock,right=2.5 of ReconResidue] (VLC) {Header Formatting \& CABAC};
|
|
\begin{pgfonlayer}{background}
|
|
|
|
\path[arrowControl] (GCC -| Quant.90) -- (Quant.90);
|
|
\path[arrowControl] (GCC -| IntraEstm.30) -- (IntraEstm.30);
|
|
\path[arrowControl] (GCC -| MotionSearch.60) -- (MotionSearch.60);
|
|
|
|
\path[arrowOutput] (QuantCoef) -- (VLC.135);
|
|
\path[arrowOutput] (ControlData.-30) -- (VLC);
|
|
\path[arrowOutput] (MotionSearch) -- (VLC.190) node[labels,above, pos=0.7, yshift=.2cm] {Motion \\ vectors};
|
|
\path[arrowOutput] (IntraEstm) -- (VLC) node[labels,above, pos=0.8, yshift=.2cm] {Intra \\ modes};
|
|
\path[arrowOutput] (Filters) -- (VLC.220) node[labels,below, pos=0.7, yshift=-.2cm] {Filter \\ data};
|
|
|
|
\end{pgfonlayer}
|
|
|
|
|
|
|
|
\node[right=1 of VLC, text centered,text width=1.7cm] (Output) {\textbf{HEVC NALUs}};
|
|
\path[blockArrow] (VLC) -- (Output);
|
|
|
|
|
|
|
|
\end{tikzpicture}
|
|
|