\usetikzlibrary{arrows,matrix} % \usepackage{amssymb, amsmath, mathptmx} \begin{tikzpicture}[font=\scriptsize,node distance=1cm,scale=1.2] \tikzstyle{sumBlock}=[draw,circle, inner sep=0cm, minimum size=0.1cm] \tikzstyle{processBlock}=[draw, fill=\TikZColorFill, inner sep=0.1cm, minimum size=0.7cm,text centered] \tikzstyle{proposedBlock}=[processBlock, fill=gray!30] \tikzstyle{blockArrow}=[draw,-latex] \tikzstyle{point} = [draw, fill=black, circle,inner sep=1pt] \coordinate (sumPoint) at (0,0); \node[sumBlock] (ResidueDiff) at (sumPoint) {$+$}; % \begin{scope}[xshift=-2cm, yshift=3.2cm, scale=1.5] % \def\spacing{.2} % \node at ((.5+3*\spacing*.5,-.5) (Input) {}; % \foreach \i in {0,...,3} % \draw[thick,fill=white] (\spacing*\i,-.15*\i) rectangle ++(1,1); % % \node[text width=.7cm, text centered] at (1.6,1.1) {Video Stream}; % % \node[text width=.7cm, text centered] at (1.1,.1) {Input video}; % \end{scope} \node[left of=ResidueDiff,text width=1cm,node distance=2.5cm] (Input) {\textbf{Input video}}; \path[blockArrow] (Input) -- (ResidueDiff) node [point, midway] (p0) {}; \node[processBlock,right=of ResidueDiff] (Transf) {$T$}; \node[processBlock,right=of Transf] (Quant) {$Q$}; \node[processBlock,right=of Quant] (VLC) {CABAC}; \node[right=of VLC, text centered,text width=1.5cm] (Output) {\textbf{HEVC bitstream}}; \path[blockArrow] (VLC) -- (Output); \path[blockArrow] (ResidueDiff) -- (Transf); \path[blockArrow] (Transf) -- (Quant); \path[blockArrow] (Quant) -- (VLC) node [point,midway] (QuantFrame) {}; \node[processBlock,below=.8 of QuantFrame] (InvQuant) {$Q^{-1}$}; \node[processBlock,right=0.7 of InvQuant] (InvTransf) {$T^{-1}$}; \node[sumBlock,below=.5 of InvTransf] (ReconResidue) {$+$}; \node[processBlock,text width=1.9cm, below=.8 of ReconResidue] (Filters) {Deblocking \& SAO filters}; \path[blockArrow] (QuantFrame) -- (InvQuant); \path[blockArrow] (InvQuant) -- (InvTransf); \path[blockArrow] (InvTransf) -- (ReconResidue); \path[blockArrow] (ReconResidue) -- (Filters) node[point,midway] (p1) {}; \node[left=.4 of InvQuant, coordinate,yshift=0.5cm] (x1) {}; \path[blockArrow,-] (x1 -| ResidueDiff) node[point] () {} -- (x1); \path[blockArrow] (x1) |- (ReconResidue); \node [processBlock,text width=1.5cm] (Intra) at (2.2,-1.8) {Intra prediction}; \node [processBlock,text width=1.5cm,below=1.2 of Intra] (Inter) {Inter prediction}; \path[blockArrow] (p1) -| (Intra); \node [point,left=.8 of Intra] (z1) {}; \node [point,left=.8 of Inter] (z2) {}; \path[blockArrow,-] (Intra) -- (z1); \path[blockArrow,-] (Inter) -- (z2); \node [coordinate,left of=z1,below of=z1,node distance=0.15cm] (w1) {}; \node [coordinate,left of=z2, above of=z2, node distance=0.15cm] (w2) {}; \path (z1) -- (z2) node [coordinate, midway] (w) {}; \path (w) -- (w -| sumPoint) node [point] (z) {}; \draw[-latex,densely dashed] (w1) to [bend left=60] (w2); \draw [thick,blockArrow] (z1)+(0.1,-0.1) -- (z); \path[blockArrow] (z) -- node[pos=0.96,right] {-} (ResidueDiff); \node[processBlock,below=of Filters,text width=2cm] (RefBuffer) {Decoded Picture Buffer}; \node[processBlock,text width=1.5cm] at(Inter |- RefBuffer) (MotionSearch) {Motion Estimation}; \path[blockArrow] (Filters) -- (RefBuffer) node[point,pos=0.4] (p2) {}; \path[blockArrow] (RefBuffer) -- (MotionSearch); \path[blockArrow] (MotionSearch) -- (Inter); \path[blockArrow] (p0) |- (MotionSearch); \node[right of=p2, text centered,text width=1.5cm, node distance=2.3cm] (Output) {\textbf{Video output}}; \path[blockArrow] (p2) -- (Output); \end{tikzpicture}