tici: fix loggerd (#1302)

* loggerd builds

* codec

* add frame_id cams

* working

* no qcam on tici

* pthread always

Co-authored-by: Tici <robbe@comma.ai>
old-commit-hash: cfcf3f9368
commatwo_master
George Hotz 5 years ago committed by GitHub
parent f5078e87bc
commit 860930b198
  1. 3
      SConstruct
  2. 3
      external/ffmpeg/larch64/.gitignore
  3. 3
      external/ffmpeg/larch64/build.sh
  4. 2
      selfdrive/camerad/cameras/camera_qcom2.c
  5. 4
      selfdrive/camerad/main.cc
  6. 5
      selfdrive/loggerd/SConscript
  7. 34
      selfdrive/loggerd/encoder.c
  8. 6
      selfdrive/loggerd/loggerd.cc

@ -49,13 +49,14 @@ if arch == "aarch64" or arch == "larch64":
libpath += ["#external/capnparm/lib", "/usr/lib/aarch64-linux-gnu"] libpath += ["#external/capnparm/lib", "/usr/lib/aarch64-linux-gnu"]
cflags = ["-DQCOM2", "-mcpu=cortex-a57"] cflags = ["-DQCOM2", "-mcpu=cortex-a57"]
cxxflags = ["-DQCOM2", "-mcpu=cortex-a57"] cxxflags = ["-DQCOM2", "-mcpu=cortex-a57"]
rpath = ["/usr/local/lib"]
else: else:
libpath += ["#phonelibs/snpe/aarch64"] libpath += ["#phonelibs/snpe/aarch64"]
libpath += ["#phonelibs/libyuv/lib"] libpath += ["#phonelibs/libyuv/lib"]
cflags = ["-DQCOM", "-mcpu=cortex-a57"] cflags = ["-DQCOM", "-mcpu=cortex-a57"]
cxxflags = ["-DQCOM", "-mcpu=cortex-a57"] cxxflags = ["-DQCOM", "-mcpu=cortex-a57"]
rpath = ["/system/vendor/lib64"]
rpath = ["/system/vendor/lib64"]
else: else:
lenv = { lenv = {
"PATH": "#external/bin:" + os.environ['PATH'], "PATH": "#external/bin:" + os.environ['PATH'],

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:25f53fb2225e24dc7b17f89a3da848df15e1e9db3d2151e4584cc6bf852b82fb
size 14

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:11181fcc6d829c2366770318b0f726ab9e2dd8c1a47f9d3409d2ae96a1ea5b29
size 552

@ -895,6 +895,7 @@ struct video_event_data {
void cameras_run(DualCameraState *s) { void cameras_run(DualCameraState *s) {
LOG("-- Dequeueing Video events"); LOG("-- Dequeueing Video events");
int frame_id = 1;
while (!do_exit) { while (!do_exit) {
struct pollfd fds[2] = {{0}}; struct pollfd fds[2] = {{0}};
@ -927,6 +928,7 @@ void cameras_run(DualCameraState *s) {
if (s->rear.request_ids[j] == event_data->frame_id) { if (s->rear.request_ids[j] == event_data->frame_id) {
// TODO: support more than rear camera // TODO: support more than rear camera
tbuffer_dispatch(&s->rear.camera_tb, j); tbuffer_dispatch(&s->rear.camera_tb, j);
s->rear.camera_bufs_metadata[j].frame_id = frame_id++;
break; break;
} }
} }

@ -459,8 +459,8 @@ void* processing_thread(void *arg) {
#endif #endif
// TODO: add this back // TODO: add this back
//#if !defined(QCOM) && !defined(QCOM2) #if !defined(QCOM) && !defined(QCOM2)
#ifndef QCOM //#ifndef QCOM
framed.setImage(kj::arrayPtr((const uint8_t*)s->yuv_ion[yuv_idx].addr, s->yuv_buf_size)); framed.setImage(kj::arrayPtr((const uint8_t*)s->yuv_ion[yuv_idx].addr, s->yuv_buf_size));
#endif #endif

@ -8,5 +8,10 @@ libs = ['zmq', 'czmq', 'capnp', 'kj', 'z',
if arch == "aarch64": if arch == "aarch64":
src += ['encoder.c', 'raw_logger.cc'] src += ['encoder.c', 'raw_logger.cc']
libs += ['OmxVenc', 'OmxCore', 'cutils'] libs += ['OmxVenc', 'OmxCore', 'cutils']
elif arch == "larch64":
src += ['encoder.c', 'raw_logger.cc']
libs += ['OmxVenc', 'OmxCore', 'pthread']
else:
libs += ['pthread']
env.Program(src, LIBS=libs) env.Program(src, LIBS=libs)

@ -15,7 +15,7 @@
#include <libyuv.h> #include <libyuv.h>
#include <android/log.h> //#include <android/log.h>
#include <msm_media_info.h> #include <msm_media_info.h>
@ -24,7 +24,7 @@
#include "encoder.h" #include "encoder.h"
#define ALOG(...) __android_log_print(ANDROID_LOG_VERBOSE, "omxapp", ##__VA_ARGS__) //#define ALOG(...) __android_log_print(ANDROID_LOG_VERBOSE, "omxapp", ##__VA_ARGS__)
// encoder: lossey codec using hardware hevc // encoder: lossey codec using hardware hevc
static void wait_for_state(EncoderState *s, OMX_STATETYPE state) { static void wait_for_state(EncoderState *s, OMX_STATETYPE state) {
@ -204,6 +204,9 @@ void encoder_init(EncoderState *s, const char* filename, int width, int height,
err = OMX_GetHandle(&s->handle, (OMX_STRING)"OMX.qcom.video.encoder.avc", err = OMX_GetHandle(&s->handle, (OMX_STRING)"OMX.qcom.video.encoder.avc",
s, &omx_callbacks); s, &omx_callbacks);
} }
if (err != OMX_ErrorNone) {
LOGE("error getting codec: %x", err);
}
assert(err == OMX_ErrorNone); assert(err == OMX_ErrorNone);
// printf("handle: %p\n", s->handle); // printf("handle: %p\n", s->handle);
@ -283,20 +286,22 @@ void encoder_init(EncoderState *s, const char* filename, int width, int height,
assert(err == OMX_ErrorNone); assert(err == OMX_ErrorNone);
if (h265) { if (h265) {
// setup HEVC #ifndef QCOM2
OMX_VIDEO_PARAM_HEVCTYPE hecv_type = {0}; // setup HEVC
hecv_type.nSize = sizeof(hecv_type); OMX_VIDEO_PARAM_HEVCTYPE hecv_type = {0};
hecv_type.nPortIndex = (OMX_U32) PORT_INDEX_OUT; hecv_type.nSize = sizeof(hecv_type);
err = OMX_GetParameter(s->handle, (OMX_INDEXTYPE)OMX_IndexParamVideoHevc, hecv_type.nPortIndex = (OMX_U32) PORT_INDEX_OUT;
(OMX_PTR) &hecv_type); err = OMX_GetParameter(s->handle, (OMX_INDEXTYPE)OMX_IndexParamVideoHevc,
assert(err == OMX_ErrorNone); (OMX_PTR) &hecv_type);
assert(err == OMX_ErrorNone);
hecv_type.eProfile = OMX_VIDEO_HEVCProfileMain; hecv_type.eProfile = OMX_VIDEO_HEVCProfileMain;
hecv_type.eLevel = OMX_VIDEO_HEVCHighTierLevel5; hecv_type.eLevel = OMX_VIDEO_HEVCHighTierLevel5;
err = OMX_SetParameter(s->handle, (OMX_INDEXTYPE)OMX_IndexParamVideoHevc, err = OMX_SetParameter(s->handle, (OMX_INDEXTYPE)OMX_IndexParamVideoHevc,
(OMX_PTR) &hecv_type); (OMX_PTR) &hecv_type);
assert(err == OMX_ErrorNone); assert(err == OMX_ErrorNone);
#endif
} else { } else {
// setup h264 // setup h264
OMX_VIDEO_PARAM_AVCTYPE avc = { 0 }; OMX_VIDEO_PARAM_AVCTYPE avc = { 0 };
@ -552,6 +557,7 @@ void encoder_open(EncoderState *s, const char* path) {
pthread_mutex_lock(&s->lock); pthread_mutex_lock(&s->lock);
snprintf(s->vid_path, sizeof(s->vid_path), "%s/%s", path, s->filename); snprintf(s->vid_path, sizeof(s->vid_path), "%s/%s", path, s->filename);
LOGD("encoder_open %s remuxing:%d", s->vid_path, s->remuxing);
if (s->remuxing) { if (s->remuxing) {
avformat_alloc_output_context2(&s->ofmt_ctx, NULL, NULL, s->vid_path); avformat_alloc_output_context2(&s->ofmt_ctx, NULL, NULL, s->vid_path);

@ -41,7 +41,7 @@
#include "messaging.hpp" #include "messaging.hpp"
#include "services.h" #include "services.h"
#ifndef QCOM #if !(defined(QCOM) || defined(QCOM2))
// no encoder on PC // no encoder on PC
#define DISABLE_ENCODER #define DISABLE_ENCODER
#endif #endif
@ -137,10 +137,14 @@ void encoder_thread(bool is_streaming, bool raw_clips, bool front) {
if (!encoder_inited) { if (!encoder_inited) {
LOGD("encoder init %dx%d", buf_info.width, buf_info.height); LOGD("encoder init %dx%d", buf_info.width, buf_info.height);
encoder_init(&encoder, front ? "dcamera.hevc" : "fcamera.hevc", buf_info.width, buf_info.height, CAMERA_FPS, front ? 2500000 : 5000000, true, false); encoder_init(&encoder, front ? "dcamera.hevc" : "fcamera.hevc", buf_info.width, buf_info.height, CAMERA_FPS, front ? 2500000 : 5000000, true, false);
#ifndef QCOM2
// TODO: fix qcamera on tici
if (!front) { if (!front) {
encoder_init(&encoder_alt, "qcamera.ts", 480, 360, CAMERA_FPS, 128000, false, true); encoder_init(&encoder_alt, "qcamera.ts", 480, 360, CAMERA_FPS, 128000, false, true);
has_encoder_alt = true; has_encoder_alt = true;
} }
#endif
encoder_inited = true; encoder_inited = true;
if (is_streaming) { if (is_streaming) {
encoder.zmq_ctx = zmq_ctx_new(); encoder.zmq_ctx = zmq_ctx_new();

Loading…
Cancel
Save