Skip to content

Commit

Permalink
cs: Add video codec notes
Browse files Browse the repository at this point in the history
  • Loading branch information
Pratchaya Khansomboon committed Dec 20, 2024
1 parent 107695e commit a8567cc
Show file tree
Hide file tree
Showing 2 changed files with 231 additions and 2 deletions.
228 changes: 228 additions & 0 deletions cs/vcodec.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc} % Fix weird character
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{gensymb}
\usepackage{spalign}
\usepackage{xfrac}
\usepackage{parskip}
\usepackage{float} % figure[H]
\usepackage[english]{babel}
\usepackage[style=ieee,backend=biber,urldate=iso,date=iso]{biblatex}
\usepackage[breaklinks=true,bookmarks=true,hidelinks]{hyperref}
\usepackage{tikz}
\usepackage{pgfplots}
\usepackage{circuitikz}
\usepackage{subcaption}
\usepackage[yyyymmdd]{datetime}
\usepackage{url}
\usetikzlibrary {arrows.meta}
\pgfplotsset{compat=newest,compat/show suggested version=false}

% Custom shape
\makeatletter
\pgfdeclareshape{dflowpass}{
\inheritsavedanchors[from=rectangle]
\inheritanchorborder[from=rectangle]
\inheritanchor[from=rectangle]{center}
\anchor{left}{\pgfpoint{-0.5cm}{0cm}}
\anchor{right}{\pgfpoint{0.5cm}{0cm}}
% Add more custom anchors if needed
\backgroundpath{
% Draw the switch shape (rectangle with diagonal lines)
\pgfsetlinewidth{0.85pt}
\pgfpathrectanglecorners{\pgfpoint{-0.5cm}{-0.5cm}}{\pgfpoint{0.5cm}{0.5cm}}
\pgfpathmoveto{\pgfpoint{-0.35cm}{0.125cm}}
\pgfpathlineto{\pgfpoint{0.15cm}{0.125cm}}
\pgfpathlineto{\pgfpoint{0.35cm}{-0.2cm}}
\pgfusepath{draw}
}
}
\pgfdeclareshape{dfhighpass}{
\inheritsavedanchors[from=rectangle]
\inheritanchorborder[from=rectangle]
\inheritanchor[from=rectangle]{center}
\anchor{left}{\pgfpoint{-0.5cm}{0cm}}
\anchor{right}{\pgfpoint{0.5cm}{0cm}}
\backgroundpath{
% Draw the switch shape (rectangle with diagonal lines)
\pgfsetlinewidth{1pt}
\pgfpathrectanglecorners{\pgfpoint{-0.5cm}{-0.5cm}}{\pgfpoint{0.5cm}{0.5cm}}
\pgfpathmoveto{\pgfpoint{0.35cm}{0.125cm}}
\pgfpathlineto{\pgfpoint{-0.15cm}{0.125cm}}
\pgfpathlineto{\pgfpoint{-0.35cm}{-0.2cm}}
\pgfusepath{draw}
}
}
\pgfdeclareshape{dfbandpass}{
\inheritsavedanchors[from=rectangle]
\inheritanchorborder[from=rectangle]
\inheritanchor[from=rectangle]{center}
\anchor{left}{\pgfpoint{-0.5cm}{0cm}}
\anchor{right}{\pgfpoint{0.5cm}{0cm}}
\backgroundpath{
% Draw the switch shape (rectangle with diagonal lines)
\pgfsetlinewidth{1pt}
\pgfpathrectanglecorners{\pgfpoint{-0.5cm}{-0.5cm}}{\pgfpoint{0.5cm}{0.5cm}}
\pgfpathmoveto{\pgfpoint{-0.35cm}{-0.2cm}}
\pgfpathlineto{\pgfpoint{-0.20cm}{0.125cm}}
\pgfpathlineto{\pgfpoint{0.15cm}{0.125cm}}
\pgfpathlineto{\pgfpoint{0.35cm}{-0.2cm}}
\pgfusepath{draw}
}
}
\pgfdeclareshape{quantizer}{
\inheritsavedanchors[from=rectangle]
\inheritanchorborder[from=rectangle]
\inheritanchor[from=rectangle]{center}
\anchor{left}{\pgfpoint{-0.5cm}{0cm}}
\anchor{right}{\pgfpoint{0.5cm}{0cm}}
\backgroundpath{
% Draw the switch shape (rectangle with diagonal lines)
\pgfsetlinewidth{0.8pt}
\pgfpathrectanglecorners{\pgfpoint{-0.5cm}{-0.5cm}}{\pgfpoint{0.5cm}{0.5cm}}
\pgfpathmoveto{\pgfpoint{-0.25cm}{-0.25cm}}
\pgfpathlineto{\pgfpoint{0cm}{-0.25cm}}
\pgfpathlineto{\pgfpoint{0cm}{0.25cm}}
\pgfpathlineto{\pgfpoint{0.25cm}{0.25cm}}
\pgfusepath{draw}
}
}
\pgfdeclareshape{quantamp}{
\inheritsavedanchors[from=op amp]
\inheritanchorborder[from=op amp]
\inheritanchor[from=op amp]{center}
\inheritanchor[from=op amp]{+}
\inheritanchor[from=op amp]{-}
\inheritanchor[from=op amp]{out}
\inheritanchor[from=op amp]{up}
\inheritanchor[from=op amp]{down}
\backgroundpath{
\pgfsetlinewidth{0.8pt}
\pgfpathmoveto{\pgfpoint{-0.5cm}{0.55cm}}
\pgfpathlineto{\pgfpoint{0.5cm}{0}}
\pgfpathlineto{\pgfpoint{-0.5cm}{-0.55cm}}
\pgfpathclose
\pgfpathmoveto{\pgfpoint{-0.35cm}{-0.2cm}}
\pgfpathlineto{\pgfpoint{-0.2cm}{-0.2cm}}
\pgfpathlineto{\pgfpoint{-0.2cm}{0.2cm}}
\pgfpathlineto{\pgfpoint{-0.05cm}{0.2cm}}
\pgfusepath{draw}
}
}
\pgfdeclareshape{decimation}{
\inheritsavedanchors[from=rectangle]
\inheritanchorborder[from=rectangle]
\inheritanchor[from=rectangle]{center}
\anchor{left}{\pgfpoint{-0.5cm}{0.0cm}}
\anchor{right}{\pgfpoint{0.5cm}{0.0cm}}
\anchor{top}{\pgfpoint{0.0cm}{0.5cm}}
\anchor{bot}{\pgfpoint{0.0cm}{-0.5cm}}
\backgroundpath{
\pgfsetlinewidth{0.8pt}
\pgfpathrectanglecorners{\pgfpoint{-0.5cm}{-0.5cm}}{\pgfpoint{0.5cm}{0.5cm}}
\pgfpathmoveto{\pgfpoint{-0.25cm}{0.25cm}}
\pgfpathlineto{\pgfpoint{-0.25cm}{-0.25cm}}
\pgfpathmoveto{\pgfpoint{-0.30cm}{-0.185cm}}
\pgfpathlineto{\pgfpoint{-0.25cm}{-0.25cm}}
\pgfpathlineto{\pgfpoint{-0.20cm}{-0.185cm}}
\pgfusepath{draw}
}
}
\makeatother

