Skip to content
This repository has been archived by the owner on Apr 2, 2024. It is now read-only.

Commit

Permalink
* argb2i420 converter
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Berger <christian.berger@gu.se>
  • Loading branch information
chrberger committed Aug 15, 2018
1 parent 31fc3d1 commit 3b347f1
Show file tree
Hide file tree
Showing 11 changed files with 17,900 additions and 2 deletions.
32 changes: 32 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Prerequisites
*.d

# Compiled Object files
*.slo
*.lo
*.o
*.obj

# Precompiled Headers
*.gch
*.pch

# Compiled Dynamic libraries
*.so
*.dylib
*.dll

# Fortran module files
*.mod
*.smod

# Compiled Static libraries
*.lai
*.la
*.a
*.lib

# Executables
*.exe
*.out
*.app
21 changes: 21 additions & 0 deletions .multi-arch.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/bin/sh

VERSION=$1

cat <<EOF >/tmp/multi.yml
image: chalmersrevere/argb2i420-multi:$VERSION
manifests:
- image: chalmersrevere/argb2i420-amd64:$VERSION
platform:
architecture: amd64
os: linux
- image: chalmersrevere/argb2i420-armhf:$VERSION
platform:
architecture: arm
os: linux
- image: chalmersrevere/argb2i420-aarch64:$VERSION
platform:
architecture: arm64
os: linux
EOF
manifest-tool-linux-amd64 push from-spec /tmp/multi.yml
91 changes: 91 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# Copyright (C) 2018 Christian Berger
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

cmake_minimum_required(VERSION 3.2)

project(argb2i420)

################################################################################
# Defining the relevant version of libcluon.
set(CLUON_COMPLETE cluon-complete-v0.0.108.hpp)

################################################################################
# Set the search path for .cmake files.
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}" ${CMAKE_MODULE_PATH})

################################################################################
# This project requires C++14 or newer.
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# Build a static binary.
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
# Add further warning levels.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} \
-D_XOPEN_SOURCE=700 \
-D_FORTIFY_SOURCE=2 \
-O2 \
-fstack-protector \
-fomit-frame-pointer \
-pipe \
-Weffc++ \
-Wall -Wextra -Wshadow -Wdeprecated \
-Wdiv-by-zero -Wfloat-equal -Wfloat-conversion -Wsign-compare -Wpointer-arith \
-Wuninitialized -Wunreachable-code \
-Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-but-set-parameter -Wunused-but-set-variable \
-Wunused-value -Wunused-variable -Wunused-result \
-Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs -Wmissing-noreturn")
# Threads are necessary for linking the resulting binaries as UDPReceiver is running in parallel.
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)

################################################################################
# Create proper symlink cluon-complete.hpp.
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/cluon-complete.hpp
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E create_symlink ${CMAKE_CURRENT_SOURCE_DIR}/src/${CLUON_COMPLETE} ${CMAKE_BINARY_DIR}/cluon-complete.hpp
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/${CLUON_COMPLETE})
# Add current build directory as include directory as it contains generated files.
include_directories(SYSTEM ${CMAKE_BINARY_DIR})
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src)

################################################################################
# Gather all object code first to avoid double compilation.
set(LIBRARIES Threads::Threads)

if(UNIX)
if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
find_package(LibRT REQUIRED)
set(LIBRARIES ${LIBRARIES} ${LIBRT_LIBRARIES})
include_directories(SYSTEM ${LIBRT_INCLUDE_DIR})
endif()
endif()

find_package(X11 REQUIRED)
include_directories(SYSTEM ${X11_INCLUDE_DIR})
set(LIBRARIES ${LIBRARIES} ${X11_X11_LIB})

find_package(Libyuv REQUIRED)
include_directories(SYSTEM ${YUV_INCLUDE_DIRS})
set(LIBRARIES ${LIBRARIES} ${YUV_LIBRARIES})

