Deconflict changes with libOMX

This commit is contained in:
Jason C. Wenger 2020-07-04 10:48:06 -05:00
commit 97be374a75
6 changed files with 164 additions and 30 deletions

View File

@ -1,4 +1,10 @@
cmake_minimum_required(VERSION 3.5.1) cmake_minimum_required(VERSION 3.5.1)
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_PROGRAM}")
endif()
project(openauto CXX) project(openauto CXX)
set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOMOC ON)
@ -22,10 +28,15 @@ set(Boost_USE_STATIC_RUNTIME OFF)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake_modules/") set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${PROJECT_SOURCE_DIR}/cmake_modules/")
SET(CMAKE_CXX_STANDARD 14) SET(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT} -Wall -pedantic -fPIC")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS_INIT} -Wall -pedantic")
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0") set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
set(CMAKE_CXX_FLAGS_RELEASE "-g -O3") set(CMAKE_CXX_FLAGS_RELEASE "-g -O3")
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND CMAKE_CXX_COMPILER_VERSION VERSION_EQUAL 6.3)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
endif()
add_definitions(-DBOOST_ALL_DYN_LINK) add_definitions(-DBOOST_ALL_DYN_LINK)
find_package(Boost REQUIRED COMPONENTS system log OPTIONAL_COMPONENTS unit_test_framework) find_package(Boost REQUIRED COMPONENTS system log OPTIONAL_COMPONENTS unit_test_framework)
@ -34,6 +45,8 @@ find_package(Qt5 COMPONENTS Multimedia MultimediaWidgets Bluetooth Qml Quick Qui
find_package(Protobuf REQUIRED) find_package(Protobuf REQUIRED)
find_package(OpenSSL REQUIRED) find_package(OpenSSL REQUIRED)
find_package(rtaudio REQUIRED) find_package(rtaudio REQUIRED)
find_package(aasdk REQUIRED)
find_package(ZLIB REQUIRED)
find_package(GObject) find_package(GObject)
if(WIN32) if(WIN32)
@ -73,12 +86,9 @@ include_directories(${CMAKE_CURRENT_BINARY_DIR}
${Qt5Bluetooth_INCLUDE_DIRS} ${Qt5Bluetooth_INCLUDE_DIRS}
${QTGSTREAMER_INCLUDE_DIR} ${QTGSTREAMER_INCLUDE_DIR}
${Boost_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS}
${LIBUSB_1_INCLUDE_DIRS}
${PROTOBUF_INCLUDE_DIR} ${PROTOBUF_INCLUDE_DIR}
${OPENSSL_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}
${RTAUDIO_INCLUDE_DIRS} ${RTAUDIO_INCLUDE_DIRS}
${AASDK_PROTO_INCLUDE_DIRS}
${AASDK_INCLUDE_DIRS}
${BCM_HOST_INCLUDE_DIRS} ${BCM_HOST_INCLUDE_DIRS}
${ILCLIENT_INCLUDE_DIRS} ${ILCLIENT_INCLUDE_DIRS}
${GST_INCLUDE_DIRS} ${GST_INCLUDE_DIRS}
@ -94,26 +104,20 @@ file(GLOB_RECURSE autoapp_source_files ${autoapp_sources_directory}/*.ui ${autoa
add_executable(autoapp ${autoapp_source_files}) add_executable(autoapp ${autoapp_source_files})
file(GLOB_RECURSE autoapp_lib_source_files ${autoapp_sources_directory}/App.cpp ${autoapp_sources_directory}/Configuration/*.cpp ${autoapp_sources_directory}/Projection/*.cpp ${autoapp_sources_directory}/Service/*.cpp)
file(GLOB_RECURSE autoapp_lib_inlcude_files ${autoapp_include_directory}/App.hpp ${autoapp_include_directory}/Configuration/*.hpp ${autoapp_include_directory}/Projection/*.hpp ${autoapp_include_directory}/Service/*.hpp)
add_library(auto SHARED ${autoapp_lib_source_files} ${autoapp_lib_inlcude_files})
message(STATUS "${GST_LIBRARIES}") message(STATUS "${GST_LIBRARIES}")
target_link_libraries(autoapp aasdk libusb
target_link_libraries(autoapp
${GST_LIBRARIES} ${GST_LIBRARIES}
${Boost_LIBRARIES} ${Boost_LIBRARIES}
${Qt5Multimedia_LIBRARIES} ${Qt5Multimedia_LIBRARIES}
${Qt5MultimediaWidgets_LIBRARIES} ${Qt5MultimediaWidgets_LIBRARIES}
${Qt5QuickWidgets_LIBRARIES} ${Qt5QuickWidgets_LIBRARIES}
${Qt5Bluetooth_LIBRARIES} ${Qt5Bluetooth_LIBRARIES}
${LIBUSB_1_LIBRARIES}
${PROTOBUF_LIBRARIES} ${PROTOBUF_LIBRARIES}
${ZLIB_LIBRARIES}
${BCM_HOST_LIBRARIES} ${BCM_HOST_LIBRARIES}
${ILCLIENT_LIBRARIES} ${ILCLIENT_LIBRARIES}
${WINSOCK2_LIBRARIES} ${WINSOCK2_LIBRARIES}
${RTAUDIO_LIBRARIES} ${RTAUDIO_LIBRARIES}
${AASDK_PROTO_LIBRARIES}
${AASDK_LIBRARIES}
${QTGLIB_LIBRARY} ${QTGLIB_LIBRARY}
${QTGLIB_LIBRARIES} ${QTGLIB_LIBRARIES}
${QTGSTREAMER_LIBRARY} ${QTGSTREAMER_LIBRARY}
@ -122,7 +126,8 @@ target_link_libraries(autoapp
${QTGSTREAMER_UI_LIBRARIES} ${QTGSTREAMER_UI_LIBRARIES}
${QTGSTREAMER_QUICK_LIBRARIES} ${QTGSTREAMER_QUICK_LIBRARIES}
${QTGSTREAMER_QUICK_LIBRARY} ${QTGSTREAMER_QUICK_LIBRARY}
${GOBJECT_LIBRARIES}) ${GOBJECT_LIBRARIES}
)
set(btservice_sources_directory ${sources_directory}/btservice) set(btservice_sources_directory ${sources_directory}/btservice)
set(btservice_include_directory ${include_directory}/f1x/openauto/btservice) set(btservice_include_directory ${include_directory}/f1x/openauto/btservice)
@ -135,4 +140,7 @@ target_link_libraries(btservice
${Qt5Bluetooth_LIBRARIES} ${Qt5Bluetooth_LIBRARIES}
${Qt5MultimediaWidgets_LIBRARIES} ${Qt5MultimediaWidgets_LIBRARIES}
${PROTOBUF_LIBRARIES} ${PROTOBUF_LIBRARIES}
${AASDK_PROTO_LIBRARIES}) )
install(TARGETS autoapp btservice
RUNTIME DESTINATION bin)

View File

@ -1,15 +1,6 @@
# OpenAuto # OpenAuto
### Support project
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=R4HXE5ESDR4U4)
**OpenAuto Pro version** provides features like brightness control, volume control, support of Kodi and integration with the Raspberry PI OS (Raspbian Desktop). [See how it works at OpenAuto Pro overview video](https://www.youtube.com/watch?v=9sTOMI1qTiA)
If you are looking for the car power supply with ignition state detection [go to the Blue Wave Studio page](https://bluewavestudio.io/index.php/bluewave-shop)
For support of other platforms please contact me at f1xstudiopl@gmail.com
### Community ### Community
[![Join the chat at https://gitter.im/publiclab/publiclab](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/openauto_androidauto/Lobby) [![Join the chat at https://gitter.im/publiclab/publiclab](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/openauto_androidauto/Lobby)
@ -18,6 +9,28 @@ OpenAuto is an AndroidAuto(tm) headunit emulator based on aasdk library and Qt l
[See demo video](https://www.youtube.com/watch?v=k9tKRqIkQs8) [See demo video](https://www.youtube.com/watch?v=k9tKRqIkQs8)
### Build Guide
#### Local build instructions for Raspberry Pi
Having <a href="https://github.com/openDsh/aasdk">aasdk</a> built and install first is a prequisite for this task. Please complete the necessary aasdk steps before proceeding here.
```sudo apt-get update
sudo apt-get -y install cmake build-essential git
sudo apt-get install libboost-all-dev libusb-1.0.0-dev libssl-dev cmake libprotobuf-dev protobuf-c-compiler protobuf-compiler libqt5multimedia5 libqt5multimedia5-plugins libqt5multimediawidgets5 qtmultimedia5-dev libqt5bluetooth5 libqt5bluetooth5-bin qtconnectivity5-dev pulseaudio librtaudio-dev
git clone https://github.com/OpenDsh/openauto
mkdir openauto_build; cd openauto_build
cmake -DCMAKE_BUILD_TYPE=Release -DRPI3_BUILD=TRUE -DAASDK_INCLUDE_DIRS="../aasdk/include" -DAASDK_LIBRARIES="../aasdk/lib/libaasdk.so" -DAASDK_PROTO_INCLUDE_DIRS="../aasdk" -DAASDK_PROTO_LIBRARIES="../aasdk/lib/libaasdk_proto.so" ../openauto
make -j2
sudo make install
```
The executable binary can then be found at ~/openauto/bin/autoapp
### Supported functionalities ### Supported functionalities
- 480p, 720p and 1080p with 30 or 60 FPS - 480p, 720p and 1080p with 30 or 60 FPS
- RaspberryPI 3 hardware acceleration support to decode video stream (up to 1080p@60!) - RaspberryPI 3 hardware acceleration support to decode video stream (up to 1080p@60!)
@ -53,4 +66,4 @@ Copyrights (c) 2018 f1x.studio (Michal Szwaj)
- OpenMAX IL API - OpenMAX IL API
### Remarks ### Remarks
**This software is not certified by Google Inc. It is created for R&D purposes and may not work as expected by the original authors. Do not use while driving. You use this software at your own risk.** **This software is not certified by Google Inc. It is created for R&D purposes and may not work as expected by the original authors. Do not use while driving. You use this software at your own risk.**

View File

@ -0,0 +1,43 @@
set (AASDK_DIR ~/aasdk)
find_path(AASDK_INCLUDE_DIR
f1x/aasdk/Version.hpp
PATHS ${AASDK_DIR}
PATH_SUFFIXES include
)
find_path(AASDK_PROTO_INCLUDE_DIR
aasdk_proto/AbsoluteInputEventData.pb.h
PATHS ${AASDK_DIR}
)
find_path(AASDK_LIB_DIR
libaasdk.so
PATHS ${AASDK_DIR}
PATH_SUFFIXES lib
)
if (AASDK_INCLUDE_DIR AND AASDK_PROTO_INCLUDE_DIR AND AASDK_LIB_DIR)
set(AASDK_FOUND TRUE)
endif()
if (AASDK_FOUND)
if (NOT aasdk_FIND_QUIETLY)
message(STATUS "Found aasdk:")
message(STATUS " - Includes: ${AASDK_INCLUDE_DIR}")
message(STATUS " - Libraries: ${AASDK_LIBRARIES}")
endif()
add_library(aasdk INTERFACE)
target_include_directories(aasdk INTERFACE ${AASDK_INCLUDE_DIR} ${AASDK_PROTO_INCLUDE_DIR})
target_link_libraries(aasdk INTERFACE ${AASDK_LIB_DIR}/libaasdk.so ${AASDK_LIB_DIR}/libaasdk_proto.so)
else()
if (aasdk_FIND_REQUIRED)
if(AASDK_INCLUDE_DIR AND NOT AASDK_PROTO_INCLUDE_DIR)
message(FATAL_ERROR "aasdk was found but not built. Perform an in-source build.")
else()
message(FATAL_ERROR "Could not find aasdk")
endif()
endif()
endif()
mark_as_advanced(AASDK_INCLUDE_DIRS AASDK_LIBRARIES)

View File

@ -0,0 +1,67 @@
set (OMX_DIR /opt/vc/)
find_path(BCM_HOST_INCLUDE_DIR
bcm_host.h
PATHS
${OMX_DIR}
PATH_SUFFIXES
include
)
find_path(BCM_HOST_LIB_DIR
libbcm_host.so
PATHS
${OMX_DIR}
PATH_SUFFIXES
lib
)
find_path(ILCLIENT_INCLUDE_DIR
ilclient.h
PATHS
${OMX_DIR}
PATH_SUFFIXES
src/hello_pi/libs/ilclient
)
find_path(ILCLIENT_LIB_DIR
libilclient.a
PATHS
${OMX_DIR}
PATH_SUFFIXES
src/hello_pi/libs/ilclient
)
if (BCM_HOST_INCLUDE_DIR AND ILCLIENT_INCLUDE_DIR AND BCM_HOST_LIB_DIR AND ILCLIENT_LIB_DIR)
set(libomx_FOUND TRUE)
endif()
if (libomx_FOUND)
if (NOT libomx_FIND_QUIETLY)
message(STATUS "Found omx:")
message(STATUS " - Bcm Host: ${BCM_HOST_INCLUDE_DIR}")
message(STATUS " - ilclient: ${ILCLIENT_INCLUDE_DIR}")
endif()
add_library(omx INTERFACE)
target_include_directories(omx SYSTEM INTERFACE
${BCM_HOST_INCLUDE_DIR}
${ILCLIENT_INCLUDE_DIR}
)
target_link_libraries(omx INTERFACE
${BCM_HOST_LIB_DIR}/libbcm_host.so
${ILCLIENT_LIB_DIR}/libilclient.a
${BCM_HOST_LIB_DIR}/libvcos.so
${BCM_HOST_LIB_DIR}/libvcilcs.a
${BCM_HOST_LIB_DIR}/libvchiq_arm.so
)
target_compile_definitions(omx INTERFACE
-DUSE_OMX
-DOMX_SKIP64BIT
-DRASPBERRYPI3
)
endif()

View File

@ -83,8 +83,11 @@ else (LIBUSB_1_LIBRARIES AND LIBUSB_1_INCLUDE_DIRS)
if (LIBUSB_1_FOUND) if (LIBUSB_1_FOUND)
if (NOT libusb_1_FIND_QUIETLY) if (NOT libusb_1_FIND_QUIETLY)
message(STATUS "Found libusb-1.0:") message(STATUS "Found libusb-1.0:")
message(STATUS " - Includes: ${LIBUSB_1_INCLUDE_DIRS}") message(STATUS " - Includes: ${LIBUSB_1_INCLUDE_DIRS}")
message(STATUS " - Libraries: ${LIBUSB_1_LIBRARIES}") message(STATUS " - Libraries: ${LIBUSB_1_LIBRARIES}")
add_library(libusb INTERFACE)
target_include_directories(libusb SYSTEM INTERFACE ${LIBUSB_1_INCLUDE_DIR})
target_link_libraries(libusb INTERFACE ${LIBUSB_1_LIBRARY})
endif (NOT libusb_1_FIND_QUIETLY) endif (NOT libusb_1_FIND_QUIETLY)
else (LIBUSB_1_FOUND) else (LIBUSB_1_FOUND)
if (libusb_1_FIND_REQUIRED) if (libusb_1_FIND_REQUIRED)

View File

@ -269,19 +269,19 @@ void OMXVideoOutput::setDestRect(DestRect destRect)
bool OMXVideoOutput::createComponents() bool OMXVideoOutput::createComponents()
{ {
if(ilclient_create_component(client_, &components_[VideoComponent::DECODER], "video_decode", static_cast<ILCLIENT_CREATE_FLAGS_T>(ILCLIENT_DISABLE_ALL_PORTS | ILCLIENT_ENABLE_INPUT_BUFFERS)) != 0) if(ilclient_create_component(client_, &components_[VideoComponent::DECODER], const_cast<char*>("video_decode"), static_cast<ILCLIENT_CREATE_FLAGS_T>(ILCLIENT_DISABLE_ALL_PORTS | ILCLIENT_ENABLE_INPUT_BUFFERS)) != 0)
{ {
OPENAUTO_LOG(error) << "[OMXVideoOutput] video decode component creation failed."; OPENAUTO_LOG(error) << "[OMXVideoOutput] video decode component creation failed.";
return false; return false;
} }
if(ilclient_create_component(client_, &components_[VideoComponent::RENDERER], "video_render", ILCLIENT_DISABLE_ALL_PORTS) != 0) if(ilclient_create_component(client_, &components_[VideoComponent::RENDERER], const_cast<char*>("video_render"), ILCLIENT_DISABLE_ALL_PORTS) != 0)
{ {
OPENAUTO_LOG(error) << "[OMXVideoOutput] video renderer component creation failed."; OPENAUTO_LOG(error) << "[OMXVideoOutput] video renderer component creation failed.";
return false; return false;
} }
if(ilclient_create_component(client_, &components_[VideoComponent::CLOCK], "clock", ILCLIENT_DISABLE_ALL_PORTS) != 0) if(ilclient_create_component(client_, &components_[VideoComponent::CLOCK], const_cast<char*>("clock"), ILCLIENT_DISABLE_ALL_PORTS) != 0)
{ {
OPENAUTO_LOG(error) << "[OMXVideoOutput] clock component creation failed."; OPENAUTO_LOG(error) << "[OMXVideoOutput] clock component creation failed.";
return false; return false;
@ -293,7 +293,7 @@ bool OMXVideoOutput::createComponents()
return false; return false;
} }
if(ilclient_create_component(client_, &components_[VideoComponent::SCHEDULER], "video_scheduler", ILCLIENT_DISABLE_ALL_PORTS) != 0) if(ilclient_create_component(client_, &components_[VideoComponent::SCHEDULER], const_cast<char*>("video_scheduler"), ILCLIENT_DISABLE_ALL_PORTS) != 0)
{ {
OPENAUTO_LOG(error) << "[OMXVideoOutput] video scheduler component creation failed."; OPENAUTO_LOG(error) << "[OMXVideoOutput] video scheduler component creation failed.";
return false; return false;