\usetikzlibrary{arrows,matrix} \usetikzlibrary{fit} \usetikzlibrary{intersections} \pgfdeclarelayer{background} \pgfdeclarelayer{foreground} \pgfsetlayers{background,main,foreground} \def\scale{1} \begin{tikzpicture}[ font=\scriptsize, auto, node distance=1cm, scale=\scale, every node/.style={scale=\scale}, template/.style={thick, text centered}, block/.style={template, rectangle, text width=1.3cm, ,inner sep=3, minimum height=.6cm}, arrow/.style={template, draw, -latex}, point/.style={template, draw, fill=black, circle,inner sep=0, minimum size=3} ] % Define extra block styles \tikzstyle{sumBlock} = [template, draw, circle, inner sep=0cm, minimum size=0.3cm] \tikzstyle{refBlockNoDraw} = [block, fill=TikZColorFill] \tikzstyle{refBlock} = [refBlockNoDraw, draw] \tikzstyle{propBlockNoDraw} = [block, fill=TikZColorFillProp] \tikzstyle{propBlock} = [propBlockNoDraw,draw] \tikzstyle{MainArrow} = [arrow] \tikzstyle{SignallArrow} = [arrow, dashed] %% Encoder/Decoder \node [refBlock, text width=1.6cm, minimum height=1cm] (Encoder) at (0,0) {Reference \\ Encoder}; %% RPS \node [propBlockNoDraw, text width=2.6cm, minimum height=1cm, right=.3 of Encoder, yshift=1.3cm] (EXP) {Reference Selection \\ Transcoding}; \node [refBlockNoDraw, text width=2.6cm, above=-0.03 of EXP.north west, anchor=south west] (RPSDec) {Decoder}; \path[MainArrow,-] (EXP.south west) |- (RPSDec.north east) |- (EXP.south west); \path[MainArrow,-,densely dotted] (EXP.north west) -- (EXP.north east); % Draw inside lines \path[MainArrow] (Encoder -| EXP) node[point] {} -- (EXP); %% NALU Loss and EC optimisation \node [propBlock, above=.8 of RPSDec, text width=2.6cm, minimum height=2cm] (ConcOpt) {Loss simulation \\ \& \\ Saliency-weighted EC Optimisation}; \path[MainArrow] (RPSDec) -- (ConcOpt); \node [propBlock, right=of ConcOpt.north east, anchor=north west, text width=1.6cm] (Scalable0) {EL Encoder \\(20\%)}; \node [propBlock, right=of ConcOpt.south east, anchor=south west, text width=1.6cm] (Scalable1) {EL Encoder \\(10\%)}; \path[MainArrow] (ConcOpt.east |- Scalable0) -- (Scalable0); \path[MainArrow] (ConcOpt.east |- Scalable1) -- (Scalable1); \node [propBlock, minimum height=.8cm, text width=2cm, right=2 of Encoder, yshift=-1cm] (StreamParser) {Stream Parser}; \path[MainArrow] (Encoder -| StreamParser) node[point] {} -- (StreamParser); \node [propBlock, minimum height=.8cm, text width=2cm, below=.3 of StreamParser] (VideoParser) {Video analyser}; \node[text width=.7cm, text centered] (Input) at (-2,5) {Input video}; \path[MainArrow] (Input |- Encoder) node[point] {} |- (VideoParser); \path[MainArrow] (Input) |- (Encoder); \path[MainArrow] (Input |- EXP) node[point] {} |- (EXP); \path[MainArrow] (Input |- ConcOpt) node[point] {} -- (ConcOpt); % Mux and output \path (Encoder.south) -- (Encoder |- ConcOpt.north) node[midway] (middleRef) {}; % Find middle ref \node [propBlock, right=9 of middleRef, text width=5.5cm, rotate=-90, anchor=center, minimum height=1.1cm] (Mux) {Optimal stream selection}; \node [right of=Mux, node distance=2.8cm, coordinate] (Out) {}; \tikzstyle{OutputLabels} = [pos=1, anchor=south east, text width=2cm, align=right] \path[MainArrow] (Encoder) -- (Mux.south |- Encoder) node[OutputLabels] {\SMEC}; \path[MainArrow] (EXP) -- (Mux.south |- EXP) node[OutputLabels] {\SMEXP}; \path[MainArrow] (Scalable1) -- (Mux.south |- Scalable1) node[OutputLabels] {\SMEXPELTEN}; \path[MainArrow] (Scalable0) -- (Mux.south |- Scalable0) node[OutputLabels] {\SMEXPELTWEN}; \path[MainArrow] (Mux) -- (Out) node[above, midway, text width=2cm, text centered] {Optimal \\ Robust Steam}; \node [text centered, text width=1.5cm, minimum height=1cm, below=.3 of Mux.east, xshift=1.9cm] (Channel) {Channel Conditions}; \path[SignallArrow] (StreamParser) -| (Mux.-6) node (b1) [pos=.3, anchor=center] {\footnotesize /} node[right=-.2 of b1, yshift=-6, inner sep=0] {\footnotesize 3}; \path[SignallArrow] (VideoParser) -| (Mux.0) node (b2) at( b1 |- VideoParser) [anchor=center] {\footnotesize /} node[right=-.2 of b2, yshift=-6, inner sep=0] {\footnotesize 2}; \path[SignallArrow] (Channel) -| (Mux.6); \end{tikzpicture}