################################################################################
# Create executable.
add_executable(${PROJECT_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/src/${PROJECT_NAME}.cpp ${CMAKE_BINARY_DIR}/cluon-complete.hpp)
target_link_libraries(${PROJECT_NAME} ${LIBRARIES})

################################################################################
# Install executable.
install(TARGETS ${PROJECT_NAME} DESTINATION bin COMPONENT ${PROJECT_NAME})
65 changes: 65 additions & 0 deletions Dockerfile.aarch64
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright (C) 2018 Christian Berger
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

# Part to build argb2i420.
FROM docker.io/project31/aarch64-alpine-qemu:3.5-7 as builder
MAINTAINER Christian Berger "christian.berger@gu.se"

RUN [ "cross-build-start" ]

RUN cat /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/v3.7/main > /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/v3.7/community >> /etc/apk/repositories

RUN apk update && \
apk --no-cache add \
cmake \
g++ \
git \
libx11-dev \
make
RUN cd tmp && \
git clone --depth 1 https://chromium.googlesource.com/libyuv/libyuv && \
cd libyuv &&\
make -f linux.mk libyuv.a && cp libyuv.a /usr/lib && cd include && cp -r * /usr/include
ADD . /opt/sources
WORKDIR /opt/sources
RUN mkdir build && \
cd build && \
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/tmp .. && \
make && make install

RUN [ "cross-build-end" ]


# Part to deploy argb2i420.
FROM docker.io/project31/aarch64-alpine-qemu:3.5-7
MAINTAINER Christian Berger "christian.berger@gu.se"

RUN [ "cross-build-start" ]

RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
apk update && \
apk --no-cache add \
libx11

RUN [ "cross-build-end" ]

WORKDIR /usr/bin
COPY --from=builder /tmp/bin/argb2i420 .
ENTRYPOINT ["/usr/bin/argb2i420"]

53 changes: 53 additions & 0 deletions Dockerfile.amd64
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# Copyright (C) 2018 Christian Berger
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

# Part to build argb2i420.
FROM alpine:3.7 as builder
MAINTAINER Christian Berger "christian.berger@gu.se"

RUN apk update && \
apk --no-cache add \
cmake \
g++ \
git \
libx11-dev \
make
RUN cd tmp && \
git clone --depth 1 https://chromium.googlesource.com/libyuv/libyuv && \
cd libyuv &&\
make -f linux.mk libyuv.a && cp libyuv.a /usr/lib && cd include && cp -r * /usr/include
ADD . /opt/sources
WORKDIR /opt/sources
RUN mkdir build && \
cd build && \
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/tmp .. && \
make && make install


# Part to deploy argb2i420.
FROM alpine:3.7
MAINTAINER Christian Berger "christian.berger@gu.se"

RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
apk update && \
apk --no-cache add \
libx11

WORKDIR /usr/bin
COPY --from=builder /tmp/bin/argb2i420 .
ENTRYPOINT ["/usr/bin/argb2i420"]

65 changes: 65 additions & 0 deletions Dockerfile.armhf
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# Copyright (C) 2018 Christian Berger
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.

# Part to build argb2i420.
FROM pipill/armhf-alpine:edge as builder
MAINTAINER Christian Berger "christian.berger@gu.se"

RUN [ "cross-build-start" ]

RUN cat /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/v3.7/main > /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/v3.7/community >> /etc/apk/repositories

RUN apk update && \
apk --no-cache add \
cmake \
g++ \
git \
libx11-dev \
make
RUN cd tmp && \
git clone --depth 1 https://chromium.googlesource.com/libyuv/libyuv && \
cd libyuv &&\
make -f linux.mk libyuv.a && cp libyuv.a /usr/lib && cd include && cp -r * /usr/include
ADD . /opt/sources
WORKDIR /opt/sources
RUN mkdir build && \
cd build && \
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/tmp .. && \
make && make install

RUN [ "cross-build-end" ]


# Part to deploy argb2i420.
FROM pipill/armhf-alpine:edge
MAINTAINER Christian Berger "christian.berger@gu.se"

RUN [ "cross-build-start" ]

RUN echo http://dl-4.alpinelinux.org/alpine/edge/main > /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/edge/community >> /etc/apk/repositories && \
echo http://dl-4.alpinelinux.org/alpine/edge/testing >> /etc/apk/repositories && \
apk update && \
apk --no-cache add \
libx11

RUN [ "cross-build-end" ]

WORKDIR /usr/bin
COPY --from=builder /tmp/bin/argb2i420 .
ENTRYPOINT ["/usr/bin/argb2i420"]

Loading

0 comments on commit 3b347f1

Please sign in to comment.