Turbojpeg (turbojpeg v0.3.0) View Source
TurboJPEG
Fast JPEG encoding from raw YUV data using libjpeg-turbo
Installation
This library requires libjpeg-turbo to be installed
Arch linux
sudo pacman -S libjpeg-turbo
Ubuntu/Debian
sudo apt-get install libturbojpeg libturbojpeg0-dev
OSX
brew install libjpeg-turbo
Develement Dependencies
Arch linux
sudo pacman -S imagemagick
Ubuntu/Debian
sudo apt-get install imagemagick
OSX
brew install imagemagick
If available in Hex, the package can be installed
by adding turbojpeg
to your list of dependencies in mix.exs
:
def deps do
[
{:turbojpeg, "~> 0.3"}
]
end
Basic Usage
iex(1)> frame = File.read!("fixture/i420.yuv")
<<0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 2, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...>>
iex(2)> {:ok, jpeg} = Turbojpeg.yuv_to_jpeg(frame, 1920, 1080, 90, :I420)
{:ok, <<255, 216, 255, 224, 0, 16, 74, 70, 73, 70, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 255,
219, 0, 67, 0, 3, 2, 2, 3, 2, 2, 3, 3, 3, 3, 4, 3, 3, 4, 5, 8, 5, 5, 4, 4, 5,
10, 7, 7, 6, ...>>}
iex(3)> File.write!("test.jpg", jpeg)
:ok
Membrane Sink Usage
Pleas See the membrane guide before using this.
defmodule Your.Module.Pipeline do
use Membrane.Pipeline
@impl true
def handle_init(location) do
children = %{
source: %SomeMembraneSourceModule{location: location},
decoder: Membrane.Element.FFmpeg.H264.Decoder,
jpeg_converter: %Turbojpeg.Sink{filename: "/tmp/frame.jpeg", quality: 100},
}
links = [
link(:source)
|> to(:decoder)
|> to(:jpeg_converter)
]
spec = %ParentSpec{
children: children,
links: links
}
{{:ok, spec: spec}, %{}}
end
end
Copyright and License
Copyright 2021, Binary Noggin
Link to this section Summary
Link to this section Types
Specs
dimension() :: pos_integer()
Specs
Specs
format() :: :I420 | :I422 | :I444 | :GRAY
Specs
height() :: dimension()
Specs
Specs
quality() :: 0..100
Specs
width() :: dimension()
Link to this section Functions
Specs
get_jpeg_header(binary()) :: {:ok, jpeg_header()} | error()
Gets the header from a jpegv
iex> {:ok, header} = Turbojpeg.get_jpeg_header(jpeg)
{:ok,
%{
format: :I422,
width: 192,
height: 192
}
}
Specs
Converts jpeg to yuv
iex> {:ok, yuv} = Turbojpeg.jpeg_to_yuv(jpeg)
{:ok,<<..>>}
Specs
Converts yuv to jpeg images
iex> {:ok, jpeg} = Turbojpeg.yuv_to_jpeg(frame, 1920, 1080, 90, :I420)
{:ok, <<....>>}