\geometry{
a4paper,
hmargin=2.54cm,
tmargin=1.27cm,
bmargin=1.27cm,
includeheadfoot
}
\setcounter{secnumdepth}{0} % Disable section numbering

\begin{filecontents}{vcodec.bib}
@misc{wiki:mjpeg,
author = "{Wikipedia contributors}",
title = "Motion JPEG --- {Wikipedia}{,} The Free Encyclopedia",
year = "2024",
howpublished = "\url{https://en.wikipedia.org/w/index.php?title=Motion_JPEG&oldid=1259055254}",
note = "[Online; accessed 20-December-2024]"
}
@misc{wiki:prores,
author = "{Wikipedia contributors}",
title = "Apple ProRes --- {Wikipedia}{,} The Free Encyclopedia",
year = "2024",
howpublished = "\url{https://en.wikipedia.org/w/index.php?title=Apple_ProRes&oldid=1248322314}",
note = "[Online; accessed 20-December-2024]"
}
@misc{wiki:h264,
author = "{Wikipedia contributors}",
title = "Advanced Video Coding --- {Wikipedia}{,} The Free Encyclopedia",
year = "2024",
howpublished = "\url{https://en.wikipedia.org/w/index.php?title=Advanced_Video_Coding&oldid=1251662394}",
note = "[Online; accessed 20-December-2024]"
}
@misc{wiki:h265,
author = "{Wikipedia contributors}",
title = "High Efficiency Video Coding --- {Wikipedia}{,} The Free Encyclopedia",
year = "2024",
howpublished = "\url{https://en.wikipedia.org/w/index.php?title=High_Efficiency_Video_Coding&oldid=1258600452}",
note = "[Online; accessed 20-December-2024]"
}
@misc{wiki:av1,
author = "{Wikipedia contributors}",
title = "AV1 --- {Wikipedia}{,} The Free Encyclopedia",
year = "2024",
howpublished = "\url{https://en.wikipedia.org/w/index.php?title=AV1&oldid=1261928987}",
note = "[Online; accessed 20-December-2024]"
}
@misc{av1:tech,
title={A Technical Overview of AV1},
author={Jingning Han and Bohan Li and Debargha Mukherjee and Ching-Han Chiang and Adrian Grange and Cheng Chen and Hui Su and Sarah Parker and Sai Deng and Urvang Joshi and Yue Chen and Yunqing Wang and Paul Wilkins and Yaowu Xu and James Bankoski},
year={2021},
eprint={2008.06091},
archivePrefix={arXiv},
primaryClass={eess.IV},
url={https://arxiv.org/abs/2008.06091},
}
\end{filecontents}
\addbibresource{vcodec.bib}

\begin{document}
\section{Video Codec}

\begin{itemize}
\item Motion JPEG (MJPEG)\cite{wiki:mjpeg}
\item Apple ProRes\cite{wiki:prores}
\item AVC (Advanced Video Coding) H.264\cite{wiki:h264}
\item HEVC (High Efficiency Video Coding) H.265\cite{wiki:h265}
\item AV1 (AOMedia Video 1)\cite{wiki:av1}
\end{itemize}

With the slowdown in the growth of general CPU clock frequency and power
constraints on mobile devices in particular, next generation video compression
codecs are expected to rely heavily on dedicated hardware decoders. Therefore
during the AV1 development process, all the coding tools were carefully reviewed
for hardware considerations (e.g., latency, silicon area, etc.), which resulted
in a codec design well balanced for compression performance and hardware
feasibility.

The AV1 codec supports input video signals in the 4:0:0 (monochrome), 4:2:0,
4:2:2, and 4:4:4 formats. The allowed pixel representations are 8-, 10-, and
12-bit.

An adaptive interpolation filter scheme is used in VP9, where an inter-coded
block in VP9 can choose from three 8-tap interpolation filters that correspond
to different cutoff frequencies in a Hamming window in the frequency domain.

Each direction can choose from 3 finite impulse response (FIR) filters, namely
SMOOTH, REGULAR, and SHARP in ascending order of cutoff frequencies.

The SHARP filter continues to use an 8-tap FIR design to mitigate the ripple
effect near the cutoff frequency.\cite{av1:tech}

\newpage
\printbibliography
\end{document}
5 changes: 3 additions & 2 deletions deploy.sh
Original file line number Diff line number Diff line change
Expand Up @@ -41,9 +41,10 @@ EOF
generate_file_index() {
# Add files
printf "" > $registry_path
find ./maths | grep .tex >> $registry_path
find ./cs | grep .tex >> $registry_path
find ./dsp | grep .tex >> $registry_path
find ./ee | grep .tex >> $registry_path
find ./maths | grep .tex >> $registry_path
find ./misc | grep .tex >> $registry_path

# Filter out dependencies from registry database
Expand Down Expand Up @@ -117,7 +118,7 @@ parse_args() {
prebuild() {
# clean
if [[ $is_clean = true ]] && [[ -e "$build_dir" ]]; then
rm -rf $build_dir
rm -rf $build_dir
fi
if [[ $is_clean = true ]] && [[ $is_production = true ]] && [[ -e "$dist_dir/pdf" ]]; then
rm -rf "$dist_dir/pdf"
Expand Down

0 comments on commit a8567cc

Please sign in to comment.