From 7cf47a58e40da433725483babfec232722576160 Mon Sep 17 00:00:00 2001 From: "zejian.su" Date: Thu, 21 Dec 2023 19:05:43 +0800 Subject: [PATCH] Fix the qt window size and simplify the qt ping-pang buffer. Signed-off-by: zejian.su --- ...01-Make-libcamera-hello-run-normally.patch | 284 - ...002-Make-libcamera-jpeg-run-normally.patch | 222 - ...03-Make-libcamera-still-run-normally.patch | 204 - ...0004-Make-libcamera-vid-run-normally.patch | 8578 ----------------- ...t-the-option-width-height-work-again.patch | 28 - ...6-Make-the-qt-preview-work-in-debian.patch | 148 - ...a-still-bug-at-low-resolution-redmin.patch | 37 - ...oom-the-input-image-to-fit-the-scree.patch | 300 - ...ue-between-the-Preview.Show-and-the-.patch | 291 - .../libcamera-apps/libcamera-apps.hash | 2 +- .../starfive/libcamera-apps/libcamera-apps.mk | 4 +- 11 files changed, 3 insertions(+), 10095 deletions(-) delete mode 100644 package/starfive/libcamera-apps/0001-Make-libcamera-hello-run-normally.patch delete mode 100644 package/starfive/libcamera-apps/0002-Make-libcamera-jpeg-run-normally.patch delete mode 100644 package/starfive/libcamera-apps/0003-Make-libcamera-still-run-normally.patch delete mode 100644 package/starfive/libcamera-apps/0004-Make-libcamera-vid-run-normally.patch delete mode 100644 package/starfive/libcamera-apps/0005-Let-the-option-width-height-work-again.patch delete mode 100644 package/starfive/libcamera-apps/0006-Make-the-qt-preview-work-in-debian.patch delete mode 100644 package/starfive/libcamera-apps/0007-Fix-the-libcamera-still-bug-at-low-resolution-redmin.patch delete mode 100644 package/starfive/libcamera-apps/0008-In-DRM-preview-zoom-the-input-image-to-fit-the-scree.patch delete mode 100644 package/starfive/libcamera-apps/0009-Fix-the-sync-issue-between-the-Preview.Show-and-the-.patch diff --git a/package/starfive/libcamera-apps/0001-Make-libcamera-hello-run-normally.patch b/package/starfive/libcamera-apps/0001-Make-libcamera-hello-run-normally.patch deleted file mode 100644 index 4fbd3ac3..00000000 --- a/package/starfive/libcamera-apps/0001-Make-libcamera-hello-run-normally.patch +++ /dev/null @@ -1,284 +0,0 @@ -From 2982813d58c13077c06d1c3c44cd60b0b93d1f4e Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Thu, 12 Oct 2023 11:54:09 +0800 -Subject: [PATCH 1/4] Make libcamera-hello run normally - ---- - core/libcamera_app.cpp | 53 ++++++++++++++------------ - preview/drm_preview.cpp | 84 +++++++++++++++++++++++++++++++++++------ - 2 files changed, 100 insertions(+), 37 deletions(-) - -diff --git a/core/libcamera_app.cpp b/core/libcamera_app.cpp -index d3a6b63..cc76e9b 100644 ---- a/core/libcamera_app.cpp -+++ b/core/libcamera_app.cpp -@@ -247,23 +247,24 @@ void LibcameraApp::ConfigureViewfinder() - if (!configuration_) - throw std::runtime_error("failed to generate viewfinder configuration"); - -- Size size(1280, 960); -- auto area = camera_->properties().get(properties::PixelArrayActiveAreas); -+ //Size size(1280, 960); -+ Size size = configuration_->at(0).size; -+ //auto area = camera_->properties().get(properties::PixelArrayActiveAreas); - if (options_->viewfinder_width && options_->viewfinder_height) - size = Size(options_->viewfinder_width, options_->viewfinder_height); -- else if (area) -- { -- // The idea here is that most sensors will have a 2x2 binned mode that -- // we can pick up. If it doesn't, well, you can always specify the size -- // you want exactly with the viewfinder_width/height options_-> -- size = (*area)[0].size() / 2; -- // If width and height were given, we might be switching to capture -- // afterwards - so try to match the field of view. -- if (options_->width && options_->height) -- size = size.boundedToAspectRatio(Size(options_->width, options_->height)); -- size.alignDownTo(2, 2); // YUV420 will want to be even -- LOG(2, "Viewfinder size chosen is " << size.toString()); -- } -+ //else if (area) -+ //{ -+ // // The idea here is that most sensors will have a 2x2 binned mode that -+ // // we can pick up. If it doesn't, well, you can always specify the size -+ // // you want exactly with the viewfinder_width/height options_-> -+ // size = (*area)[0].size() / 2; -+ // // If width and height were given, we might be switching to capture -+ // // afterwards - so try to match the field of view. -+ // if (options_->width && options_->height) -+ // size = size.boundedToAspectRatio(Size(options_->width, options_->height)); -+ // size.alignDownTo(2, 2); // YUV420 will want to be even -+ // LOG(2, "Viewfinder size chosen is " << size.toString()); -+ //} - - // Finally trim the image size to the largest that the preview can handle. - Size max_size; -@@ -275,7 +276,7 @@ void LibcameraApp::ConfigureViewfinder() - } - - // Now we get to override any of the default settings from the options_-> -- configuration_->at(0).pixelFormat = libcamera::formats::YUV420; -+ //configuration_->at(0).pixelFormat = libcamera::formats::YUV420; - configuration_->at(0).size = size; - if (options_->viewfinder_buffer_count > 0) - configuration_->at(0).bufferCount = options_->viewfinder_buffer_count; -@@ -286,7 +287,7 @@ void LibcameraApp::ConfigureViewfinder() - lores_size.alignDownTo(2, 2); - if (lores_size.width > size.width || lores_size.height > size.height) - throw std::runtime_error("Low res image larger than viewfinder"); -- configuration_->at(lores_stream_num).pixelFormat = libcamera::formats::YUV420; -+ //configuration_->at(lores_stream_num).pixelFormat = libcamera::formats::YUV420; - configuration_->at(lores_stream_num).size = lores_size; - configuration_->at(lores_stream_num).bufferCount = configuration_->at(0).bufferCount; - } -@@ -297,7 +298,7 @@ void LibcameraApp::ConfigureViewfinder() - if (have_raw_stream) - { - configuration_->at(raw_stream_num).size = options_->viewfinder_mode.Size(); -- configuration_->at(raw_stream_num).pixelFormat = mode_to_pixel_format(options_->viewfinder_mode); -+ //configuration_->at(raw_stream_num).pixelFormat = mode_to_pixel_format(options_->viewfinder_mode); - configuration_->at(raw_stream_num).bufferCount = configuration_->at(0).bufferCount; - } - -@@ -335,8 +336,9 @@ void LibcameraApp::ConfigureStill(unsigned int flags) - configuration_->at(0).pixelFormat = libcamera::formats::BGR888; - else if (flags & FLAG_STILL_RGB) - configuration_->at(0).pixelFormat = libcamera::formats::RGB888; -- else -- configuration_->at(0).pixelFormat = libcamera::formats::YUV420; -+ else { -+ //configuration_->at(0).pixelFormat = libcamera::formats::YUV420; -+ } - if ((flags & FLAG_STILL_BUFFER_MASK) == FLAG_STILL_DOUBLE_BUFFER) - configuration_->at(0).bufferCount = 2; - else if ((flags & FLAG_STILL_BUFFER_MASK) == FLAG_STILL_TRIPLE_BUFFER) -@@ -358,8 +360,8 @@ void LibcameraApp::ConfigureStill(unsigned int flags) - configuration_->at(1).pixelFormat = mode_to_pixel_format(options_->mode); - } - configuration_->at(1).bufferCount = configuration_->at(0).bufferCount; -- - configureDenoise(options_->denoise == "auto" ? "cdn_hq" : options_->denoise); -+ - setupCapture(); - - streams_["still"] = configuration_->at(0).stream(); -@@ -392,7 +394,7 @@ void LibcameraApp::ConfigureVideo(unsigned int flags) - - // Now we get to override any of the default settings from the options_-> - StreamConfiguration &cfg = configuration_->at(0); -- cfg.pixelFormat = libcamera::formats::YUV420; -+ //cfg.pixelFormat = libcamera::formats::YUV420; - cfg.bufferCount = 6; // 6 buffers is better than 4 - if (options_->buffer_count > 0) - cfg.bufferCount = options_->buffer_count; -@@ -431,7 +433,7 @@ void LibcameraApp::ConfigureVideo(unsigned int flags) - if (lores_size.width > configuration_->at(0).size.width || - lores_size.height > configuration_->at(0).size.height) - throw std::runtime_error("Low res image larger than video"); -- configuration_->at(lores_index).pixelFormat = libcamera::formats::YUV420; -+ //configuration_->at(lores_index).pixelFormat = libcamera::formats::YUV420; - configuration_->at(lores_index).size = lores_size; - configuration_->at(lores_index).bufferCount = configuration_->at(0).bufferCount; - } -@@ -959,8 +961,9 @@ void LibcameraApp::previewThread() - preview_cond_var_.wait(lock); - } - -- if (item.stream->configuration().pixelFormat != libcamera::formats::YUV420) -- throw std::runtime_error("Preview windows only support YUV420"); -+ if (item.stream->configuration().pixelFormat != libcamera::formats::YUV420 && -+ item.stream->configuration().pixelFormat != libcamera::formats::NV12) -+ throw std::runtime_error("Preview windows only support YUV420 and NV12"); - - StreamInfo info = GetStreamInfo(item.stream); - FrameBuffer *buffer = item.completed_request->buffers[item.stream]; -diff --git a/preview/drm_preview.cpp b/preview/drm_preview.cpp -index 4d6cf0d..38fc6a2 100644 ---- a/preview/drm_preview.cpp -+++ b/preview/drm_preview.cpp -@@ -10,6 +10,8 @@ - #include - #include - #include -+#include -+#include - - #include "core/options.hpp" - -@@ -48,6 +50,7 @@ private: - void findPlane(); - int drmfd_; - int conId_; -+ drmModeConnector *con_; - uint32_t crtcId_; - int crtcIdx_; - uint32_t planeId_; -@@ -93,10 +96,21 @@ void DrmPreview::findCrtc() - if (con->encoder_id) - { - enc = drmModeGetEncoder(drmfd_, con->encoder_id); -- if (enc->crtc_id) -- { -- crtc = drmModeGetCrtc(drmfd_, enc->crtc_id); -- } -+ //if (enc->crtc_id) -+ //{ -+ // crtc = drmModeGetCrtc(drmfd_, enc->crtc_id); -+ //} -+ } else -+ { -+ enc = drmModeGetEncoder(drmfd_, con->encoders[0]); -+ } -+ -+ if (enc->crtc_id) -+ { -+ crtc = drmModeGetCrtc(drmfd_, enc->crtc_id); -+ } else -+ { -+ crtc = drmModeGetCrtc(drmfd_, res->crtcs[0]); - } - - if (!conId_ && crtc) -@@ -158,6 +172,8 @@ void DrmPreview::findCrtc() - throw std::runtime_error("connector supports no mode"); - } - -+ con_ = c; -+ - if (options_->fullscreen || width_ == 0 || height_ == 0) - { - drmModeCrtc *crtc = drmModeGetCrtc(drmfd_, crtcId_); -@@ -225,10 +241,13 @@ void DrmPreview::findPlane() - - DrmPreview::DrmPreview(Options const *options) : Preview(options), last_fd_(-1), first_time_(true) - { -- drmfd_ = drmOpen("vc4", NULL); -+ //drmfd_ = drmOpen("vc4", NULL); -+ drmfd_ = drmOpen("starfive", NULL); - if (drmfd_ < 0) - throw std::runtime_error("drmOpen failed: " + std::string(ERRSTR)); - -+ drmSetClientCap(drmfd_, DRM_CLIENT_CAP_UNIVERSAL_PLANES, 1); -+ - x_ = options_->preview_x; - y_ = options_->preview_y; - width_ = options_->preview_width; -@@ -243,7 +262,8 @@ DrmPreview::DrmPreview(Options const *options) : Preview(options), last_fd_(-1), - - conId_ = 0; - findCrtc(); -- out_fourcc_ = DRM_FORMAT_YUV420; -+ //out_fourcc_ = DRM_FORMAT_YUV420; -+ out_fourcc_ = DRM_FORMAT_NV12; - findPlane(); - } - catch (std::exception const &e) -@@ -347,6 +367,7 @@ static void setup_colour_space(int fd, int plane_id, std::optionalcount_modes; m++) { -+ modeptr = &con_->modes[m]; -+ if (modeptr->hdisplay == width && modeptr->vdisplay == height) { -+ preferred = modeptr; -+ std::cout << "find the matched mode, modes index= " -+ << m << ", " << width << "x" << height << std::endl; -+ break; -+ } -+ if (modeptr->type & DRM_MODE_TYPE_PREFERRED) { -+ preferred = modeptr; -+ std::cout << "find perferred mode, modes index= " << m << std::endl; -+ } -+ } -+ -+ if (!preferred) -+ preferred = &con_->modes[0]; -+ -+ // set default -+ if (drmModeSetCrtc(drmfd_, crtcId_, buffer.fb_handle, 0, 0, -+ (uint32_t *)&conId_, 1, preferred)) { -+ throw std::runtime_error("drmModeSetCrtc() failed"); -+ } -+ -+ screen_width_ = preferred->hdisplay; -+ screen_height_ = preferred->vdisplay; -+ width_ = width; -+ height_ = height; - } - - void DrmPreview::Show(int fd, libcamera::Span span, StreamInfo const &info) --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/0002-Make-libcamera-jpeg-run-normally.patch b/package/starfive/libcamera-apps/0002-Make-libcamera-jpeg-run-normally.patch deleted file mode 100644 index a504738c..00000000 --- a/package/starfive/libcamera-apps/0002-Make-libcamera-jpeg-run-normally.patch +++ /dev/null @@ -1,222 +0,0 @@ -From d02d3b3a6c0abdfd8a89ee92447df7d8d48639d5 Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Thu, 12 Oct 2023 11:55:47 +0800 -Subject: [PATCH 2/4] Make libcamera-jpeg run normally - ---- - apps/libcamera_jpeg.cpp | 28 +++++---- - core/CMakeLists.txt | 2 +- - core/cvt_color_format.cpp | 119 ++++++++++++++++++++++++++++++++++++++ - image/jpeg.cpp | 1 + - 4 files changed, 134 insertions(+), 16 deletions(-) - create mode 100755 core/cvt_color_format.cpp - -diff --git a/apps/libcamera_jpeg.cpp b/apps/libcamera_jpeg.cpp -index 05a632b..b791960 100644 ---- a/apps/libcamera_jpeg.cpp -+++ b/apps/libcamera_jpeg.cpp -@@ -15,6 +15,8 @@ - using namespace std::placeholders; - using libcamera::Stream; - -+void NV12ToYUV420(const libcamera::Span &mem, std::vector> &yuv420, StreamInfo &info); -+ - class LibcameraJpegApp : public LibcameraApp - { - public: -@@ -61,10 +63,19 @@ static void event_loop(LibcameraJpegApp &app) - auto now = std::chrono::high_resolution_clock::now(); - if (options->timeout && now - start_time > std::chrono::milliseconds(options->timeout)) - { -+ Stream *stream = app.ViewfinderStream(); -+ StreamInfo info = app.GetStreamInfo(stream); -+ CompletedRequestPtr &payload = std::get(msg.payload); -+ const std::vector> mem = app.Mmap(payload->buffers[stream]); -+ std::vector> yuv420; -+ -+ NV12ToYUV420(mem[0], yuv420, info); - app.StopCamera(); - app.Teardown(); -- app.ConfigureStill(); -- app.StartCamera(); -+ -+ jpeg_save(yuv420, info, payload->metadata, options->output, app.CameraModel(), options); -+ delete[] yuv420[0].data(); -+ return; - } - else - { -@@ -72,19 +83,6 @@ static void event_loop(LibcameraJpegApp &app) - app.ShowPreview(completed_request, app.ViewfinderStream()); - } - } -- // In still capture mode, save a jpeg and quit. -- else if (app.StillStream()) -- { -- app.StopCamera(); -- LOG(1, "Still capture image received"); -- -- Stream *stream = app.StillStream(); -- StreamInfo info = app.GetStreamInfo(stream); -- CompletedRequestPtr &payload = std::get(msg.payload); -- const std::vector> mem = app.Mmap(payload->buffers[stream]); -- jpeg_save(mem, info, payload->metadata, options->output, app.CameraModel(), options); -- return; -- } - } - } - -diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt -index b601538..5d9ee30 100644 ---- a/core/CMakeLists.txt -+++ b/core/CMakeLists.txt -@@ -7,7 +7,7 @@ find_package(Boost REQUIRED COMPONENTS program_options) - add_custom_target(VersionCpp ${CMAKE_COMMAND} -DSOURCE_DIR=${CMAKE_SOURCE_DIR} -P ${CMAKE_CURRENT_LIST_DIR}/version.cmake) - set_source_files_properties(version.cpp PROPERTIES GENERATED 1) - --add_library(libcamera_app libcamera_app.cpp post_processor.cpp version.cpp options.cpp) -+add_library(libcamera_app libcamera_app.cpp post_processor.cpp version.cpp options.cpp cvt_color_format.cpp) - add_dependencies(libcamera_app VersionCpp) - - set_target_properties(libcamera_app PROPERTIES PREFIX "" IMPORT_PREFIX "" VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) -diff --git a/core/cvt_color_format.cpp b/core/cvt_color_format.cpp -new file mode 100755 -index 0000000..9ff2b6b ---- /dev/null -+++ b/core/cvt_color_format.cpp -@@ -0,0 +1,119 @@ -+/* SPDX-License-Identifier: BSD-2-Clause */ -+/* -+ * Copyright (C) 2023, Starfive Technology Co., Ltd. -+ * -+ * cvt_color_format.cpp - convert other format to yuv420. -+ */ -+ -+#include -+#include -+#include -+#include "core/still_options.hpp" -+ -+void NV12ToYUV420(const uint8_t *mem, uint8_t *dst, const StreamInfo &info) -+{ -+ const uint8_t *src = mem; -+ uint32_t width = info.width, height = info.height, stride = info.stride; -+ uint8_t *u = dst + height * stride; -+ uint8_t *v = u + ((height * width) >> 2); -+ uint32_t i; -+ -+ memcpy(dst, src, height * stride); -+ -+ src += height * stride; -+ for(i = 0; i < (height * width) >> 2; i++, src += 2) -+ u[i] = src[0], v[i] = src[1]; -+} -+ -+void NV12ToYUV420(const libcamera::Span &mem, uint8_t *dst, const StreamInfo &info) -+{ -+ NV12ToYUV420((const uint8_t *)(mem.data()), dst, info); -+/* -+ const uint8_t *src = mem.data(); -+ uint32_t width = info.width, height = info.height, stride = info.stride; -+ uint8_t *u = dst + height * stride; -+ uint8_t *v = u + ((height * width) >> 2); -+ uint32_t i; -+ -+ memcpy(dst, src, height * stride); -+ -+ src += height * stride; -+ for(i = 0; i < (height * width) >> 2; i++, src += 2) -+ u[i] = src[0], v[i] = src[1]; -+*/ -+} -+ -+void NV12ToYUV420(const libcamera::Span &mem, std::vector> &yuv420, StreamInfo &info) -+{ -+ uint32_t imgBufSize = info.height * info.stride + ((info.height * info.width) >> 1); -+ uint8_t * yuv420Buf = new uint8_t[imgBufSize]; -+ -+ if(!yuv420Buf) -+ throw std::runtime_error("fail to apply memory"); -+ -+ yuv420.push_back(libcamera::Span(yuv420Buf, imgBufSize)); -+ -+ NV12ToYUV420(mem, yuv420Buf, info); -+ info.pixel_format = libcamera::formats::YUV420; -+} -+ -+template -+void NV12ToRGB888(const libcamera::Span &mem, uint8_t *dst, const StreamInfo &info) -+{ -+ uint32_t width = info.width, height = info.height, stride = info.stride; -+ const uint8_t *yRow = mem.data(); -+ const uint8_t *uv = yRow + height * stride; -+ int ri = R ? 2 : 0; -+ -+ for(uint32_t i = 0; i < height; i++, yRow += stride, dst += 3 * width) -+ { -+ const uint8_t * curUV = uv; -+ uint8_t * curDst = dst; -+ for(uint32_t j = 0; j < width; j++, curDst += 3) -+ { -+ int32_t y = (int32_t)yRow[j] - 16; -+ int32_t u = (int32_t)curUV[0] - 128; -+ int32_t v = (int32_t)curUV[1] - 128; -+ int32_t val; -+ -+ val = (1192 * y + 2066 * u - v) >> 10; -+ curDst[ri] = val < 0 ? 0 : (val > 255 ? 255 : (uint8_t)val); -+ val = (1192 * y - 401 * u - 833 * v) >> 10; -+ curDst[1] = val < 0 ? 0 : (val > 255 ? 255 : (uint8_t)val); -+ val = (1192 * y - 2 * u + 1634 * v) >> 10; -+ curDst[2 - ri] = val < 0 ? 0 : (val > 255 ? 255 : (uint8_t)val); -+ -+ if(j & 1) -+ curUV += 2; -+ } -+ if(i & 1) -+ uv += width; -+ } -+} -+ -+template -+void RGB888FromNV12(const libcamera::Span &mem, std::vector> &rgb888, StreamInfo &info) -+{ -+ uint32_t imgBufSize = info.height * info.width * 3; -+ uint8_t * rgb888Buf = new uint8_t[imgBufSize]; -+ -+ if(!rgb888Buf) -+ throw std::runtime_error("fail to apply memory"); -+ -+ rgb888.push_back(libcamera::Span(rgb888Buf, imgBufSize)); -+ -+ NV12ToRGB888(mem, rgb888Buf, info); -+ info.stride = 3 * info.width; -+} -+ -+void NV12ToRGB888(const libcamera::Span &mem, std::vector> &rgb888, StreamInfo &info) -+{ -+ RGB888FromNV12<0>(mem, rgb888, info); -+ info.pixel_format = libcamera::formats::RGB888; -+} -+ -+void NV12ToBGR888(const libcamera::Span &mem, std::vector> &rgb888, StreamInfo &info) -+{ -+ RGB888FromNV12<2>(mem, rgb888, info); -+ info.pixel_format = libcamera::formats::BGR888; -+} -\ No newline at end of file -diff --git a/image/jpeg.cpp b/image/jpeg.cpp -index e3516ef..872f5c6 100644 ---- a/image/jpeg.cpp -+++ b/image/jpeg.cpp -@@ -447,6 +447,7 @@ static void create_exif_data(std::vector> const &mem, S - exif = exif_data_new(); - if (!exif) - throw std::runtime_error("failed to allocate EXIF data"); -+ - exif_data_set_byte_order(exif, exif_byte_order); - - // First add some fixed EXIF tags. --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/0003-Make-libcamera-still-run-normally.patch b/package/starfive/libcamera-apps/0003-Make-libcamera-still-run-normally.patch deleted file mode 100644 index 3e484b84..00000000 --- a/package/starfive/libcamera-apps/0003-Make-libcamera-still-run-normally.patch +++ /dev/null @@ -1,204 +0,0 @@ -From f79f0914c3f8e740cf653da0dd14e5664760188d Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Thu, 12 Oct 2023 11:56:48 +0800 -Subject: [PATCH 3/4] Make libcamera-still run normally - ---- - apps/libcamera_still.cpp | 137 +++++++++++++++++++++++++-------------- - image/dng.cpp | 1 - - 2 files changed, 88 insertions(+), 50 deletions(-) - -diff --git a/apps/libcamera_still.cpp b/apps/libcamera_still.cpp -index 856f1be..bd44818 100644 ---- a/apps/libcamera_still.cpp -+++ b/apps/libcamera_still.cpp -@@ -74,22 +74,79 @@ static void update_latest_link(std::string const &filename, StillOptions const * - } - } - -+void cvtRawData(const libcamera::Span &mem, std::vector> &packRaw, StreamInfo &info) -+{ -+ const uint8_t *src = (uint8_t *)mem.data(); -+ uint32_t width = info.width, height = info.height; -+ uint32_t bufSize = (width * height) + ((width * height) >> 1); -+ uint8_t * dstBuf = new uint8_t[bufSize]; -+ uint8_t * dst = dstBuf; -+ uint32_t srcStride = ((width * 12 / 8 + 8 * 16 - 1) / (8 * 16)) * 128; -+ -+ if(!dst) -+ throw std::runtime_error("fail to apply memory"); -+ -+ for(uint32_t i = 0; i < height; i++, src += srcStride, dst += (3 * width) >> 1) { -+ const uint8_t *srcRow = src; -+ uint8_t * dstRow = dst; -+ for(uint32_t j = 0; j < width; j += 2, srcRow += 3, dstRow += 3) { -+ dstRow[0] = ((srcRow[1] & 0xf) << 4) | (srcRow[0] >> 4); -+ dstRow[1] = srcRow[2]; -+ dstRow[2] = (srcRow[1] & 0xf0) | (srcRow[0] & 0xf); -+ } -+ } -+ -+ packRaw.push_back(libcamera::Span(dstBuf, bufSize)); -+ -+ if(libcamera::formats::SRGGB12 == info.pixel_format) -+ info.pixel_format = libcamera::formats::SRGGB12_CSI2P; -+ else if(libcamera::formats::SGRBG12 == info.pixel_format) -+ info.pixel_format = libcamera::formats::SGRBG12_CSI2P; -+ else if(libcamera::formats::SBGGR12 == info.pixel_format) -+ info.pixel_format = libcamera::formats::SBGGR12_CSI2P; -+ else if(libcamera::formats::SGBRG12 == info.pixel_format) -+ info.pixel_format = libcamera::formats::SGBRG12_CSI2P; -+ else -+ throw std::runtime_error("unsupported Bayer format"); -+ info.stride = (3 * width) >> 1; -+} -+ -+void NV12ToYUV420(const libcamera::Span &mem, std::vector> &yuv420, StreamInfo &info); -+void NV12ToRGB888(const libcamera::Span &mem, std::vector> &rgb888, StreamInfo &info); -+void NV12ToBGR888(const libcamera::Span &mem, std::vector> &rgb888, StreamInfo &info); -+ - static void save_image(LibcameraStillApp &app, CompletedRequestPtr &payload, Stream *stream, - std::string const &filename) - { - StillOptions const *options = app.GetOptions(); - StreamInfo info = app.GetStreamInfo(stream); - const std::vector> mem = app.Mmap(payload->buffers[stream]); -- if (stream == app.RawStream()) -- dng_save(mem, info, payload->metadata, filename, app.CameraModel(), options); -- else if (options->encoding == "jpg") -- jpeg_save(mem, info, payload->metadata, filename, app.CameraModel(), options); -- else if (options->encoding == "png") -- png_save(mem, info, filename, options); -- else if (options->encoding == "bmp") -- bmp_save(mem, info, filename, options); -- else -- yuv_save(mem, info, filename, options); -+ if (stream == app.RawStream()) { -+ std::vector> packRaw; -+ cvtRawData(mem[0], packRaw, info); -+ dng_save(packRaw, info, payload->metadata, filename, app.CameraModel(), options); -+ delete[] packRaw[0].data(); -+ } else if (options->encoding == "jpg") { -+ std::vector> yuv420; -+ NV12ToYUV420(mem[0], yuv420, info); -+ jpeg_save(yuv420, info, payload->metadata, filename, app.CameraModel(), options); -+ delete[] yuv420[0].data(); -+ } else if (options->encoding == "png") { -+ std::vector> rgb888; -+ NV12ToBGR888(mem[0], rgb888, info); -+ png_save(rgb888, info, filename, options); -+ delete[] rgb888[0].data(); -+ } else if (options->encoding == "bmp") { -+ std::vector> rgb888; -+ NV12ToRGB888(mem[0], rgb888, info); -+ bmp_save(rgb888, info, filename, options); -+ delete[] rgb888[0].data(); -+ } else { -+ std::vector> yuv420; -+ NV12ToYUV420(mem[0], yuv420, info); -+ yuv_save(yuv420, info, filename, options); -+ delete[] yuv420[0].data(); -+ } - LOG(2, "Saved image " << info.width << " x " << info.height << " to file " << filename); - } - -@@ -193,7 +250,7 @@ static void event_loop(LibcameraStillApp &app) - } - } - else -- app.ConfigureViewfinder(); -+ app.ConfigureStill(); - app.StartCamera(); - auto start_time = std::chrono::high_resolution_clock::now(); - auto timelapse_time = start_time; -@@ -234,7 +291,7 @@ static void event_loop(LibcameraStillApp &app) - // In viewfinder mode, run until the timeout or keypress. When that happens, - // if the "--autofocus-on-capture" option was set, trigger an AF scan and wait - // for it to complete. Then switch to capture mode if an output was requested. -- if (app.ViewfinderStream()) -+ if (app.StillStream()) - { - LOG(2, "Viewfinder frame " << count); - timelapse_frames++; -@@ -280,47 +337,29 @@ static void event_loop(LibcameraStillApp &app) - keypressed = false; - af_wait_state = AF_WAIT_NONE; - timelapse_time = std::chrono::high_resolution_clock::now(); -+ -+ save_images(app, completed_request); -+ if (!options->metadata.empty()) -+ save_metadata(options, completed_request->metadata); -+ - app.StopCamera(); - app.Teardown(); -- app.ConfigureStill(still_flags); -- if (options->af_on_capture) -- { -- libcamera::ControlList cl; -- cl.set(libcamera::controls::AfMode, libcamera::controls::AfModeAuto); -- cl.set(libcamera::controls::AfTrigger, libcamera::controls::AfTriggerCancel); -- app.SetControls(cl); -- } -- app.StartCamera(); -- } -- else -- app.ShowPreview(completed_request, app.ViewfinderStream()); -- } -- // In still capture mode, save a jpeg. Go back to viewfinder if in timelapse mode, -- // otherwise quit. -- else if (app.StillStream()) -- { -- app.StopCamera(); -- LOG(1, "Still capture image received"); -- save_images(app, completed_request); -- if (!options->metadata.empty()) -- save_metadata(options, completed_request->metadata); -- timelapse_frames = 0; -- if (!options->immediate && (options->timelapse || options->signal || options->keypress)) -- { -- app.Teardown(); -- app.ConfigureViewfinder(); -- if (options->af_on_capture && options->afMode_index == -1) -- { -- libcamera::ControlList cl; -- cl.set(libcamera::controls::AfMode, libcamera::controls::AfModeAuto); -- cl.set(libcamera::controls::AfTrigger, libcamera::controls::AfTriggerCancel); -- app.SetControls(cl); -- } -- app.StartCamera(); -- af_wait_state = AF_WAIT_NONE; -+ if (!options->immediate && (options->timelapse || options->signal || options->keypress)){ -+ app.ConfigureStill(still_flags); -+ if (options->af_on_capture) -+ { -+ libcamera::ControlList cl; -+ cl.set(libcamera::controls::AfMode, libcamera::controls::AfModeAuto); -+ cl.set(libcamera::controls::AfTrigger, libcamera::controls::AfTriggerCancel); -+ app.SetControls(cl); -+ } -+ app.StartCamera(); -+ } -+ else -+ return; - } - else -- return; -+ app.ShowPreview(completed_request, app.StillStream()); - } - } - } -diff --git a/image/dng.cpp b/image/dng.cpp -index fbc02bb..98cb5e7 100644 ---- a/image/dng.cpp -+++ b/image/dng.cpp -@@ -151,7 +151,6 @@ void dng_save(std::vector> const &mem, StreamInfo const - std::string const &filename, std::string const &cam_model, StillOptions const *options) - { - // Check the Bayer format and unpack it to u16. -- - auto it = bayer_formats.find(info.pixel_format); - if (it == bayer_formats.end()) - throw std::runtime_error("unsupported Bayer format"); --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/0004-Make-libcamera-vid-run-normally.patch b/package/starfive/libcamera-apps/0004-Make-libcamera-vid-run-normally.patch deleted file mode 100644 index 0238a85e..00000000 --- a/package/starfive/libcamera-apps/0004-Make-libcamera-vid-run-normally.patch +++ /dev/null @@ -1,8578 +0,0 @@ -From 1ef1752d44921737247635ba028821332d053aef Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Mon, 6 Nov 2023 13:43:41 +0800 -Subject: [PATCH] Make libcamera-vid run normally - ---- - core/libcamera_encoder.hpp | 1 + - core/video_options.hpp | 20 +- - encoder/CMakeLists.txt | 7 +- - encoder/encoder.cpp | 6 +- - encoder/h265_encoder.cpp | 422 ++++++ - encoder/h265_encoder.hpp | 78 ++ - encoder/include/khronos/OMX_Audio.h | 1310 ++++++++++++++++++ - encoder/include/khronos/OMX_Component.h | 569 ++++++++ - encoder/include/khronos/OMX_ComponentExt.h | 61 + - encoder/include/khronos/OMX_ContentPipe.h | 193 +++ - encoder/include/khronos/OMX_Core.h | 1422 ++++++++++++++++++++ - encoder/include/khronos/OMX_CoreExt.h | 73 + - encoder/include/khronos/OMX_IVCommon.h | 993 ++++++++++++++ - encoder/include/khronos/OMX_Image.h | 328 +++++ - encoder/include/khronos/OMX_ImageExt.h | 55 + - encoder/include/khronos/OMX_Index.h | 260 ++++ - encoder/include/khronos/OMX_IndexExt.h | 105 ++ - encoder/include/khronos/OMX_Other.h | 366 +++++ - encoder/include/khronos/OMX_Types.h | 361 +++++ - encoder/include/khronos/OMX_Video.h | 1141 ++++++++++++++++ - encoder/include/khronos/OMX_VideoExt.h | 401 ++++++ - encoder/mjpeg_encoder.cpp | 19 +- - encoder/yuv420_encoder.cpp | 80 ++ - encoder/yuv420_encoder.hpp | 41 + - 24 files changed, 8296 insertions(+), 16 deletions(-) - create mode 100755 encoder/h265_encoder.cpp - create mode 100755 encoder/h265_encoder.hpp - create mode 100755 encoder/include/khronos/OMX_Audio.h - create mode 100755 encoder/include/khronos/OMX_Component.h - create mode 100755 encoder/include/khronos/OMX_ComponentExt.h - create mode 100755 encoder/include/khronos/OMX_ContentPipe.h - create mode 100755 encoder/include/khronos/OMX_Core.h - create mode 100755 encoder/include/khronos/OMX_CoreExt.h - create mode 100755 encoder/include/khronos/OMX_IVCommon.h - create mode 100755 encoder/include/khronos/OMX_Image.h - create mode 100755 encoder/include/khronos/OMX_ImageExt.h - create mode 100755 encoder/include/khronos/OMX_Index.h - create mode 100755 encoder/include/khronos/OMX_IndexExt.h - create mode 100755 encoder/include/khronos/OMX_Other.h - create mode 100755 encoder/include/khronos/OMX_Types.h - create mode 100755 encoder/include/khronos/OMX_Video.h - create mode 100755 encoder/include/khronos/OMX_VideoExt.h - create mode 100755 encoder/yuv420_encoder.cpp - create mode 100755 encoder/yuv420_encoder.hpp - -diff --git a/core/libcamera_encoder.hpp b/core/libcamera_encoder.hpp -index 892b153..293cc58 100644 ---- a/core/libcamera_encoder.hpp -+++ b/core/libcamera_encoder.hpp -@@ -16,6 +16,7 @@ - typedef std::function EncodeOutputReadyCallback; - typedef std::function MetadataReadyCallback; - -+ - class LibcameraEncoder : public LibcameraApp - { - public: -diff --git a/core/video_options.hpp b/core/video_options.hpp -index 395d0a8..b3f9469 100644 ---- a/core/video_options.hpp -+++ b/core/video_options.hpp -@@ -23,17 +23,13 @@ struct VideoOptions : public Options - // clang-format off - options_.add_options() - ("bitrate,b", value(&bitrate)->default_value(0), -- "Set the video bitrate for encoding, in bits/second (h264 only)") -- ("profile", value(&profile), -- "Set the encoding profile (h264 only)") -- ("level", value(&level), -- "Set the encoding level (h264 only)") -+ "Set the video bitrate for encoding, in bits/second (h265 only)") - ("intra,g", value(&intra)->default_value(0), -- "Set the intra frame period (h264 only)") -+ "Set the intra frame period (h265 only)") - ("inline", value(&inline_headers)->default_value(false)->implicit_value(true), -- "Force PPS/SPS header with every I frame (h264 only)") -- ("codec", value(&codec)->default_value("h264"), -- "Set the codec to use, either h264, " -+ "Force PPS/SPS header with every I frame (h265 only)") -+ ("codec", value(&codec)->default_value("h265"), -+ "Set the codec to use, either h265, " - #if LIBAV_PRESENT - "libav, " - #endif -@@ -123,14 +119,14 @@ struct VideoOptions : public Options - width = 640; - if (height == 0) - height = 480; -- if (strcasecmp(codec.c_str(), "h264") == 0) -- codec = "h264"; -- else if (strcasecmp(codec.c_str(), "libav") == 0) -+ if (strcasecmp(codec.c_str(), "libav") == 0) - codec = "libav"; - else if (strcasecmp(codec.c_str(), "yuv420") == 0) - codec = "yuv420"; - else if (strcasecmp(codec.c_str(), "mjpeg") == 0) - codec = "mjpeg"; -+ else if (strcasecmp(codec.c_str(), "h265") == 0) -+ codec = "h265"; - else - throw std::runtime_error("unrecognised codec " + codec); - if (strcasecmp(initial.c_str(), "pause") == 0) -diff --git a/encoder/CMakeLists.txt b/encoder/CMakeLists.txt -index a426a45..4f36270 100644 ---- a/encoder/CMakeLists.txt -+++ b/encoder/CMakeLists.txt -@@ -6,9 +6,12 @@ if (NOT DEFINED ENABLE_LIBAV) - set(ENABLE_LIBAV 1) - endif() - -+find_library(SF_OMX_IL_LIBRARY sf-omx-il REQUIRED) -+include_directories(./include/khronos) -+ - set(LIBAV_PRESENT 0) --set(SRC encoder.cpp null_encoder.cpp h264_encoder.cpp mjpeg_encoder.cpp) --set(TARGET_LIBS images) -+set(SRC encoder.cpp null_encoder.cpp h264_encoder.cpp mjpeg_encoder.cpp h265_encoder.cpp yuv420_encoder.cpp) -+set(TARGET_LIBS images sf-omx-il) - - if (ENABLE_LIBAV) - message(STATUS "Checking for libavcodec") -diff --git a/encoder/encoder.cpp b/encoder/encoder.cpp -index a0622ed..ce47d97 100644 ---- a/encoder/encoder.cpp -+++ b/encoder/encoder.cpp -@@ -11,6 +11,8 @@ - #include "h264_encoder.hpp" - #include "mjpeg_encoder.hpp" - #include "null_encoder.hpp" -+#include "h265_encoder.hpp" -+#include "yuv420_encoder.hpp" - - #if LIBAV_PRESENT - #include "libav_encoder.hpp" -@@ -19,7 +21,7 @@ - Encoder *Encoder::Create(VideoOptions const *options, const StreamInfo &info) - { - if (strcasecmp(options->codec.c_str(), "yuv420") == 0) -- return new NullEncoder(options); -+ return new YUV420Encoder(options); - else if (strcasecmp(options->codec.c_str(), "h264") == 0) - return new H264Encoder(options, info); - #if LIBAV_PRESENT -@@ -28,5 +30,7 @@ Encoder *Encoder::Create(VideoOptions const *options, const StreamInfo &info) - #endif - else if (strcasecmp(options->codec.c_str(), "mjpeg") == 0) - return new MjpegEncoder(options); -+ else if (strcasecmp(options->codec.c_str(), "h265") == 0) -+ return new H265Encoder(options, info); - throw std::runtime_error("Unrecognised codec " + options->codec); - } -diff --git a/encoder/h265_encoder.cpp b/encoder/h265_encoder.cpp -new file mode 100755 -index 0000000..37c3b15 ---- /dev/null -+++ b/encoder/h265_encoder.cpp -@@ -0,0 +1,422 @@ -+/* SPDX-License-Identifier: BSD-2-Clause */ -+/* -+ * Copyright (C) 2023, Starfive Technology Co., Ltd. -+ * -+ * h265_encoder.cpp - h265 video encoder. -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include -+ -+#include -+#include -+ -+#include "h265_encoder.hpp" -+ -+#define OMX_INIT_STRUCTURE(a) \ -+ memset(&(a), 0, sizeof(a)); \ -+ (a).nSize = sizeof(a); \ -+ (a).nVersion.nVersion = 1; \ -+ (a).nVersion.s.nVersionMajor = 1; \ -+ (a).nVersion.s.nVersionMinor = 1; \ -+ (a).nVersion.s.nRevision = 1; \ -+ (a).nVersion.s.nStep = 1 -+ -+typedef struct Message -+{ -+ long msg_type; -+ OMX_S32 msg_flag; -+ OMX_BUFFERHEADERTYPE *pBuffer; -+} Message; -+ -+static OMX_ERRORTYPE eventHandler( -+ OMX_HANDLETYPE hComponent, -+ OMX_PTR pAppData, -+ OMX_EVENTTYPE eEvent, -+ OMX_U32 nData1, -+ OMX_U32 nData2, -+ OMX_PTR pEventData) -+{ -+ H265Encoder::EncodeContext *pEncodeContext = (H265Encoder::EncodeContext *)pAppData; -+ -+ switch (eEvent) -+ { -+ case OMX_EventPortSettingsChanged: -+ { -+ OMX_PARAM_PORTDEFINITIONTYPE pOutputPortDefinition; -+ OMX_INIT_STRUCTURE(pOutputPortDefinition); -+ pOutputPortDefinition.nPortIndex = 1; -+ OMX_GetParameter(pEncodeContext->hComponentEncoder, OMX_IndexParamPortDefinition, &pOutputPortDefinition); -+ OMX_U32 nOutputBufferSize = pOutputPortDefinition.nBufferSize; -+ OMX_U32 nOutputBufferCount = pOutputPortDefinition.nBufferCountMin; -+ -+ LOG(2, "enable output port and alloc buffer"); -+ OMX_SendCommand(pEncodeContext->hComponentEncoder, OMX_CommandPortEnable, 1, NULL); -+ -+ for (OMX_U32 i = 0; i < nOutputBufferCount; i++) -+ { -+ OMX_BUFFERHEADERTYPE *pBuffer = NULL; -+ OMX_AllocateBuffer(hComponent, &pBuffer, 1, NULL, nOutputBufferSize); -+ pEncodeContext->pOutputBufferArray[i] = pBuffer; -+ OMX_FillThisBuffer(hComponent, pBuffer); -+ } -+ } -+ break; -+ case OMX_EventBufferFlag: -+ { -+ Message data; -+ data.msg_type = 1; -+ data.msg_flag = -1; -+ if (msgsnd(pEncodeContext->msgid, (void *)&data, sizeof(data) - sizeof(data.msg_type), 0) == -1) -+ { -+ LOG_ERROR("msgsnd failed"); -+ } -+ } -+ break; -+ case OMX_EventCmdComplete: -+ { -+ switch ((OMX_COMMANDTYPE)(nData1)) -+ { -+ case OMX_CommandStateSet: -+ { -+ pEncodeContext->comState = (OMX_STATETYPE)(nData2); -+ } -+ break; -+ case OMX_CommandPortDisable: -+ { -+ if (nData2 == 1) -+ pEncodeContext->disableEVnt = OMX_TRUE; -+ } -+ break; -+ default: -+ break; -+ } -+ } -+ break; -+ case OMX_EventError: -+ { -+ LOG_ERROR("receive err event " + std::to_string(nData1) + std::to_string(nData2)); -+ pEncodeContext->justQuit = OMX_TRUE; -+ } -+ break; -+ default: -+ break; -+ } -+ return OMX_ErrorNone; -+} -+ -+static OMX_ERRORTYPE fillOutputBufferDoneHandler( -+ OMX_HANDLETYPE hComponent, -+ OMX_PTR pAppData, -+ OMX_BUFFERHEADERTYPE *pBuffer) -+{ -+ H265Encoder::EncodeContext *pEncodeContext = (H265Encoder::EncodeContext *)pAppData; -+ -+ Message data; -+ data.msg_type = 1; -+ if (pBuffer->nFlags & OMX_BUFFERFLAG_EOS) -+ { -+ data.msg_flag = -1; -+ } -+ else -+ { -+ data.msg_flag = 1; -+ data.pBuffer = pBuffer; -+ } -+ if (msgsnd(pEncodeContext->msgid, (void *)&data, sizeof(data) - sizeof(data.msg_type), 0) == -1) -+ { -+ LOG_ERROR("msgsnd failed"); -+ } -+ -+ return OMX_ErrorNone; -+} -+ -+static OMX_ERRORTYPE emptyBufferDoneHandler( -+ OMX_HANDLETYPE hComponent, -+ OMX_PTR pAppData, -+ OMX_BUFFERHEADERTYPE *pBuffer) -+{ -+ H265Encoder::EncodeContext *pEncodeContext = (H265Encoder::EncodeContext *)pAppData; -+ Message data; -+ data.msg_type = 1; -+ data.msg_flag = 0; -+ data.pBuffer = pBuffer; -+ if (msgsnd(pEncodeContext->msgid, (void *)&data, sizeof(data) - sizeof(data.msg_type), 0) == -1) -+ { -+ LOG_ERROR("msgsnd failed"); -+ } -+ -+ return OMX_ErrorNone; -+} -+ -+void H265Encoder::initOMX() -+{ -+ if(encoderCxt.hComponentEncoder) -+ { -+ OMX_FreeHandle(encoderCxt.hComponentEncoder); -+ encoderCxt.hComponentEncoder = 0; -+ OMX_Deinit(); -+ } -+ -+ int ret = OMX_Init(); -+ if(OMX_ErrorNone != ret) -+ throw std::runtime_error("run OMX_Init failed. ret is " + std::to_string(ret)); -+} -+ -+void H265Encoder::configOMX(StreamInfo const &info) -+{ -+ // Config callbacks -+ OMX_CALLBACKTYPE &callbacks = callbacks_; -+ callbacks.EventHandler = eventHandler; -+ callbacks.FillBufferDone = fillOutputBufferDoneHandler; -+ callbacks.EmptyBufferDone = emptyBufferDoneHandler; -+ -+ // Get OMX handle -+ OMX_HANDLETYPE hComponentEncoder = NULL; -+ { -+ char encName[] = "OMX.sf.video_encoder.hevc"; -+ -+ OMX_GetHandle(&hComponentEncoder, encName, &encoderCxt, &callbacks); -+ if(!hComponentEncoder) -+ throw std::runtime_error("Can not get OMX handle."); -+ } -+ encoderCxt.hComponentEncoder = hComponentEncoder; -+ -+ // Config input -+ OMX_PARAM_PORTDEFINITIONTYPE pInputPortDefinition; -+ OMX_INIT_STRUCTURE(pInputPortDefinition); -+ pInputPortDefinition.nPortIndex = 0; -+ OMX_GetParameter(hComponentEncoder, OMX_IndexParamPortDefinition, &pInputPortDefinition); -+ pInputPortDefinition.format.video.nFrameWidth = info.width; -+ pInputPortDefinition.format.video.nFrameHeight = info.height; -+ pInputPortDefinition.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar; -+ pInputPortDefinition.format.video.xFramerate = encoderCxt.nFrameRate; -+ OMX_SetParameter(hComponentEncoder, OMX_IndexParamPortDefinition, &pInputPortDefinition); -+ OMX_GetParameter(hComponentEncoder, OMX_IndexParamPortDefinition, &pInputPortDefinition); -+ -+ // Config output -+ OMX_PARAM_PORTDEFINITIONTYPE pOutputPortDefinition; -+ OMX_INIT_STRUCTURE(pOutputPortDefinition); -+ pOutputPortDefinition.nPortIndex = 1; -+ OMX_GetParameter(hComponentEncoder, OMX_IndexParamPortDefinition, &pOutputPortDefinition); -+ pOutputPortDefinition.format.video.nFrameWidth = info.width; -+ pOutputPortDefinition.format.video.nFrameHeight = info.height; -+ pOutputPortDefinition.format.video.nBitrate = encoderCxt.nBitrate; -+ OMX_SetParameter(hComponentEncoder, OMX_IndexParamPortDefinition, &pOutputPortDefinition); -+ -+ if(encoderCxt.nNumPFrame) -+ { -+ OMX_VIDEO_PARAM_HEVCTYPE hevcType; -+ OMX_INIT_STRUCTURE(hevcType); -+ hevcType.nPortIndex = 1; -+ OMX_GetParameter(hComponentEncoder, static_cast(OMX_IndexParamVideoHevc), &hevcType); -+ hevcType.nKeyFrameInterval = encoderCxt.nNumPFrame; -+ OMX_SetParameter(hComponentEncoder, static_cast(OMX_IndexParamVideoHevc), &hevcType); -+ } -+ -+ // Allocate input buffer -+ OMX_SendCommand(hComponentEncoder, OMX_CommandPortDisable, 1, NULL); -+ LOG(1, "wait for output port disable"); -+ while (!encoderCxt.disableEVnt && !encoderCxt.justQuit); -+ if (encoderCxt.justQuit) -+ { -+ freeResource(); -+ return; -+ } -+ LOG(1, "output port disabled"); -+ -+ OMX_SendCommand(hComponentEncoder, OMX_CommandStateSet, OMX_StateIdle, NULL); -+ -+ OMX_U32 nInputBufferSize = pInputPortDefinition.nBufferSize; -+ OMX_U32 nInputBufferCount = pInputPortDefinition.nBufferCountActual; -+ for (OMX_U32 i = 0; i < nInputBufferCount; i++) -+ { -+ OMX_BUFFERHEADERTYPE *pBuffer = NULL; -+ OMX_AllocateBuffer(hComponentEncoder, &pBuffer, 0, NULL, nInputBufferSize); -+ encoderCxt.pInputBufferArray[i] = pBuffer; -+ input_buffers_available_.push(pBuffer); -+ } -+ encoderCxt.nInputBufferCount = nInputBufferCount; -+ -+ LOG(1, "wait for Component idle"); -+ while (encoderCxt.comState != OMX_StateIdle && !encoderCxt.justQuit); -+ if (encoderCxt.justQuit) -+ { -+ freeResource(); -+ return; -+ } -+ LOG(1, "Component in idle"); -+} -+ -+H265Encoder::H265Encoder(VideoOptions const *options, StreamInfo const &info) -+ : Encoder(options) -+{ -+ memset(&encoderCxt, 0, sizeof(EncodeContext)); -+ -+ // Apply any options-> -+ encoderCxt.nBitrate = options->bitrate ? options->bitrate : 3000000; -+ encoderCxt.nNumPFrame = options->intra ? options->intra - 1 : 14; -+ encoderCxt.nFrameRate = 30; -+ encoderCxt.nFrameBufferSize = info.width * info.height * 3 / 2; -+ -+ encoderCxt.disableEVnt = OMX_FALSE; -+ encoderCxt.justQuit = OMX_FALSE; -+ -+ OMX_S32 msgid = -1; -+ msgid = msgget(IPC_PRIVATE, 0666 | IPC_CREAT); -+ if (msgid < 0) -+ throw std::runtime_error("get ipc_id error"); -+ encoderCxt.msgid = msgid; -+ -+ // Initialize OMX -+ initOMX(); -+ -+ // Config OMX -+ configOMX(info); -+ -+ abortOutput_ = false; -+ output_thread_ = std::thread(&H265Encoder::outputThread, this); -+ abortPoll_ = false; -+ poll_thread_ = std::thread(&H265Encoder::pollThread, this); -+} -+ -+H265Encoder::~H265Encoder() -+{ -+ freeResource(); -+ -+ abortPoll_ = true; -+ -+ Message data; -+ data.msg_type = 1; -+ data.msg_flag = -1; -+ if (msgsnd(encoderCxt.msgid, (void *)&data, sizeof(data) - sizeof(data.msg_type), 0) == -1) -+ { -+ LOG_ERROR("msgsnd failed"); -+ } -+ -+ poll_thread_.join(); -+ abortOutput_ = true; -+ output_thread_.join(); -+} -+ -+void H265Encoder::freeResource() -+{ -+ if (encoderCxt.comState == OMX_StateExecuting) -+ { -+ OMX_SendCommand(encoderCxt.hComponentEncoder, OMX_CommandStateSet, OMX_StateIdle, NULL); -+ LOG(1, "wait for Component idle"); -+ while (encoderCxt.comState != OMX_StateIdle && !encoderCxt.justQuit); -+ LOG(1, "Component in idle"); -+ } -+ -+ if(encoderCxt.hComponentEncoder) -+ { -+ OMX_FreeHandle(encoderCxt.hComponentEncoder); -+ OMX_Deinit(); -+ } -+} -+ -+void H265Encoder::EncodeBuffer(int fd, size_t size, void *mem, StreamInfo const &info, int64_t timestamp_us) -+{ -+ OMX_BUFFERHEADERTYPE *pInputBuffer = nullptr; -+ { -+ std::lock_guard lock(input_buffers_available_mutex_); -+ if (input_buffers_available_.empty()) -+ throw std::runtime_error("no buffers available to queue codec input"); -+ -+ pInputBuffer = input_buffers_available_.front(); -+ input_buffers_available_.pop(); -+ -+ output_timestamps_.push(timestamp_us); -+ } -+ -+ memcpy(pInputBuffer->pBuffer, mem, encoderCxt.nFrameBufferSize); -+ pInputBuffer->nFlags = 0x10; -+ pInputBuffer->nFilledLen = encoderCxt.nFrameBufferSize; -+ -+ input_done_callback_(nullptr); -+ -+ OMX_EmptyThisBuffer(encoderCxt.hComponentEncoder, pInputBuffer); -+} -+ -+void H265Encoder::pollThread() -+{ -+ LOG(1, "start process"); -+ OMX_SendCommand(encoderCxt.hComponentEncoder, OMX_CommandStateSet, OMX_StateExecuting, NULL); -+ -+ Message data; -+ while (OMX_TRUE) -+ { -+ ssize_t ret = msgrcv(encoderCxt.msgid, (void *)&data, BUFSIZ, 0, 0); -+ if (ret == -1) -+ throw std::runtime_error("msgrcv failed with errno: " + std::to_string(errno)); -+ -+ switch (data.msg_flag) -+ { -+ case 0: -+ { -+ std::lock_guard lock(input_buffers_available_mutex_); -+ input_buffers_available_.push(data.pBuffer); -+ } -+ break; -+ case 1: -+ { -+ { -+ std::lock_guard lock(output_mutex_); -+ output_queue_.push(data.pBuffer); -+ output_cond_var_.notify_one(); -+ } -+ } -+ break; -+ case -1: -+ { -+ if(abortPoll_) -+ return; -+ } -+ break; -+ default: -+ break; -+ } -+ if(abortPoll_) -+ return; -+ } -+} -+ -+void H265Encoder::outputThread() -+{ -+ while (true) -+ { -+ int64_t timestamp = 0; -+ OMX_BUFFERHEADERTYPE *pBuffer = nullptr; -+ { -+ std::unique_lock lock(output_mutex_); -+ if (output_queue_.empty()) -+ { -+ if(abortOutput_) -+ return; -+ else -+ output_cond_var_.wait_for(lock, 200ms); -+ } else -+ { -+ pBuffer = output_queue_.front(); -+ output_queue_.pop(); -+ if(!output_timestamps_.empty()) -+ { -+ timestamp = output_timestamps_.front(); -+ output_timestamps_.pop(); -+ } -+ } -+ } -+ -+ if(pBuffer) -+ { -+ output_ready_callback_(pBuffer->pBuffer, pBuffer->nFilledLen, timestamp, true); -+ OMX_FillThisBuffer(encoderCxt.hComponentEncoder, pBuffer); -+ } -+ } -+} -\ No newline at end of file -diff --git a/encoder/h265_encoder.hpp b/encoder/h265_encoder.hpp -new file mode 100755 -index 0000000..a1844cb ---- /dev/null -+++ b/encoder/h265_encoder.hpp -@@ -0,0 +1,78 @@ -+/* SPDX-License-Identifier: BSD-2-Clause */ -+/* -+ * Copyright (C) 2023, Starfive Technology Co., Ltd. -+ * -+ * h265_encoder.hpp - h265 video encoder. -+ */ -+ -+#pragma once -+ -+#include -+#include -+#include -+#include -+ -+#include "encoder.hpp" -+ -+#include -+#include -+#include -+#include -+#include -+ -+class H265Encoder : public Encoder -+{ -+public: -+ H265Encoder(VideoOptions const *options, StreamInfo const &info); -+ ~H265Encoder(); -+ // Encode the given DMABUF. -+ void EncodeBuffer(int fd, size_t size, void *mem, StreamInfo const &info, int64_t timestamp_us) override; -+ -+ struct EncodeContext -+ { -+ OMX_HANDLETYPE hComponentEncoder; -+ OMX_U32 nFrameBufferSize; -+ OMX_U32 nBitrate; -+ OMX_U32 nFrameRate; -+ OMX_U32 nNumPFrame; -+ OMX_STATETYPE comState; -+ OMX_U32 nInputBufferCount; -+ OMX_BUFFERHEADERTYPE *pInputBufferArray[64]; -+ OMX_BUFFERHEADERTYPE *pOutputBufferArray[64]; -+ int msgid; -+ -+ OMX_BOOL disableEVnt; -+ OMX_BOOL justQuit; -+ }; -+private: -+ struct EncodeContext encoderCxt; -+ -+ void initOMX(); -+ void configOMX(StreamInfo const &info); -+ void freeResource(); -+ -+ OMX_CALLBACKTYPE callbacks_; -+ -+ std::mutex input_buffers_available_mutex_; -+ std::queue input_buffers_available_; -+ -+ std::mutex output_mutex_; -+ std::queue output_timestamps_; -+ -+ // This thread just sits waiting for the encoder to finish stuff. It will either: -+ // * receive "output" buffers (codec inputs), which we must return to the caller -+ // * receive encoded buffers, which we pass to the application. -+ void pollThread(); -+ std::thread poll_thread_; -+ -+ // Handle the output buffers in another thread so as not to block the encoder. The -+ // application can take its time, after which we return this buffer to the encoder for -+ // re-use. -+ void outputThread(); -+ std::thread output_thread_; -+ std::queue output_queue_; -+ -+ bool abortPoll_; -+ std::condition_variable output_cond_var_; -+ bool abortOutput_; -+}; -diff --git a/encoder/include/khronos/OMX_Audio.h b/encoder/include/khronos/OMX_Audio.h -new file mode 100755 -index 0000000..7205319 ---- /dev/null -+++ b/encoder/include/khronos/OMX_Audio.h -@@ -0,0 +1,1310 @@ -+/* -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** @file OMX_Audio.h - OpenMax IL version 1.1.2 -+ * The structures needed by Audio components to exchange -+ * parameters and configuration data with the componenmilts. -+ */ -+ -+#ifndef OMX_Audio_h -+#define OMX_Audio_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+ -+/* Each OMX header must include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+ -+#include -+ -+/** @defgroup midi MIDI -+ * @ingroup audio -+ */ -+ -+/** @defgroup effects Audio effects -+ * @ingroup audio -+ */ -+ -+/** @defgroup audio OpenMAX IL Audio Domain -+ * Structures for OpenMAX IL Audio domain -+ * @{ -+ */ -+ -+/** Enumeration used to define the possible audio codings. -+ * If "OMX_AUDIO_CodingUnused" is selected, the coding selection must -+ * be done in a vendor specific way. Since this is for an audio -+ * processing element this enum is relevant. However, for another -+ * type of component other enums would be in this area. -+ */ -+typedef enum OMX_AUDIO_CODINGTYPE { -+ OMX_AUDIO_CodingUnused = 0, /**< Placeholder value when coding is N/A */ -+ OMX_AUDIO_CodingAutoDetect, /**< auto detection of audio format */ -+ OMX_AUDIO_CodingPCM, /**< Any variant of PCM coding */ -+ OMX_AUDIO_CodingADPCM, /**< Any variant of ADPCM encoded data */ -+ OMX_AUDIO_CodingAMR, /**< Any variant of AMR encoded data */ -+ OMX_AUDIO_CodingGSMFR, /**< Any variant of GSM fullrate (i.e. GSM610) */ -+ OMX_AUDIO_CodingGSMEFR, /**< Any variant of GSM Enhanced Fullrate encoded data*/ -+ OMX_AUDIO_CodingGSMHR, /**< Any variant of GSM Halfrate encoded data */ -+ OMX_AUDIO_CodingPDCFR, /**< Any variant of PDC Fullrate encoded data */ -+ OMX_AUDIO_CodingPDCEFR, /**< Any variant of PDC Enhanced Fullrate encoded data */ -+ OMX_AUDIO_CodingPDCHR, /**< Any variant of PDC Halfrate encoded data */ -+ OMX_AUDIO_CodingTDMAFR, /**< Any variant of TDMA Fullrate encoded data (TIA/EIA-136-420) */ -+ OMX_AUDIO_CodingTDMAEFR, /**< Any variant of TDMA Enhanced Fullrate encoded data (TIA/EIA-136-410) */ -+ OMX_AUDIO_CodingQCELP8, /**< Any variant of QCELP 8kbps encoded data */ -+ OMX_AUDIO_CodingQCELP13, /**< Any variant of QCELP 13kbps encoded data */ -+ OMX_AUDIO_CodingEVRC, /**< Any variant of EVRC encoded data */ -+ OMX_AUDIO_CodingSMV, /**< Any variant of SMV encoded data */ -+ OMX_AUDIO_CodingG711, /**< Any variant of G.711 encoded data */ -+ OMX_AUDIO_CodingG723, /**< Any variant of G.723 dot 1 encoded data */ -+ OMX_AUDIO_CodingG726, /**< Any variant of G.726 encoded data */ -+ OMX_AUDIO_CodingG729, /**< Any variant of G.729 encoded data */ -+ OMX_AUDIO_CodingAAC, /**< Any variant of AAC encoded data */ -+ OMX_AUDIO_CodingMP3, /**< Any variant of MP3 encoded data */ -+ OMX_AUDIO_CodingSBC, /**< Any variant of SBC encoded data */ -+ OMX_AUDIO_CodingVORBIS, /**< Any variant of VORBIS encoded data */ -+ OMX_AUDIO_CodingWMA, /**< Any variant of WMA encoded data */ -+ OMX_AUDIO_CodingRA, /**< Any variant of RA encoded data */ -+ OMX_AUDIO_CodingMIDI, /**< Any variant of MIDI encoded data */ -+ OMX_AUDIO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_CodingMax = 0x7FFFFFFF -+} OMX_AUDIO_CODINGTYPE; -+ -+ -+/** The PortDefinition structure is used to define all of the parameters -+ * necessary for the compliant component to setup an input or an output audio -+ * path. If additional information is needed to define the parameters of the -+ * port (such as frequency), additional structures must be sent such as the -+ * OMX_AUDIO_PARAM_PCMMODETYPE structure to supply the extra parameters for the port. -+ */ -+typedef struct OMX_AUDIO_PORTDEFINITIONTYPE { -+ OMX_STRING cMIMEType; /**< MIME type of data for the port */ -+ OMX_NATIVE_DEVICETYPE pNativeRender; /** < platform specific reference -+ for an output device, -+ otherwise this field is 0 */ -+ OMX_BOOL bFlagErrorConcealment; /**< Turns on error concealment if it is -+ supported by the OMX component */ -+ OMX_AUDIO_CODINGTYPE eEncoding; /**< Type of data expected for this -+ port (e.g. PCM, AMR, MP3, etc) */ -+} OMX_AUDIO_PORTDEFINITIONTYPE; -+ -+ -+/** Port format parameter. This structure is used to enumerate -+ * the various data input/output format supported by the port. -+ */ -+typedef struct OMX_AUDIO_PARAM_PORTFORMATTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Indicates which port to set */ -+ OMX_U32 nIndex; /**< Indicates the enumeration index for the format from 0x0 to N-1 */ -+ OMX_AUDIO_CODINGTYPE eEncoding; /**< Type of data expected for this port (e.g. PCM, AMR, MP3, etc) */ -+} OMX_AUDIO_PARAM_PORTFORMATTYPE; -+ -+ -+/** PCM mode type */ -+typedef enum OMX_AUDIO_PCMMODETYPE { -+ OMX_AUDIO_PCMModeLinear = 0, /**< Linear PCM encoded data */ -+ OMX_AUDIO_PCMModeALaw, /**< A law PCM encoded data (G.711) */ -+ OMX_AUDIO_PCMModeMULaw, /**< Mu law PCM encoded data (G.711) */ -+ OMX_AUDIO_PCMModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_PCMModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_PCMModeMax = 0x7FFFFFFF -+} OMX_AUDIO_PCMMODETYPE; -+ -+ -+typedef enum OMX_AUDIO_CHANNELTYPE { -+ OMX_AUDIO_ChannelNone = 0x0, /**< Unused or empty */ -+ OMX_AUDIO_ChannelLF = 0x1, /**< Left front */ -+ OMX_AUDIO_ChannelRF = 0x2, /**< Right front */ -+ OMX_AUDIO_ChannelCF = 0x3, /**< Center front */ -+ OMX_AUDIO_ChannelLS = 0x4, /**< Left surround */ -+ OMX_AUDIO_ChannelRS = 0x5, /**< Right surround */ -+ OMX_AUDIO_ChannelLFE = 0x6, /**< Low frequency effects */ -+ OMX_AUDIO_ChannelCS = 0x7, /**< Back surround */ -+ OMX_AUDIO_ChannelLR = 0x8, /**< Left rear. */ -+ OMX_AUDIO_ChannelRR = 0x9, /**< Right rear. */ -+ OMX_AUDIO_ChannelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_ChannelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_ChannelMax = 0x7FFFFFFF -+} OMX_AUDIO_CHANNELTYPE; -+ -+#define OMX_AUDIO_MAXCHANNELS 16 /**< maximum number distinct audio channels that a buffer may contain */ -+#define OMX_MIN_PCMPAYLOAD_MSEC 5 /**< Minimum audio buffer payload size for uncompressed (PCM) audio */ -+ -+/** PCM format description */ -+typedef struct OMX_AUDIO_PARAM_PCMMODETYPE { -+ OMX_U32 nSize; /**< Size of this structure, in Bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels (e.g. 2 for stereo) */ -+ OMX_NUMERICALDATATYPE eNumData; /**< indicates PCM data as signed or unsigned */ -+ OMX_ENDIANTYPE eEndian; /**< indicates PCM data as little or big endian */ -+ OMX_BOOL bInterleaved; /**< True for normal interleaved data; false for -+ non-interleaved data (e.g. block data) */ -+ OMX_U32 nBitPerSample; /**< Bit per sample */ -+ OMX_U32 nSamplingRate; /**< Sampling rate of the source data. Use 0 for -+ variable or unknown sampling rate. */ -+ OMX_AUDIO_PCMMODETYPE ePCMMode; /**< PCM mode enumeration */ -+ OMX_AUDIO_CHANNELTYPE eChannelMapping[OMX_AUDIO_MAXCHANNELS]; /**< Slot i contains channel defined by eChannelMap[i] */ -+ -+} OMX_AUDIO_PARAM_PCMMODETYPE; -+ -+ -+/** Audio channel mode. This is used by both AAC and MP3, although the names are more appropriate -+ * for the MP3. For example, JointStereo for MP3 is CouplingChannels for AAC. -+ */ -+typedef enum OMX_AUDIO_CHANNELMODETYPE { -+ OMX_AUDIO_ChannelModeStereo = 0, /**< 2 channels, the bitrate allocation between those -+ two channels changes accordingly to each channel information */ -+ OMX_AUDIO_ChannelModeJointStereo, /**< mode that takes advantage of what is common between -+ 2 channels for higher compression gain */ -+ OMX_AUDIO_ChannelModeDual, /**< 2 mono-channels, each channel is encoded with half -+ the bitrate of the overall bitrate */ -+ OMX_AUDIO_ChannelModeMono, /**< Mono channel mode */ -+ OMX_AUDIO_ChannelModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_ChannelModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_ChannelModeMax = 0x7FFFFFFF -+} OMX_AUDIO_CHANNELMODETYPE; -+ -+ -+typedef enum OMX_AUDIO_MP3STREAMFORMATTYPE { -+ OMX_AUDIO_MP3StreamFormatMP1Layer3 = 0, /**< MP3 Audio MPEG 1 Layer 3 Stream format */ -+ OMX_AUDIO_MP3StreamFormatMP2Layer3, /**< MP3 Audio MPEG 2 Layer 3 Stream format */ -+ OMX_AUDIO_MP3StreamFormatMP2_5Layer3, /**< MP3 Audio MPEG2.5 Layer 3 Stream format */ -+ OMX_AUDIO_MP3StreamFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_MP3StreamFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_MP3StreamFormatMax = 0x7FFFFFFF -+} OMX_AUDIO_MP3STREAMFORMATTYPE; -+ -+/** MP3 params */ -+typedef struct OMX_AUDIO_PARAM_MP3TYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels */ -+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable -+ rate or unknown bit rates */ -+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for -+ variable or unknown sampling rate. */ -+ OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should -+ limit the audio signal. Use 0 to let encoder decide */ -+ OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */ -+ OMX_AUDIO_MP3STREAMFORMATTYPE eFormat; /**< MP3 stream format */ -+} OMX_AUDIO_PARAM_MP3TYPE; -+ -+ -+typedef enum OMX_AUDIO_AACSTREAMFORMATTYPE { -+ OMX_AUDIO_AACStreamFormatMP2ADTS = 0, /**< AAC Audio Data Transport Stream 2 format */ -+ OMX_AUDIO_AACStreamFormatMP4ADTS, /**< AAC Audio Data Transport Stream 4 format */ -+ OMX_AUDIO_AACStreamFormatMP4LOAS, /**< AAC Low Overhead Audio Stream format */ -+ OMX_AUDIO_AACStreamFormatMP4LATM, /**< AAC Low overhead Audio Transport Multiplex */ -+ OMX_AUDIO_AACStreamFormatADIF, /**< AAC Audio Data Interchange Format */ -+ OMX_AUDIO_AACStreamFormatMP4FF, /**< AAC inside MPEG-4/ISO File Format */ -+ OMX_AUDIO_AACStreamFormatRAW, /**< AAC Raw Format */ -+ OMX_AUDIO_AACStreamFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_AACStreamFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_AACStreamFormatMax = 0x7FFFFFFF -+} OMX_AUDIO_AACSTREAMFORMATTYPE; -+ -+ -+/** AAC mode type. Note that the term profile is used with the MPEG-2 -+ * standard and the term object type and profile is used with MPEG-4 */ -+typedef enum OMX_AUDIO_AACPROFILETYPE { -+ OMX_AUDIO_AACObjectNull = 0, /**< Null, not used */ -+ OMX_AUDIO_AACObjectMain = 1, /**< AAC Main object */ -+ OMX_AUDIO_AACObjectLC, /**< AAC Low Complexity object (AAC profile) */ -+ OMX_AUDIO_AACObjectSSR, /**< AAC Scalable Sample Rate object */ -+ OMX_AUDIO_AACObjectLTP, /**< AAC Long Term Prediction object */ -+ OMX_AUDIO_AACObjectHE, /**< AAC High Efficiency (object type SBR, HE-AAC profile) */ -+ OMX_AUDIO_AACObjectScalable, /**< AAC Scalable object */ -+ OMX_AUDIO_AACObjectERLC = 17, /**< ER AAC Low Complexity object (Error Resilient AAC-LC) */ -+ OMX_AUDIO_AACObjectLD = 23, /**< AAC Low Delay object (Error Resilient) */ -+ OMX_AUDIO_AACObjectHE_PS = 29, /**< AAC High Efficiency with Parametric Stereo coding (HE-AAC v2, object type PS) */ -+ OMX_AUDIO_AACObjectKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_AACObjectVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_AACObjectMax = 0x7FFFFFFF -+} OMX_AUDIO_AACPROFILETYPE; -+ -+ -+/** AAC tool usage (for nAACtools in OMX_AUDIO_PARAM_AACPROFILETYPE). -+ * Required for encoder configuration and optional as decoder info output. -+ * For MP3, OMX_AUDIO_CHANNELMODETYPE is sufficient. */ -+#define OMX_AUDIO_AACToolNone 0x00000000 /**< no AAC tools allowed (encoder config) or active (decoder info output) */ -+#define OMX_AUDIO_AACToolMS 0x00000001 /**< MS: Mid/side joint coding tool allowed or active */ -+#define OMX_AUDIO_AACToolIS 0x00000002 /**< IS: Intensity stereo tool allowed or active */ -+#define OMX_AUDIO_AACToolTNS 0x00000004 /**< TNS: Temporal Noise Shaping tool allowed or active */ -+#define OMX_AUDIO_AACToolPNS 0x00000008 /**< PNS: MPEG-4 Perceptual Noise substitution tool allowed or active */ -+#define OMX_AUDIO_AACToolLTP 0x00000010 /**< LTP: MPEG-4 Long Term Prediction tool allowed or active */ -+#define OMX_AUDIO_AACToolAll 0x7FFFFFFF /**< all AAC tools allowed or active (*/ -+ -+/** MPEG-4 AAC error resilience (ER) tool usage (for nAACERtools in OMX_AUDIO_PARAM_AACPROFILETYPE). -+ * Required for ER encoder configuration and optional as decoder info output */ -+#define OMX_AUDIO_AACERNone 0x00000000 /**< no AAC ER tools allowed/used */ -+#define OMX_AUDIO_AACERVCB11 0x00000001 /**< VCB11: Virtual Code Books for AAC section data */ -+#define OMX_AUDIO_AACERRVLC 0x00000002 /**< RVLC: Reversible Variable Length Coding */ -+#define OMX_AUDIO_AACERHCR 0x00000004 /**< HCR: Huffman Codeword Reordering */ -+#define OMX_AUDIO_AACERAll 0x7FFFFFFF /**< all AAC ER tools allowed/used */ -+ -+ -+/** AAC params */ -+typedef struct OMX_AUDIO_PARAM_AACPROFILETYPE { -+ OMX_U32 nSize; /**< Size of this structure, in Bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels */ -+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for -+ variable or unknown sampling rate. */ -+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable -+ rate or unknown bit rates */ -+ OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should -+ limit the audio signal. Use 0 to let encoder decide */ -+ OMX_U32 nFrameLength; /**< Frame length (in audio samples per channel) of the codec. -+ Can be 1024 or 960 (AAC-LC), 2048 (HE-AAC), 480 or 512 (AAC-LD). -+ Use 0 to let encoder decide */ -+ OMX_U32 nAACtools; /**< AAC tool usage */ -+ OMX_U32 nAACERtools; /**< MPEG-4 AAC error resilience tool usage */ -+ OMX_AUDIO_AACPROFILETYPE eAACProfile; /**< AAC profile enumeration */ -+ OMX_AUDIO_AACSTREAMFORMATTYPE eAACStreamFormat; /**< AAC stream format enumeration */ -+ OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */ -+} OMX_AUDIO_PARAM_AACPROFILETYPE; -+ -+ -+/** VORBIS params */ -+typedef struct OMX_AUDIO_PARAM_VORBISTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels */ -+ OMX_U32 nBitRate; /**< Bit rate of the encoded data data. Use 0 for variable -+ rate or unknown bit rates. Encoding is set to the -+ bitrate closest to specified value (in bps) */ -+ OMX_U32 nMinBitRate; /**< Sets minimum bitrate (in bps). */ -+ OMX_U32 nMaxBitRate; /**< Sets maximum bitrate (in bps). */ -+ -+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for -+ variable or unknown sampling rate. */ -+ OMX_U32 nAudioBandWidth; /**< Audio band width (in Hz) to which an encoder should -+ limit the audio signal. Use 0 to let encoder decide */ -+ OMX_S32 nQuality; /**< Sets encoding quality to n, between -1 (low) and 10 (high). -+ In the default mode of operation, teh quality level is 3. -+ Normal quality range is 0 - 10. */ -+ OMX_BOOL bManaged; /**< Set bitrate management mode. This turns off the -+ normal VBR encoding, but allows hard or soft bitrate -+ constraints to be enforced by the encoder. This mode can -+ be slower, and may also be lower quality. It is -+ primarily useful for streaming. */ -+ OMX_BOOL bDownmix; /**< Downmix input from stereo to mono (has no effect on -+ non-stereo streams). Useful for lower-bitrate encoding. */ -+} OMX_AUDIO_PARAM_VORBISTYPE; -+ -+ -+/** WMA Version */ -+typedef enum OMX_AUDIO_WMAFORMATTYPE { -+ OMX_AUDIO_WMAFormatUnused = 0, /**< format unused or unknown */ -+ OMX_AUDIO_WMAFormat7, /**< Windows Media Audio format 7 */ -+ OMX_AUDIO_WMAFormat8, /**< Windows Media Audio format 8 */ -+ OMX_AUDIO_WMAFormat9, /**< Windows Media Audio format 9 */ -+ OMX_AUDIO_WMAFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_WMAFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_WMAFormatMax = 0x7FFFFFFF -+} OMX_AUDIO_WMAFORMATTYPE; -+ -+ -+/** WMA Profile */ -+typedef enum OMX_AUDIO_WMAPROFILETYPE { -+ OMX_AUDIO_WMAProfileUnused = 0, /**< profile unused or unknown */ -+ OMX_AUDIO_WMAProfileL1, /**< Windows Media audio version 9 profile L1 */ -+ OMX_AUDIO_WMAProfileL2, /**< Windows Media audio version 9 profile L2 */ -+ OMX_AUDIO_WMAProfileL3, /**< Windows Media audio version 9 profile L3 */ -+ OMX_AUDIO_WMAProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_WMAProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_WMAProfileMax = 0x7FFFFFFF -+} OMX_AUDIO_WMAPROFILETYPE; -+ -+ -+/** WMA params */ -+typedef struct OMX_AUDIO_PARAM_WMATYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U16 nChannels; /**< Number of channels */ -+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable -+ rate or unknown bit rates */ -+ OMX_AUDIO_WMAFORMATTYPE eFormat; /**< Version of WMA stream / data */ -+ OMX_AUDIO_WMAPROFILETYPE eProfile; /**< Profile of WMA stream / data */ -+ OMX_U32 nSamplingRate; /**< Sampling rate of the source data */ -+ OMX_U16 nBlockAlign; /**< is the block alignment, or block size, in bytes of the audio codec */ -+ OMX_U16 nEncodeOptions; /**< WMA Type-specific data */ -+ OMX_U32 nSuperBlockAlign; /**< WMA Type-specific data */ -+} OMX_AUDIO_PARAM_WMATYPE; -+ -+/** -+ * RealAudio format -+ */ -+typedef enum OMX_AUDIO_RAFORMATTYPE { -+ OMX_AUDIO_RAFormatUnused = 0, /**< Format unused or unknown */ -+ OMX_AUDIO_RA8, /**< RealAudio 8 codec */ -+ OMX_AUDIO_RA9, /**< RealAudio 9 codec */ -+ OMX_AUDIO_RA10_AAC, /**< MPEG-4 AAC codec for bitrates of more than 128kbps */ -+ OMX_AUDIO_RA10_CODEC, /**< RealAudio codec for bitrates less than 128 kbps */ -+ OMX_AUDIO_RA10_LOSSLESS, /**< RealAudio Lossless */ -+ OMX_AUDIO_RA10_MULTICHANNEL, /**< RealAudio Multichannel */ -+ OMX_AUDIO_RA10_VOICE, /**< RealAudio Voice for bitrates below 15 kbps */ -+ OMX_AUDIO_RAFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_RAFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_RAFormatMax = 0x7FFFFFFF -+} OMX_AUDIO_RAFORMATTYPE; -+ -+/** RA (Real Audio) params */ -+typedef struct OMX_AUDIO_PARAM_RATYPE { -+ OMX_U32 nSize; /**< Size of this structure, in Bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels */ -+ OMX_U32 nSamplingRate; /**< is the sampling rate of the source data */ -+ OMX_U32 nBitsPerFrame; /**< is the value for bits per frame */ -+ OMX_U32 nSamplePerFrame; /**< is the value for samples per frame */ -+ OMX_U32 nCouplingQuantBits; /**< is the number of coupling quantization bits in the stream */ -+ OMX_U32 nCouplingStartRegion; /**< is the coupling start region in the stream */ -+ OMX_U32 nNumRegions; /**< is the number of regions value */ -+ OMX_AUDIO_RAFORMATTYPE eFormat; /**< is the RealAudio audio format */ -+} OMX_AUDIO_PARAM_RATYPE; -+ -+ -+/** SBC Allocation Method Type */ -+typedef enum OMX_AUDIO_SBCALLOCMETHODTYPE { -+ OMX_AUDIO_SBCAllocMethodLoudness, /**< Loudness allocation method */ -+ OMX_AUDIO_SBCAllocMethodSNR, /**< SNR allocation method */ -+ OMX_AUDIO_SBCAllocMethodKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_SBCAllocMethodVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_SBCAllocMethodMax = 0x7FFFFFFF -+} OMX_AUDIO_SBCALLOCMETHODTYPE; -+ -+ -+/** SBC params */ -+typedef struct OMX_AUDIO_PARAM_SBCTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels */ -+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable -+ rate or unknown bit rates */ -+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for -+ variable or unknown sampling rate. */ -+ OMX_U32 nBlocks; /**< Number of blocks */ -+ OMX_U32 nSubbands; /**< Number of subbands */ -+ OMX_U32 nBitPool; /**< Bitpool value */ -+ OMX_BOOL bEnableBitrate; /**< Use bitrate value instead of bitpool */ -+ OMX_AUDIO_CHANNELMODETYPE eChannelMode; /**< Channel mode enumeration */ -+ OMX_AUDIO_SBCALLOCMETHODTYPE eSBCAllocType; /**< SBC Allocation method type */ -+} OMX_AUDIO_PARAM_SBCTYPE; -+ -+ -+/** ADPCM stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_ADPCMTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_U32 nBitsPerSample; /**< Number of bits in each sample */ -+ OMX_U32 nSampleRate; /**< Sampling rate of the source data. Use 0 for -+ variable or unknown sampling rate. */ -+} OMX_AUDIO_PARAM_ADPCMTYPE; -+ -+ -+/** G723 rate */ -+typedef enum OMX_AUDIO_G723RATE { -+ OMX_AUDIO_G723ModeUnused = 0, /**< AMRNB Mode unused / unknown */ -+ OMX_AUDIO_G723ModeLow, /**< 5300 bps */ -+ OMX_AUDIO_G723ModeHigh, /**< 6300 bps */ -+ OMX_AUDIO_G723ModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_G723ModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_G723ModeMax = 0x7FFFFFFF -+} OMX_AUDIO_G723RATE; -+ -+ -+/** G723 - Sample rate must be 8 KHz */ -+typedef struct OMX_AUDIO_PARAM_G723TYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_AUDIO_G723RATE eBitRate; /**< todo: Should this be moved to a config? */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+ OMX_BOOL bPostFilter; /**< Enable Post Filter */ -+} OMX_AUDIO_PARAM_G723TYPE; -+ -+ -+/** ITU G726 (ADPCM) rate */ -+typedef enum OMX_AUDIO_G726MODE { -+ OMX_AUDIO_G726ModeUnused = 0, /**< G726 Mode unused / unknown */ -+ OMX_AUDIO_G726Mode16, /**< 16 kbps */ -+ OMX_AUDIO_G726Mode24, /**< 24 kbps */ -+ OMX_AUDIO_G726Mode32, /**< 32 kbps, most common rate, also G721 */ -+ OMX_AUDIO_G726Mode40, /**< 40 kbps */ -+ OMX_AUDIO_G726ModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_G726ModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_G726ModeMax = 0x7FFFFFFF -+} OMX_AUDIO_G726MODE; -+ -+ -+/** G.726 stream format parameters - must be at 8KHz */ -+typedef struct OMX_AUDIO_PARAM_G726TYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_AUDIO_G726MODE eG726Mode; -+} OMX_AUDIO_PARAM_G726TYPE; -+ -+ -+/** G729 coder type */ -+typedef enum OMX_AUDIO_G729TYPE { -+ OMX_AUDIO_G729 = 0, /**< ITU G.729 encoded data */ -+ OMX_AUDIO_G729A, /**< ITU G.729 annex A encoded data */ -+ OMX_AUDIO_G729B, /**< ITU G.729 with annex B encoded data */ -+ OMX_AUDIO_G729AB, /**< ITU G.729 annexes A and B encoded data */ -+ OMX_AUDIO_G729KhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_G729VendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_G729Max = 0x7FFFFFFF -+} OMX_AUDIO_G729TYPE; -+ -+ -+/** G729 stream format parameters - fixed 6KHz sample rate */ -+typedef struct OMX_AUDIO_PARAM_G729TYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_AUDIO_G729TYPE eBitType; -+} OMX_AUDIO_PARAM_G729TYPE; -+ -+ -+/** AMR Frame format */ -+typedef enum OMX_AUDIO_AMRFRAMEFORMATTYPE { -+ OMX_AUDIO_AMRFrameFormatConformance = 0, /**< Frame Format is AMR Conformance -+ (Standard) Format */ -+ OMX_AUDIO_AMRFrameFormatIF1, /**< Frame Format is AMR Interface -+ Format 1 */ -+ OMX_AUDIO_AMRFrameFormatIF2, /**< Frame Format is AMR Interface -+ Format 2*/ -+ OMX_AUDIO_AMRFrameFormatFSF, /**< Frame Format is AMR File Storage -+ Format */ -+ OMX_AUDIO_AMRFrameFormatRTPPayload, /**< Frame Format is AMR Real-Time -+ Transport Protocol Payload Format */ -+ OMX_AUDIO_AMRFrameFormatITU, /**< Frame Format is ITU Format (added at Motorola request) */ -+ OMX_AUDIO_AMRFrameFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_AMRFrameFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_AMRFrameFormatMax = 0x7FFFFFFF -+} OMX_AUDIO_AMRFRAMEFORMATTYPE; -+ -+ -+/** AMR band mode */ -+typedef enum OMX_AUDIO_AMRBANDMODETYPE { -+ OMX_AUDIO_AMRBandModeUnused = 0, /**< AMRNB Mode unused / unknown */ -+ OMX_AUDIO_AMRBandModeNB0, /**< AMRNB Mode 0 = 4750 bps */ -+ OMX_AUDIO_AMRBandModeNB1, /**< AMRNB Mode 1 = 5150 bps */ -+ OMX_AUDIO_AMRBandModeNB2, /**< AMRNB Mode 2 = 5900 bps */ -+ OMX_AUDIO_AMRBandModeNB3, /**< AMRNB Mode 3 = 6700 bps */ -+ OMX_AUDIO_AMRBandModeNB4, /**< AMRNB Mode 4 = 7400 bps */ -+ OMX_AUDIO_AMRBandModeNB5, /**< AMRNB Mode 5 = 7950 bps */ -+ OMX_AUDIO_AMRBandModeNB6, /**< AMRNB Mode 6 = 10200 bps */ -+ OMX_AUDIO_AMRBandModeNB7, /**< AMRNB Mode 7 = 12200 bps */ -+ OMX_AUDIO_AMRBandModeWB0, /**< AMRWB Mode 0 = 6600 bps */ -+ OMX_AUDIO_AMRBandModeWB1, /**< AMRWB Mode 1 = 8850 bps */ -+ OMX_AUDIO_AMRBandModeWB2, /**< AMRWB Mode 2 = 12650 bps */ -+ OMX_AUDIO_AMRBandModeWB3, /**< AMRWB Mode 3 = 14250 bps */ -+ OMX_AUDIO_AMRBandModeWB4, /**< AMRWB Mode 4 = 15850 bps */ -+ OMX_AUDIO_AMRBandModeWB5, /**< AMRWB Mode 5 = 18250 bps */ -+ OMX_AUDIO_AMRBandModeWB6, /**< AMRWB Mode 6 = 19850 bps */ -+ OMX_AUDIO_AMRBandModeWB7, /**< AMRWB Mode 7 = 23050 bps */ -+ OMX_AUDIO_AMRBandModeWB8, /**< AMRWB Mode 8 = 23850 bps */ -+ OMX_AUDIO_AMRBandModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_AMRBandModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_AMRBandModeMax = 0x7FFFFFFF -+} OMX_AUDIO_AMRBANDMODETYPE; -+ -+ -+/** AMR Discontinuous Transmission mode */ -+typedef enum OMX_AUDIO_AMRDTXMODETYPE { -+ OMX_AUDIO_AMRDTXModeOff = 0, /**< AMR Discontinuous Transmission Mode is disabled */ -+ OMX_AUDIO_AMRDTXModeOnVAD1, /**< AMR Discontinuous Transmission Mode using -+ Voice Activity Detector 1 (VAD1) is enabled */ -+ OMX_AUDIO_AMRDTXModeOnVAD2, /**< AMR Discontinuous Transmission Mode using -+ Voice Activity Detector 2 (VAD2) is enabled */ -+ OMX_AUDIO_AMRDTXModeOnAuto, /**< The codec will automatically select between -+ Off, VAD1 or VAD2 modes */ -+ -+ OMX_AUDIO_AMRDTXasEFR, /**< DTX as EFR instead of AMR standard (3GPP 26.101, frame type =8,9,10) */ -+ -+ OMX_AUDIO_AMRDTXModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_AMRDTXModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_AMRDTXModeMax = 0x7FFFFFFF -+} OMX_AUDIO_AMRDTXMODETYPE; -+ -+ -+/** AMR params */ -+typedef struct OMX_AUDIO_PARAM_AMRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels */ -+ OMX_U32 nBitRate; /**< Bit rate read only field */ -+ OMX_AUDIO_AMRBANDMODETYPE eAMRBandMode; /**< AMR Band Mode enumeration */ -+ OMX_AUDIO_AMRDTXMODETYPE eAMRDTXMode; /**< AMR DTX Mode enumeration */ -+ OMX_AUDIO_AMRFRAMEFORMATTYPE eAMRFrameFormat; /**< AMR frame format enumeration */ -+} OMX_AUDIO_PARAM_AMRTYPE; -+ -+ -+/** GSM_FR (ETSI 06.10, 3GPP 46.010) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_GSMFRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+} OMX_AUDIO_PARAM_GSMFRTYPE; -+ -+ -+/** GSM-HR (ETSI 06.20, 3GPP 46.020) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_GSMHRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+} OMX_AUDIO_PARAM_GSMHRTYPE; -+ -+ -+/** GSM-EFR (ETSI 06.60, 3GPP 46.060) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_GSMEFRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+} OMX_AUDIO_PARAM_GSMEFRTYPE; -+ -+ -+/** TDMA FR (TIA/EIA-136-420, VSELP 7.95kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_TDMAFRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+} OMX_AUDIO_PARAM_TDMAFRTYPE; -+ -+ -+/** TDMA EFR (TIA/EIA-136-410, ACELP 7.4kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_TDMAEFRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+} OMX_AUDIO_PARAM_TDMAEFRTYPE; -+ -+ -+/** PDC FR ( RCR-27, VSELP 6.7kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_PDCFRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+} OMX_AUDIO_PARAM_PDCFRTYPE; -+ -+ -+/** PDC EFR ( RCR-27, ACELP 6.7kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_PDCEFRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+} OMX_AUDIO_PARAM_PDCEFRTYPE; -+ -+/** PDC HR ( RCR-27, PSI-CELP 3.45kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_PDCHRTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_BOOL bDTX; /**< Enable Discontinuous Transmisssion */ -+ OMX_BOOL bHiPassFilter; /**< Enable High Pass Filter */ -+} OMX_AUDIO_PARAM_PDCHRTYPE; -+ -+ -+/** CDMA Rate types */ -+typedef enum OMX_AUDIO_CDMARATETYPE { -+ OMX_AUDIO_CDMARateBlank = 0, /**< CDMA encoded frame is blank */ -+ OMX_AUDIO_CDMARateFull, /**< CDMA encoded frame in full rate */ -+ OMX_AUDIO_CDMARateHalf, /**< CDMA encoded frame in half rate */ -+ OMX_AUDIO_CDMARateQuarter, /**< CDMA encoded frame in quarter rate */ -+ OMX_AUDIO_CDMARateEighth, /**< CDMA encoded frame in eighth rate (DTX)*/ -+ OMX_AUDIO_CDMARateErasure, /**< CDMA erasure frame */ -+ OMX_AUDIO_CDMARateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_CDMARateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_CDMARateMax = 0x7FFFFFFF -+} OMX_AUDIO_CDMARATETYPE; -+ -+ -+/** QCELP8 (TIA/EIA-96, up to 8kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_QCELP8TYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_U32 nBitRate; /**< Bit rate of the input data. Use 0 for variable -+ rate or unknown bit rates */ -+ OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */ -+ OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */ -+ OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */ -+} OMX_AUDIO_PARAM_QCELP8TYPE; -+ -+ -+/** QCELP13 ( CDMA, EIA/TIA-733, 13.3kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_QCELP13TYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */ -+ OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */ -+ OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */ -+} OMX_AUDIO_PARAM_QCELP13TYPE; -+ -+ -+/** EVRC ( CDMA, EIA/TIA-127, RCELP up to 8.55kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_EVRCTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_AUDIO_CDMARATETYPE eCDMARate; /**< actual Frame rate */ -+ OMX_BOOL bRATE_REDUCon; /**< RATE_REDUCtion is requested for this frame */ -+ OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 */ -+ OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 */ -+ OMX_BOOL bHiPassFilter; /**< Enable encoder's High Pass Filter */ -+ OMX_BOOL bNoiseSuppressor; /**< Enable encoder's noise suppressor pre-processing */ -+ OMX_BOOL bPostFilter; /**< Enable decoder's post Filter */ -+} OMX_AUDIO_PARAM_EVRCTYPE; -+ -+ -+/** SMV ( up to 8.55kbps coder) stream format parameters */ -+typedef struct OMX_AUDIO_PARAM_SMVTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannels; /**< Number of channels in the data stream (not -+ necessarily the same as the number of channels -+ to be rendered. */ -+ OMX_AUDIO_CDMARATETYPE eCDMARate; /**< Frame rate */ -+ OMX_BOOL bRATE_REDUCon; /**< RATE_REDUCtion is requested for this frame */ -+ OMX_U32 nMinBitRate; /**< minmal rate for the encoder = 1,2,3,4, default = 1 ??*/ -+ OMX_U32 nMaxBitRate; /**< maximal rate for the encoder = 1,2,3,4, default = 4 ??*/ -+ OMX_BOOL bHiPassFilter; /**< Enable encoder's High Pass Filter ??*/ -+ OMX_BOOL bNoiseSuppressor; /**< Enable encoder's noise suppressor pre-processing */ -+ OMX_BOOL bPostFilter; /**< Enable decoder's post Filter ??*/ -+} OMX_AUDIO_PARAM_SMVTYPE; -+ -+ -+/** MIDI Format -+ * @ingroup midi -+ */ -+typedef enum OMX_AUDIO_MIDIFORMATTYPE { -+ OMX_AUDIO_MIDIFormatUnknown = 0, /**< MIDI Format unknown or don't care */ -+ OMX_AUDIO_MIDIFormatSMF0, /**< Standard MIDI File Type 0 */ -+ OMX_AUDIO_MIDIFormatSMF1, /**< Standard MIDI File Type 1 */ -+ OMX_AUDIO_MIDIFormatSMF2, /**< Standard MIDI File Type 2 */ -+ OMX_AUDIO_MIDIFormatSPMIDI, /**< SP-MIDI */ -+ OMX_AUDIO_MIDIFormatXMF0, /**< eXtensible Music Format type 0 */ -+ OMX_AUDIO_MIDIFormatXMF1, /**< eXtensible Music Format type 1 */ -+ OMX_AUDIO_MIDIFormatMobileXMF, /**< Mobile XMF (eXtensible Music Format type 2) */ -+ OMX_AUDIO_MIDIFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_MIDIFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_MIDIFormatMax = 0x7FFFFFFF -+} OMX_AUDIO_MIDIFORMATTYPE; -+ -+ -+/** MIDI params -+ * @ingroup midi -+ */ -+typedef struct OMX_AUDIO_PARAM_MIDITYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nFileSize; /**< size of the MIDI file in bytes, where the entire -+ MIDI file passed in, otherwise if 0x0, the MIDI data -+ is merged and streamed (instead of passed as an -+ entire MIDI file) */ -+ OMX_BU32 sMaxPolyphony; /**< Specifies the maximum simultaneous polyphonic -+ voices. A value of zero indicates that the default -+ polyphony of the device is used */ -+ OMX_BOOL bLoadDefaultSound; /**< Whether to load default sound -+ bank at initialization */ -+ OMX_AUDIO_MIDIFORMATTYPE eMidiFormat; /**< Version of the MIDI file */ -+} OMX_AUDIO_PARAM_MIDITYPE; -+ -+ -+/** Type of the MIDI sound bank -+ * @ingroup midi -+ */ -+typedef enum OMX_AUDIO_MIDISOUNDBANKTYPE { -+ OMX_AUDIO_MIDISoundBankUnused = 0, /**< unused/unknown soundbank type */ -+ OMX_AUDIO_MIDISoundBankDLS1, /**< DLS version 1 */ -+ OMX_AUDIO_MIDISoundBankDLS2, /**< DLS version 2 */ -+ OMX_AUDIO_MIDISoundBankMobileDLSBase, /**< Mobile DLS, using the base functionality */ -+ OMX_AUDIO_MIDISoundBankMobileDLSPlusOptions, /**< Mobile DLS, using the specification-defined optional feature set */ -+ OMX_AUDIO_MIDISoundBankKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_MIDISoundBankVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_MIDISoundBankMax = 0x7FFFFFFF -+} OMX_AUDIO_MIDISOUNDBANKTYPE; -+ -+ -+/** Bank Layout describes how bank MSB & LSB are used in the DLS instrument definitions sound bank -+ * @ingroup midi -+ */ -+typedef enum OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE { -+ OMX_AUDIO_MIDISoundBankLayoutUnused = 0, /**< unused/unknown soundbank type */ -+ OMX_AUDIO_MIDISoundBankLayoutGM, /**< GS layout (based on bank MSB 0x00) */ -+ OMX_AUDIO_MIDISoundBankLayoutGM2, /**< General MIDI 2 layout (using MSB 0x78/0x79, LSB 0x00) */ -+ OMX_AUDIO_MIDISoundBankLayoutUser, /**< Does not conform to any bank numbering standards */ -+ OMX_AUDIO_MIDISoundBankLayoutKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_MIDISoundBankLayoutVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_MIDISoundBankLayoutMax = 0x7FFFFFFF -+} OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE; -+ -+ -+/** MIDI params to load/unload user soundbank -+ * @ingroup midi -+ */ -+typedef struct OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nDLSIndex; /**< DLS file index to be loaded */ -+ OMX_U32 nDLSSize; /**< Size in bytes */ -+ OMX_PTR pDLSData; /**< Pointer to DLS file data */ -+ OMX_AUDIO_MIDISOUNDBANKTYPE eMidiSoundBank; /**< Midi sound bank type enumeration */ -+ OMX_AUDIO_MIDISOUNDBANKLAYOUTTYPE eMidiSoundBankLayout; /**< Midi sound bank layout enumeration */ -+} OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE; -+ -+ -+/** Structure for Live MIDI events and MIP messages. -+ * (MIP = Maximum Instantaneous Polyphony; part of the SP-MIDI standard.) -+ * @ingroup midi -+ */ -+typedef struct OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port that this structure applies to */ -+ OMX_U32 nMidiEventSize; /**< Size of immediate MIDI events or MIP message in bytes */ -+ OMX_U8 nMidiEvents[1]; /**< MIDI event array to be rendered immediately, or an -+ array for the MIP message buffer, where the size is -+ indicated by nMidiEventSize */ -+} OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE; -+ -+ -+/** MIDI sound bank/ program pair in a given channel -+ * @ingroup midi -+ */ -+typedef struct OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port that this structure applies to */ -+ OMX_U32 nChannel; /**< Valid channel values range from 1 to 16 */ -+ OMX_U16 nIDProgram; /**< Valid program ID range is 1 to 128 */ -+ OMX_U16 nIDSoundBank; /**< Sound bank ID */ -+ OMX_U32 nUserSoundBankIndex;/**< User soundbank index, easier to access soundbanks -+ by index if multiple banks are present */ -+} OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE; -+ -+ -+/** MIDI control -+ * @ingroup midi -+ */ -+typedef struct OMX_AUDIO_CONFIG_MIDICONTROLTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BS32 sPitchTransposition; /**< Pitch transposition in semitones, stored as Q22.10 -+ format based on JAVA MMAPI (JSR-135) requirement */ -+ OMX_BU32 sPlayBackRate; /**< Relative playback rate, stored as Q14.17 fixed-point -+ number based on JSR-135 requirement */ -+ OMX_BU32 sTempo ; /**< Tempo in beats per minute (BPM), stored as Q22.10 -+ fixed-point number based on JSR-135 requirement */ -+ OMX_U32 nMaxPolyphony; /**< Specifies the maximum simultaneous polyphonic -+ voices. A value of zero indicates that the default -+ polyphony of the device is used */ -+ OMX_U32 nNumRepeat; /**< Number of times to repeat playback */ -+ OMX_U32 nStopTime; /**< Time in milliseconds to indicate when playback -+ will stop automatically. Set to zero if not used */ -+ OMX_U16 nChannelMuteMask; /**< 16 bit mask for channel mute status */ -+ OMX_U16 nChannelSoloMask; /**< 16 bit mask for channel solo status */ -+ OMX_U32 nTrack0031MuteMask; /**< 32 bit mask for track mute status. Note: This is for tracks 0-31 */ -+ OMX_U32 nTrack3263MuteMask; /**< 32 bit mask for track mute status. Note: This is for tracks 32-63 */ -+ OMX_U32 nTrack0031SoloMask; /**< 32 bit mask for track solo status. Note: This is for tracks 0-31 */ -+ OMX_U32 nTrack3263SoloMask; /**< 32 bit mask for track solo status. Note: This is for tracks 32-63 */ -+ -+} OMX_AUDIO_CONFIG_MIDICONTROLTYPE; -+ -+ -+/** MIDI Playback States -+ * @ingroup midi -+ */ -+typedef enum OMX_AUDIO_MIDIPLAYBACKSTATETYPE { -+ OMX_AUDIO_MIDIPlayBackStateUnknown = 0, /**< Unknown state or state does not map to -+ other defined states */ -+ OMX_AUDIO_MIDIPlayBackStateClosedEngaged, /**< No MIDI resource is currently open. -+ The MIDI engine is currently processing -+ MIDI events. */ -+ OMX_AUDIO_MIDIPlayBackStateParsing, /**< A MIDI resource is open and is being -+ primed. The MIDI engine is currently -+ processing MIDI events. */ -+ OMX_AUDIO_MIDIPlayBackStateOpenEngaged, /**< A MIDI resource is open and primed but -+ not playing. The MIDI engine is currently -+ processing MIDI events. The transition to -+ this state is only possible from the -+ OMX_AUDIO_MIDIPlayBackStatePlaying state, -+ when the 'playback head' reaches the end -+ of media data or the playback stops due -+ to stop time set.*/ -+ OMX_AUDIO_MIDIPlayBackStatePlaying, /**< A MIDI resource is open and currently -+ playing. The MIDI engine is currently -+ processing MIDI events.*/ -+ OMX_AUDIO_MIDIPlayBackStatePlayingPartially, /**< Best-effort playback due to SP-MIDI/DLS -+ resource constraints */ -+ OMX_AUDIO_MIDIPlayBackStatePlayingSilently, /**< Due to system resource constraints and -+ SP-MIDI content constraints, there is -+ no audible MIDI content during playback -+ currently. The situation may change if -+ resources are freed later.*/ -+ OMX_AUDIO_MIDIPlayBackStateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_MIDIPlayBackStateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_MIDIPlayBackStateMax = 0x7FFFFFFF -+} OMX_AUDIO_MIDIPLAYBACKSTATETYPE; -+ -+ -+/** MIDI status -+ * @ingroup midi -+ */ -+typedef struct OMX_AUDIO_CONFIG_MIDISTATUSTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U16 nNumTracks; /**< Number of MIDI tracks in the file, read only field. -+ NOTE: May not return a meaningful value until the entire -+ file is parsed and buffered. */ -+ OMX_U32 nDuration; /**< The length of the currently open MIDI resource -+ in milliseconds. NOTE: May not return a meaningful value -+ until the entire file is parsed and buffered. */ -+ OMX_U32 nPosition; /**< Current Position of the MIDI resource being played -+ in milliseconds */ -+ OMX_BOOL bVibra; /**< Does Vibra track exist? NOTE: May not return a meaningful -+ value until the entire file is parsed and buffered. */ -+ OMX_U32 nNumMetaEvents; /**< Total number of MIDI Meta Events in the currently -+ open MIDI resource. NOTE: May not return a meaningful value -+ until the entire file is parsed and buffered. */ -+ OMX_U32 nNumActiveVoices; /**< Number of active voices in the currently playing -+ MIDI resource. NOTE: May not return a meaningful value until -+ the entire file is parsed and buffered. */ -+ OMX_AUDIO_MIDIPLAYBACKSTATETYPE eMIDIPlayBackState; /**< MIDI playback state enumeration, read only field */ -+} OMX_AUDIO_CONFIG_MIDISTATUSTYPE; -+ -+ -+/** MIDI Meta Event structure one per Meta Event. -+ * MIDI Meta Events are like audio metadata, except that they are interspersed -+ * with the MIDI content throughout the file and are not localized in the header. -+ * As such, it is necessary to retrieve information about these Meta Events from -+ * the engine, as it encounters these Meta Events within the MIDI content. -+ * For example, SMF files can have up to 14 types of MIDI Meta Events (copyright, -+ * author, default tempo, etc.) scattered throughout the file. -+ * @ingroup midi -+ */ -+typedef struct OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nIndex; /**< Index of Meta Event */ -+ OMX_U8 nMetaEventType; /**< Meta Event Type, 7bits (i.e. 0 - 127) */ -+ OMX_U32 nMetaEventSize; /**< size of the Meta Event in bytes */ -+ OMX_U32 nTrack; /**< track number for the meta event */ -+ OMX_U32 nPosition; /**< Position of the meta-event in milliseconds */ -+} OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE; -+ -+ -+/** MIDI Meta Event Data structure - one per Meta Event. -+ * @ingroup midi -+ */ -+typedef struct OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nIndex; /**< Index of Meta Event */ -+ OMX_U32 nMetaEventSize; /**< size of the Meta Event in bytes */ -+ OMX_U8 nData[1]; /**< array of one or more bytes of meta data -+ as indicated by the nMetaEventSize field */ -+} OMX_AUDIO_CONFIG__MIDIMETAEVENTDATATYPE; -+ -+ -+/** Audio Volume adjustment for a port */ -+typedef struct OMX_AUDIO_CONFIG_VOLUMETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port index indicating which port to -+ set. Select the input port to set -+ just that port's volume. Select the -+ output port to adjust the master -+ volume. */ -+ OMX_BOOL bLinear; /**< Is the volume to be set in linear (0.100) -+ or logarithmic scale (mB) */ -+ OMX_BS32 sVolume; /**< Volume linear setting in the 0..100 range, OR -+ Volume logarithmic setting for this port. The values -+ for volume are in mB (millibels = 1/100 dB) relative -+ to a gain of 1 (e.g. the output is the same as the -+ input level). Values are in mB from nMax -+ (maximum volume) to nMin mB (typically negative). -+ Since the volume is "voltage" -+ and not a "power", it takes a setting of -+ -600 mB to decrease the volume by 1/2. If -+ a component cannot accurately set the -+ volume to the requested value, it must -+ set the volume to the closest value BELOW -+ the requested value. When getting the -+ volume setting, the current actual volume -+ must be returned. */ -+} OMX_AUDIO_CONFIG_VOLUMETYPE; -+ -+ -+/** Audio Volume adjustment for a channel */ -+typedef struct OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port index indicating which port to -+ set. Select the input port to set -+ just that port's volume. Select the -+ output port to adjust the master -+ volume. */ -+ OMX_U32 nChannel; /**< channel to select from 0 to N-1, -+ using OMX_ALL to apply volume settings -+ to all channels */ -+ OMX_BOOL bLinear; /**< Is the volume to be set in linear (0.100) or -+ logarithmic scale (mB) */ -+ OMX_BS32 sVolume; /**< Volume linear setting in the 0..100 range, OR -+ Volume logarithmic setting for this port. -+ The values for volume are in mB -+ (millibels = 1/100 dB) relative to a gain -+ of 1 (e.g. the output is the same as the -+ input level). Values are in mB from nMax -+ (maximum volume) to nMin mB (typically negative). -+ Since the volume is "voltage" -+ and not a "power", it takes a setting of -+ -600 mB to decrease the volume by 1/2. If -+ a component cannot accurately set the -+ volume to the requested value, it must -+ set the volume to the closest value BELOW -+ the requested value. When getting the -+ volume setting, the current actual volume -+ must be returned. */ -+ OMX_BOOL bIsMIDI; /**< TRUE if nChannel refers to a MIDI channel, -+ FALSE otherwise */ -+} OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE; -+ -+ -+/** Audio balance setting */ -+typedef struct OMX_AUDIO_CONFIG_BALANCETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port index indicating which port to -+ set. Select the input port to set -+ just that port's balance. Select the -+ output port to adjust the master -+ balance. */ -+ OMX_S32 nBalance; /**< balance setting for this port -+ (-100 to 100, where -100 indicates -+ all left, and no right */ -+} OMX_AUDIO_CONFIG_BALANCETYPE; -+ -+ -+/** Audio Port mute */ -+typedef struct OMX_AUDIO_CONFIG_MUTETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port index indicating which port to -+ set. Select the input port to set -+ just that port's mute. Select the -+ output port to adjust the master -+ mute. */ -+ OMX_BOOL bMute; /**< Mute setting for this port */ -+} OMX_AUDIO_CONFIG_MUTETYPE; -+ -+ -+/** Audio Channel mute */ -+typedef struct OMX_AUDIO_CONFIG_CHANNELMUTETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nChannel; /**< channel to select from 0 to N-1, -+ using OMX_ALL to apply mute settings -+ to all channels */ -+ OMX_BOOL bMute; /**< Mute setting for this channel */ -+ OMX_BOOL bIsMIDI; /**< TRUE if nChannel refers to a MIDI channel, -+ FALSE otherwise */ -+} OMX_AUDIO_CONFIG_CHANNELMUTETYPE; -+ -+ -+ -+/** Enable / Disable for loudness control, which boosts bass and to a -+ * smaller extent high end frequencies to compensate for hearing -+ * ability at the extreme ends of the audio spectrum -+ */ -+typedef struct OMX_AUDIO_CONFIG_LOUDNESSTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bLoudness; /**< Enable/disable for loudness */ -+} OMX_AUDIO_CONFIG_LOUDNESSTYPE; -+ -+ -+/** Enable / Disable for bass, which controls low frequencies -+ */ -+typedef struct OMX_AUDIO_CONFIG_BASSTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bEnable; /**< Enable/disable for bass control */ -+ OMX_S32 nBass; /**< bass setting for the port, as a -+ continuous value from -100 to 100 -+ (0 means no change in bass level)*/ -+} OMX_AUDIO_CONFIG_BASSTYPE; -+ -+ -+/** Enable / Disable for treble, which controls high frequencies tones -+ */ -+typedef struct OMX_AUDIO_CONFIG_TREBLETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bEnable; /**< Enable/disable for treble control */ -+ OMX_S32 nTreble; /**< treble setting for the port, as a -+ continuous value from -100 to 100 -+ (0 means no change in treble level) */ -+} OMX_AUDIO_CONFIG_TREBLETYPE; -+ -+ -+/** An equalizer is typically used for two reasons: to compensate for an -+ * sub-optimal frequency response of a system to make it sound more natural -+ * or to create intentionally some unnatural coloring to the sound to create -+ * an effect. -+ * @ingroup effects -+ */ -+typedef struct OMX_AUDIO_CONFIG_EQUALIZERTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bEnable; /**< Enable/disable for equalizer */ -+ OMX_BU32 sBandIndex; /**< Band number to be set. Upper Limit is -+ N-1, where N is the number of bands, lower limit is 0 */ -+ OMX_BU32 sCenterFreq; /**< Center frequecies in Hz. This is a -+ read only element and is used to determine -+ the lower, center and upper frequency of -+ this band. */ -+ OMX_BS32 sBandLevel; /**< band level in millibels */ -+} OMX_AUDIO_CONFIG_EQUALIZERTYPE; -+ -+ -+/** Stereo widening mode type -+ * @ingroup effects -+ */ -+typedef enum OMX_AUDIO_STEREOWIDENINGTYPE { -+ OMX_AUDIO_StereoWideningHeadphones, /**< Stereo widening for loudspeakers */ -+ OMX_AUDIO_StereoWideningLoudspeakers, /**< Stereo widening for closely spaced loudspeakers */ -+ OMX_AUDIO_StereoWideningKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_StereoWideningVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_StereoWideningMax = 0x7FFFFFFF -+} OMX_AUDIO_STEREOWIDENINGTYPE; -+ -+ -+/** Control for stereo widening, which is a special 2-channel -+ * case of the audio virtualizer effect. For example, for 5.1-channel -+ * output, it translates to virtual surround sound. -+ * @ingroup effects -+ */ -+typedef struct OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bEnable; /**< Enable/disable for stereo widening control */ -+ OMX_AUDIO_STEREOWIDENINGTYPE eWideningType; /**< Stereo widening algorithm type */ -+ OMX_U32 nStereoWidening; /**< stereo widening setting for the port, -+ as a continuous value from 0 to 100 */ -+} OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE; -+ -+ -+/** The chorus effect (or ``choralizer'') is any signal processor which makes -+ * one sound source (such as a voice) sound like many such sources singing -+ * (or playing) in unison. Since performance in unison is never exact, chorus -+ * effects simulate this by making independently modified copies of the input -+ * signal. Modifications may include (1) delay, (2) frequency shift, and -+ * (3) amplitude modulation. -+ * @ingroup effects -+ */ -+typedef struct OMX_AUDIO_CONFIG_CHORUSTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bEnable; /**< Enable/disable for chorus */ -+ OMX_BU32 sDelay; /**< average delay in milliseconds */ -+ OMX_BU32 sModulationRate; /**< rate of modulation in millihertz */ -+ OMX_U32 nModulationDepth; /**< depth of modulation as a percentage of -+ delay (i.e. 0 to 100) */ -+ OMX_BU32 nFeedback; /**< Feedback from chorus output to input in percentage */ -+} OMX_AUDIO_CONFIG_CHORUSTYPE; -+ -+ -+/** Reverberation is part of the reflected sound that follows the early -+ * reflections. In a typical room, this consists of a dense succession of -+ * echoes whose energy decays exponentially. The reverberation effect structure -+ * as defined here includes both (early) reflections as well as (late) reverberations. -+ * @ingroup effects -+ */ -+typedef struct OMX_AUDIO_CONFIG_REVERBERATIONTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bEnable; /**< Enable/disable for reverberation control */ -+ OMX_BS32 sRoomLevel; /**< Intensity level for the whole room effect -+ (i.e. both early reflections and late -+ reverberation) in millibels */ -+ OMX_BS32 sRoomHighFreqLevel; /**< Attenuation at high frequencies -+ relative to the intensity at low -+ frequencies in millibels */ -+ OMX_BS32 sReflectionsLevel; /**< Intensity level of early reflections -+ (relative to room value), in millibels */ -+ OMX_BU32 sReflectionsDelay; /**< Delay time of the first reflection relative -+ to the direct path, in milliseconds */ -+ OMX_BS32 sReverbLevel; /**< Intensity level of late reverberation -+ relative to room level, in millibels */ -+ OMX_BU32 sReverbDelay; /**< Time delay from the first early reflection -+ to the beginning of the late reverberation -+ section, in milliseconds */ -+ OMX_BU32 sDecayTime; /**< Late reverberation decay time at low -+ frequencies, in milliseconds */ -+ OMX_BU32 nDecayHighFreqRatio; /**< Ratio of high frequency decay time relative -+ to low frequency decay time in percent */ -+ OMX_U32 nDensity; /**< Modal density in the late reverberation decay, -+ in percent (i.e. 0 - 100) */ -+ OMX_U32 nDiffusion; /**< Echo density in the late reverberation decay, -+ in percent (i.e. 0 - 100) */ -+ OMX_BU32 sReferenceHighFreq; /**< Reference high frequency in Hertz. This is -+ the frequency used as the reference for all -+ the high-frequency settings above */ -+ -+} OMX_AUDIO_CONFIG_REVERBERATIONTYPE; -+ -+ -+/** Possible settings for the Echo Cancelation structure to use -+ * @ingroup effects -+ */ -+typedef enum OMX_AUDIO_ECHOCANTYPE { -+ OMX_AUDIO_EchoCanOff = 0, /**< Echo Cancellation is disabled */ -+ OMX_AUDIO_EchoCanNormal, /**< Echo Cancellation normal operation - -+ echo from plastics and face */ -+ OMX_AUDIO_EchoCanHFree, /**< Echo Cancellation optimized for -+ Hands Free operation */ -+ OMX_AUDIO_EchoCanCarKit, /**< Echo Cancellation optimized for -+ Car Kit (longer echo) */ -+ OMX_AUDIO_EchoCanKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_AUDIO_EchoCanVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_AUDIO_EchoCanMax = 0x7FFFFFFF -+} OMX_AUDIO_ECHOCANTYPE; -+ -+ -+/** Enable / Disable for echo cancelation, which removes undesired echo's -+ * from the audio -+ * @ingroup effects -+ */ -+typedef struct OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_AUDIO_ECHOCANTYPE eEchoCancelation; /**< Echo cancelation settings */ -+} OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE; -+ -+ -+/** Enable / Disable for noise reduction, which undesired noise from -+ * the audio -+ * @ingroup effects -+ */ -+typedef struct OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BOOL bNoiseReduction; /**< Enable/disable for noise reduction */ -+} OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE; -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -+/* File EOF */ -+ -diff --git a/encoder/include/khronos/OMX_Component.h b/encoder/include/khronos/OMX_Component.h -new file mode 100755 -index 0000000..56fd37e ---- /dev/null -+++ b/encoder/include/khronos/OMX_Component.h -@@ -0,0 +1,569 @@ -+/* -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** OMX_Component.h - OpenMax IL version 1.1.2 -+ * The OMX_Component header file contains the definitions used to define -+ * the public interface of a component. This header file is intended to -+ * be used by both the application and the component. -+ */ -+ -+#ifndef OMX_Component_h -+#define OMX_Component_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+ -+ -+/* Each OMX header must include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+ -+#include -+#include -+#include -+#include -+ -+/** @ingroup comp */ -+typedef enum OMX_PORTDOMAINTYPE { -+ OMX_PortDomainAudio, -+ OMX_PortDomainVideo, -+ OMX_PortDomainImage, -+ OMX_PortDomainOther, -+ OMX_PortDomainKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_PortDomainVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_PortDomainMax = 0x7ffffff -+} OMX_PORTDOMAINTYPE; -+ -+/** @ingroup comp */ -+typedef struct OMX_PARAM_PORTDEFINITIONTYPE { -+ OMX_U32 nSize; /**< Size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port number the structure applies to */ -+ OMX_DIRTYPE eDir; /**< Direction (input or output) of this port */ -+ OMX_U32 nBufferCountActual; /**< The actual number of buffers allocated on this port */ -+ OMX_U32 nBufferCountMin; /**< The minimum number of buffers this port requires */ -+ OMX_U32 nBufferSize; /**< Size, in bytes, for buffers to be used for this channel */ -+ OMX_BOOL bEnabled; /**< Ports default to enabled and are enabled/disabled by -+ OMX_CommandPortEnable/OMX_CommandPortDisable. -+ When disabled a port is unpopulated. A disabled port -+ is not populated with buffers on a transition to IDLE. */ -+ OMX_BOOL bPopulated; /**< Port is populated with all of its buffers as indicated by -+ nBufferCountActual. A disabled port is always unpopulated. -+ An enabled port is populated on a transition to OMX_StateIdle -+ and unpopulated on a transition to loaded. */ -+ OMX_PORTDOMAINTYPE eDomain; /**< Domain of the port. Determines the contents of metadata below. */ -+ union { -+ OMX_AUDIO_PORTDEFINITIONTYPE audio; -+ OMX_VIDEO_PORTDEFINITIONTYPE video; -+ OMX_IMAGE_PORTDEFINITIONTYPE image; -+ OMX_OTHER_PORTDEFINITIONTYPE other; -+ } format; -+ OMX_BOOL bBuffersContiguous; -+ OMX_U32 nBufferAlignment; -+} OMX_PARAM_PORTDEFINITIONTYPE; -+ -+/** @ingroup comp */ -+typedef struct OMX_PARAM_U32TYPE { -+ OMX_U32 nSize; /**< Size of this structure, in Bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_U32 nU32; /**< U32 value */ -+} OMX_PARAM_U32TYPE; -+ -+/** @ingroup rpm */ -+typedef enum OMX_SUSPENSIONPOLICYTYPE { -+ OMX_SuspensionDisabled, /**< No suspension; v1.0 behavior */ -+ OMX_SuspensionEnabled, /**< Suspension allowed */ -+ OMX_SuspensionPolicyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_SuspensionPolicyStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_SuspensionPolicyMax = 0x7fffffff -+} OMX_SUSPENSIONPOLICYTYPE; -+ -+/** @ingroup rpm */ -+typedef struct OMX_PARAM_SUSPENSIONPOLICYTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_SUSPENSIONPOLICYTYPE ePolicy; -+} OMX_PARAM_SUSPENSIONPOLICYTYPE; -+ -+/** @ingroup rpm */ -+typedef enum OMX_SUSPENSIONTYPE { -+ OMX_NotSuspended, /**< component is not suspended */ -+ OMX_Suspended, /**< component is suspended */ -+ OMX_SuspensionKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_SuspensionVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_SuspendMax = 0x7FFFFFFF -+} OMX_SUSPENSIONTYPE; -+ -+/** @ingroup rpm */ -+typedef struct OMX_PARAM_SUSPENSIONTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_SUSPENSIONTYPE eType; -+} OMX_PARAM_SUSPENSIONTYPE ; -+ -+typedef struct OMX_CONFIG_BOOLEANTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_BOOL bEnabled; -+} OMX_CONFIG_BOOLEANTYPE; -+ -+/* Parameter specifying the content uri to use. */ -+/** @ingroup cp */ -+typedef struct OMX_PARAM_CONTENTURITYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes, including -+ actual URI name */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U8 contentURI[1]; /**< The URI name */ -+} OMX_PARAM_CONTENTURITYPE; -+ -+/* Parameter specifying the pipe to use. */ -+/** @ingroup cp */ -+typedef struct OMX_PARAM_CONTENTPIPETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_HANDLETYPE hPipe; /**< The pipe handle*/ -+} OMX_PARAM_CONTENTPIPETYPE; -+ -+/** @ingroup rpm */ -+typedef struct OMX_RESOURCECONCEALMENTTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_BOOL bResourceConcealmentForbidden; /**< disallow the use of resource concealment -+ methods (like degrading algorithm quality to -+ lower resource consumption or functional bypass) -+ on a component as a resolution to resource conflicts. */ -+} OMX_RESOURCECONCEALMENTTYPE; -+ -+ -+/** @ingroup metadata */ -+typedef enum OMX_METADATACHARSETTYPE { -+ OMX_MetadataCharsetUnknown = 0, -+ OMX_MetadataCharsetASCII, -+ OMX_MetadataCharsetBinary, -+ OMX_MetadataCharsetCodePage1252, -+ OMX_MetadataCharsetUTF8, -+ OMX_MetadataCharsetJavaConformantUTF8, -+ OMX_MetadataCharsetUTF7, -+ OMX_MetadataCharsetImapUTF7, -+ OMX_MetadataCharsetUTF16LE, -+ OMX_MetadataCharsetUTF16BE, -+ OMX_MetadataCharsetGB12345, -+ OMX_MetadataCharsetHZGB2312, -+ OMX_MetadataCharsetGB2312, -+ OMX_MetadataCharsetGB18030, -+ OMX_MetadataCharsetGBK, -+ OMX_MetadataCharsetBig5, -+ OMX_MetadataCharsetISO88591, -+ OMX_MetadataCharsetISO88592, -+ OMX_MetadataCharsetISO88593, -+ OMX_MetadataCharsetISO88594, -+ OMX_MetadataCharsetISO88595, -+ OMX_MetadataCharsetISO88596, -+ OMX_MetadataCharsetISO88597, -+ OMX_MetadataCharsetISO88598, -+ OMX_MetadataCharsetISO88599, -+ OMX_MetadataCharsetISO885910, -+ OMX_MetadataCharsetISO885913, -+ OMX_MetadataCharsetISO885914, -+ OMX_MetadataCharsetISO885915, -+ OMX_MetadataCharsetShiftJIS, -+ OMX_MetadataCharsetISO2022JP, -+ OMX_MetadataCharsetISO2022JP1, -+ OMX_MetadataCharsetISOEUCJP, -+ OMX_MetadataCharsetSMS7Bit, -+ OMX_MetadataCharsetKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_MetadataCharsetVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_MetadataCharsetTypeMax = 0x7FFFFFFF -+} OMX_METADATACHARSETTYPE; -+ -+/** @ingroup metadata */ -+typedef enum OMX_METADATASCOPETYPE { -+ OMX_MetadataScopeAllLevels, -+ OMX_MetadataScopeTopLevel, -+ OMX_MetadataScopePortLevel, -+ OMX_MetadataScopeNodeLevel, -+ OMX_MetadataScopeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_MetadataScopeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_MetadataScopeTypeMax = 0x7fffffff -+} OMX_METADATASCOPETYPE; -+ -+/** @ingroup metadata */ -+typedef enum OMX_METADATASEARCHMODETYPE { -+ OMX_MetadataSearchValueSizeByIndex, -+ OMX_MetadataSearchItemByIndex, -+ OMX_MetadataSearchNextItemByKey, -+ OMX_MetadataSearchKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_MetadataSearchVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_MetadataSearchTypeMax = 0x7fffffff -+} OMX_METADATASEARCHMODETYPE; -+/** @ingroup metadata */ -+typedef struct OMX_CONFIG_METADATAITEMCOUNTTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_METADATASCOPETYPE eScopeMode; -+ OMX_U32 nScopeSpecifier; -+ OMX_U32 nMetadataItemCount; -+} OMX_CONFIG_METADATAITEMCOUNTTYPE; -+ -+/** @ingroup metadata */ -+typedef struct OMX_CONFIG_METADATAITEMTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_METADATASCOPETYPE eScopeMode; -+ OMX_U32 nScopeSpecifier; -+ OMX_U32 nMetadataItemIndex; -+ OMX_METADATASEARCHMODETYPE eSearchMode; -+ OMX_METADATACHARSETTYPE eKeyCharset; -+ OMX_U8 nKeySizeUsed; -+ OMX_U8 nKey[128]; -+ OMX_METADATACHARSETTYPE eValueCharset; -+ OMX_STRING sLanguageCountry; -+ OMX_U32 nValueMaxSize; -+ OMX_U32 nValueSizeUsed; -+ OMX_U8 nValue[1]; -+} OMX_CONFIG_METADATAITEMTYPE; -+ -+/* @ingroup metadata */ -+typedef struct OMX_CONFIG_CONTAINERNODECOUNTTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_BOOL bAllKeys; -+ OMX_U32 nParentNodeID; -+ OMX_U32 nNumNodes; -+} OMX_CONFIG_CONTAINERNODECOUNTTYPE; -+ -+/** @ingroup metadata */ -+typedef struct OMX_CONFIG_CONTAINERNODEIDTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_BOOL bAllKeys; -+ OMX_U32 nParentNodeID; -+ OMX_U32 nNodeIndex; -+ OMX_U32 nNodeID; -+ OMX_STRING cNodeName; -+ OMX_BOOL bIsLeafType; -+} OMX_CONFIG_CONTAINERNODEIDTYPE; -+ -+/** @ingroup metadata */ -+typedef struct OMX_PARAM_METADATAFILTERTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_BOOL bAllKeys; /* if true then this structure refers to all keys and -+ * the three key fields below are ignored */ -+ OMX_METADATACHARSETTYPE eKeyCharset; -+ OMX_U32 nKeySizeUsed; -+ OMX_U8 nKey [128]; -+ OMX_U32 nLanguageCountrySizeUsed; -+ OMX_U8 nLanguageCountry[128]; -+ OMX_BOOL bEnabled; /* if true then key is part of filter (e.g. -+ * retained for query later). If false then -+ * key is not part of filter */ -+} OMX_PARAM_METADATAFILTERTYPE; -+ -+/** The OMX_HANDLETYPE structure defines the component handle. The component -+ * handle is used to access all of the component's public methods and also -+ * contains pointers to the component's private data area. The component -+ * handle is initialized by the OMX core (with help from the component) -+ * during the process of loading the component. After the component is -+ * successfully loaded, the application can safely access any of the -+ * component's public functions (although some may return an error because -+ * the state is inappropriate for the access). -+ * -+ * @ingroup comp -+ */ -+typedef struct OMX_COMPONENTTYPE { -+ /** The size of this structure, in bytes. It is the responsibility -+ of the allocator of this structure to fill in this value. Since -+ this structure is allocated by the GetHandle function, this -+ function will fill in this value. */ -+ OMX_U32 nSize; -+ -+ /** nVersion is the version of the OMX specification that the structure -+ is built against. It is the responsibility of the creator of this -+ structure to initialize this value and every user of this structure -+ should verify that it knows how to use the exact version of -+ this structure found herein. */ -+ OMX_VERSIONTYPE nVersion; -+ -+ /** pComponentPrivate is a pointer to the component private data area. -+ This member is allocated and initialized by the component when the -+ component is first loaded. The application should not access this -+ data area. */ -+ OMX_PTR pComponentPrivate; -+ -+ /** pApplicationPrivate is a pointer that is a parameter to the -+ OMX_GetHandle method, and contains an application private value -+ provided by the IL client. This application private data is -+ returned to the IL Client by OMX in all callbacks */ -+ OMX_PTR pApplicationPrivate; -+ -+ /** refer to OMX_GetComponentVersion in OMX_core.h or the OMX IL -+ specification for details on the GetComponentVersion method. -+ */ -+ OMX_ERRORTYPE (*GetComponentVersion)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_OUT OMX_STRING pComponentName, -+ OMX_OUT OMX_VERSIONTYPE* pComponentVersion, -+ OMX_OUT OMX_VERSIONTYPE* pSpecVersion, -+ OMX_OUT OMX_UUIDTYPE* pComponentUUID); -+ -+ /** refer to OMX_SendCommand in OMX_core.h or the OMX IL -+ specification for details on the SendCommand method. -+ */ -+ OMX_ERRORTYPE (*SendCommand)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_COMMANDTYPE Cmd, -+ OMX_IN OMX_U32 nParam1, -+ OMX_IN OMX_PTR pCmdData); -+ -+ /** refer to OMX_GetParameter in OMX_core.h or the OMX IL -+ specification for details on the GetParameter method. -+ */ -+ OMX_ERRORTYPE (*GetParameter)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_INDEXTYPE nParamIndex, -+ OMX_INOUT OMX_PTR pComponentParameterStructure); -+ -+ -+ /** refer to OMX_SetParameter in OMX_core.h or the OMX IL -+ specification for details on the SetParameter method. -+ */ -+ OMX_ERRORTYPE (*SetParameter)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_INDEXTYPE nIndex, -+ OMX_IN OMX_PTR pComponentParameterStructure); -+ -+ -+ /** refer to OMX_GetConfig in OMX_core.h or the OMX IL -+ specification for details on the GetConfig method. -+ */ -+ OMX_ERRORTYPE (*GetConfig)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_INDEXTYPE nIndex, -+ OMX_INOUT OMX_PTR pComponentConfigStructure); -+ -+ -+ /** refer to OMX_SetConfig in OMX_core.h or the OMX IL -+ specification for details on the SetConfig method. -+ */ -+ OMX_ERRORTYPE (*SetConfig)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_INDEXTYPE nIndex, -+ OMX_IN OMX_PTR pComponentConfigStructure); -+ -+ -+ /** refer to OMX_GetExtensionIndex in OMX_core.h or the OMX IL -+ specification for details on the GetExtensionIndex method. -+ */ -+ OMX_ERRORTYPE (*GetExtensionIndex)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_STRING cParameterName, -+ OMX_OUT OMX_INDEXTYPE* pIndexType); -+ -+ -+ /** refer to OMX_GetState in OMX_core.h or the OMX IL -+ specification for details on the GetState method. -+ */ -+ OMX_ERRORTYPE (*GetState)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_OUT OMX_STATETYPE* pState); -+ -+ -+ /** The ComponentTunnelRequest method will interact with another OMX -+ component to determine if tunneling is possible and to setup the -+ tunneling. The return codes for this method can be used to -+ determine if tunneling is not possible, or if tunneling is not -+ supported. -+ -+ Base profile components (i.e. non-interop) do not support this -+ method and should return OMX_ErrorNotImplemented -+ -+ The interop profile component MUST support tunneling to another -+ interop profile component with a compatible port parameters. -+ A component may also support proprietary communication. -+ -+ If proprietary communication is supported the negotiation of -+ proprietary communication is done outside of OMX in a vendor -+ specific way. It is only required that the proper result be -+ returned and the details of how the setup is done is left -+ to the component implementation. -+ -+ When this method is invoked when nPort in an output port, the -+ component will: -+ 1. Populate the pTunnelSetup structure with the output port's -+ requirements and constraints for the tunnel. -+ -+ When this method is invoked when nPort in an input port, the -+ component will: -+ 1. Query the necessary parameters from the output port to -+ determine if the ports are compatible for tunneling -+ 2. If the ports are compatible, the component should store -+ the tunnel step provided by the output port -+ 3. Determine which port (either input or output) is the buffer -+ supplier, and call OMX_SetParameter on the output port to -+ indicate this selection. -+ -+ The component will return from this call within 5 msec. -+ -+ @param [in] hComp -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle method. -+ @param [in] nPort -+ nPort is used to select the port on the component to be used -+ for tunneling. -+ @param [in] hTunneledComp -+ Handle of the component to tunnel with. This is the component -+ handle returned by the call to the OMX_GetHandle method. When -+ this parameter is 0x0 the component should setup the port for -+ communication with the application / IL Client. -+ @param [in] nPortOutput -+ nPortOutput is used indicate the port the component should -+ tunnel with. -+ @param [in] pTunnelSetup -+ Pointer to the tunnel setup structure. When nPort is an output port -+ the component should populate the fields of this structure. When -+ When nPort is an input port the component should review the setup -+ provided by the component with the output port. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup tun -+ */ -+ -+ OMX_ERRORTYPE (*ComponentTunnelRequest)( -+ OMX_IN OMX_HANDLETYPE hComp, -+ OMX_IN OMX_U32 nPort, -+ OMX_IN OMX_HANDLETYPE hTunneledComp, -+ OMX_IN OMX_U32 nTunneledPort, -+ OMX_INOUT OMX_TUNNELSETUPTYPE* pTunnelSetup); -+ -+ /** refer to OMX_UseBuffer in OMX_core.h or the OMX IL -+ specification for details on the UseBuffer method. -+ @ingroup buf -+ */ -+ OMX_ERRORTYPE (*UseBuffer)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, -+ OMX_IN OMX_U32 nPortIndex, -+ OMX_IN OMX_PTR pAppPrivate, -+ OMX_IN OMX_U32 nSizeBytes, -+ OMX_IN OMX_U8* pBuffer); -+ -+ /** refer to OMX_AllocateBuffer in OMX_core.h or the OMX IL -+ specification for details on the AllocateBuffer method. -+ @ingroup buf -+ */ -+ OMX_ERRORTYPE (*AllocateBuffer)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer, -+ OMX_IN OMX_U32 nPortIndex, -+ OMX_IN OMX_PTR pAppPrivate, -+ OMX_IN OMX_U32 nSizeBytes); -+ -+ /** refer to OMX_FreeBuffer in OMX_core.h or the OMX IL -+ specification for details on the FreeBuffer method. -+ @ingroup buf -+ */ -+ OMX_ERRORTYPE (*FreeBuffer)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_U32 nPortIndex, -+ OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); -+ -+ /** refer to OMX_EmptyThisBuffer in OMX_core.h or the OMX IL -+ specification for details on the EmptyThisBuffer method. -+ @ingroup buf -+ */ -+ OMX_ERRORTYPE (*EmptyThisBuffer)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); -+ -+ /** refer to OMX_FillThisBuffer in OMX_core.h or the OMX IL -+ specification for details on the FillThisBuffer method. -+ @ingroup buf -+ */ -+ OMX_ERRORTYPE (*FillThisBuffer)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); -+ -+ /** The SetCallbacks method is used by the core to specify the callback -+ structure from the application to the component. This is a blocking -+ call. The component will return from this call within 5 msec. -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the GetHandle function. -+ @param [in] pCallbacks -+ pointer to an OMX_CALLBACKTYPE structure used to provide the -+ callback information to the component -+ @param [in] pAppData -+ pointer to an application defined value. It is anticipated that -+ the application will pass a pointer to a data structure or a "this -+ pointer" in this area to allow the callback (in the application) -+ to determine the context of the call -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ */ -+ OMX_ERRORTYPE (*SetCallbacks)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_CALLBACKTYPE* pCallbacks, -+ OMX_IN OMX_PTR pAppData); -+ -+ /** ComponentDeInit method is used to deinitialize the component -+ providing a means to free any resources allocated at component -+ initialization. NOTE: After this call the component handle is -+ not valid for further use. -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the GetHandle function. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ */ -+ OMX_ERRORTYPE (*ComponentDeInit)( -+ OMX_IN OMX_HANDLETYPE hComponent); -+ -+ /** @ingroup buf */ -+ OMX_ERRORTYPE (*UseEGLImage)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, -+ OMX_IN OMX_U32 nPortIndex, -+ OMX_IN OMX_PTR pAppPrivate, -+ OMX_IN void* eglImage); -+ -+ OMX_ERRORTYPE (*ComponentRoleEnum)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_OUT OMX_U8 *cRole, -+ OMX_IN OMX_U32 nIndex); -+ -+} OMX_COMPONENTTYPE; -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -+/* File EOF */ -diff --git a/encoder/include/khronos/OMX_ComponentExt.h b/encoder/include/khronos/OMX_ComponentExt.h -new file mode 100755 -index 0000000..24ec20c ---- /dev/null -+++ b/encoder/include/khronos/OMX_ComponentExt.h -@@ -0,0 +1,61 @@ -+/* -+ * Copyright (c) 2016 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** OMX_ComponentExt.h - OpenMax IL version 1.1.2 -+ * The OMX_ComponentExt header file contains extensions to the definitions used -+ * by both the application and the component to access common items. -+ */ -+ -+#ifndef OMX_ComponentExt_h -+#define OMX_ComponentExt_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+/* Each OMX header must include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+#include -+ -+ -+/** Set/query the commit mode */ -+typedef struct OMX_CONFIG_COMMITMODETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_BOOL bDeferred; -+} OMX_CONFIG_COMMITMODETYPE; -+ -+/** Explicit commit */ -+typedef struct OMX_CONFIG_COMMITTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+} OMX_CONFIG_COMMITTYPE; -+ -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif /* OMX_ComponentExt_h */ -diff --git a/encoder/include/khronos/OMX_ContentPipe.h b/encoder/include/khronos/OMX_ContentPipe.h -new file mode 100755 -index 0000000..843cb7a ---- /dev/null -+++ b/encoder/include/khronos/OMX_ContentPipe.h -@@ -0,0 +1,193 @@ -+/* -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** OMX_ContentPipe.h - OpenMax IL version 1.1.2 -+ * The OMX_ContentPipe header file contains the definitions used to define -+ * the public interface for content piples. This header file is intended to -+ * be used by the component. -+ */ -+ -+#ifndef OMX_CONTENTPIPE_H -+#define OMX_CONTENTPIPE_H -+ -+#ifndef KD_EACCES -+/* OpenKODE error codes. CPResult values may be zero (indicating success -+ or one of the following values) */ -+#define KD_EACCES (1) -+#define KD_EADDRINUSE (2) -+#define KD_EAGAIN (5) -+#define KD_EBADF (7) -+#define KD_EBUSY (8) -+#define KD_ECONNREFUSED (9) -+#define KD_ECONNRESET (10) -+#define KD_EDEADLK (11) -+#define KD_EDESTADDRREQ (12) -+#define KD_ERANGE (35) -+#define KD_EEXIST (13) -+#define KD_EFBIG (14) -+#define KD_EHOSTUNREACH (15) -+#define KD_EINVAL (17) -+#define KD_EIO (18) -+#define KD_EISCONN (20) -+#define KD_EISDIR (21) -+#define KD_EMFILE (22) -+#define KD_ENAMETOOLONG (23) -+#define KD_ENOENT (24) -+#define KD_ENOMEM (25) -+#define KD_ENOSPC (26) -+#define KD_ENOSYS (27) -+#define KD_ENOTCONN (28) -+#define KD_EPERM (33) -+#define KD_ETIMEDOUT (36) -+#define KD_EILSEQ (19) -+#endif -+ -+/** Map types from OMX standard types only here so interface is as generic as possible. */ -+typedef OMX_U32 CPresult; -+typedef char * CPstring; -+typedef void * CPhandle; -+typedef OMX_U32 CPuint; -+typedef OMX_S32 CPint; -+typedef char CPbyte; -+typedef OMX_BOOL CPbool; -+ -+/** enumeration of origin types used in the CP_PIPETYPE's Seek function -+ * @ingroup cp -+ */ -+typedef enum CP_ORIGINTYPE { -+ CP_OriginBegin, -+ CP_OriginCur, -+ CP_OriginEnd, -+ CP_OriginKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ CP_OriginVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ CP_OriginMax = 0X7FFFFFFF -+} CP_ORIGINTYPE; -+ -+/** enumeration of contact access types used in the CP_PIPETYPE's Open function -+ * @ingroup cp -+ */ -+typedef enum CP_ACCESSTYPE { -+ CP_AccessRead, -+ CP_AccessWrite, -+ CP_AccessReadWrite , -+ CP_AccessKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ CP_AccessVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ CP_AccessMax = 0X7FFFFFFF -+} CP_ACCESSTYPE; -+ -+/** enumeration of results returned by the CP_PIPETYPE's CheckAvailableBytes function -+ * @ingroup cp -+ */ -+typedef enum CP_CHECKBYTESRESULTTYPE { -+ CP_CheckBytesOk, /**< There are at least the request number -+ of bytes available */ -+ CP_CheckBytesNotReady, /**< The pipe is still retrieving bytes -+ and presently lacks sufficient bytes. -+ Client will be called when they are -+ sufficient bytes are available. */ -+ CP_CheckBytesInsufficientBytes , /**< The pipe has retrieved all bytes -+ but those available are less than those -+ requested */ -+ CP_CheckBytesAtEndOfStream, /**< The pipe has reached the end of stream -+ and no more bytes are available. */ -+ CP_CheckBytesOutOfBuffers, /**< All read/write buffers are currently in use. */ -+ CP_CheckBytesKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ CP_CheckBytesVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ CP_CheckBytesMax = 0X7FFFFFFF -+} CP_CHECKBYTESRESULTTYPE; -+ -+/** enumeration of content pipe events sent to the client callback. -+ * @ingroup cp -+ */ -+typedef enum CP_EVENTTYPE { -+ CP_BytesAvailable, /** bytes requested in a CheckAvailableBytes call are now available*/ -+ CP_Overflow, /** enumeration of content pipe events sent to the client callback*/ -+ CP_PipeDisconnected , /** enumeration of content pipe events sent to the client callback*/ -+ CP_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ CP_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ CP_EventMax = 0X7FFFFFFF -+} CP_EVENTTYPE; -+ -+/** content pipe definition -+ * @ingroup cp -+ */ -+typedef struct CP_PIPETYPE { -+ /** Open a content stream for reading or writing. */ -+ CPresult (*Open)( CPhandle* hContent, CPstring szURI, CP_ACCESSTYPE eAccess ); -+ -+ /** Close a content stream. */ -+ CPresult (*Close)( CPhandle hContent ); -+ -+ /** Create a content source and open it for writing. */ -+ CPresult (*Create)( CPhandle *hContent, CPstring szURI ); -+ -+ /** Check the that specified number of bytes are available for reading or writing (depending on access type).*/ -+ CPresult (*CheckAvailableBytes)( CPhandle hContent, CPuint nBytesRequested, CP_CHECKBYTESRESULTTYPE *eResult ); -+ -+ /** Seek to certain position in the content relative to the specified origin. */ -+ CPresult (*SetPosition)( CPhandle hContent, CPint nOffset, CP_ORIGINTYPE eOrigin); -+ -+ /** Retrieve the current position relative to the start of the content. */ -+ CPresult (*GetPosition)( CPhandle hContent, CPuint *pPosition); -+ -+ /** Retrieve data of the specified size from the content stream (advance content pointer by size of data). -+ Note: pipe client provides pointer. This function is appropriate for small high frequency reads. */ -+ CPresult (*Read)( CPhandle hContent, CPbyte *pData, CPuint nSize); -+ -+ /** Retrieve a buffer allocated by the pipe that contains the requested number of bytes. -+ Buffer contains the next block of bytes, as specified by nSize, of the content. nSize also -+ returns the size of the block actually read. Content pointer advances the by the returned size. -+ Note: pipe provides pointer. This function is appropriate for large reads. The client must call -+ ReleaseReadBuffer when done with buffer. -+ -+ In some cases the requested block may not reside in contiguous memory within the -+ pipe implementation. For instance if the pipe leverages a circular buffer then the requested -+ block may straddle the boundary of the circular buffer. By default a pipe implementation -+ performs a copy in this case to provide the block to the pipe client in one contiguous buffer. -+ If, however, the client sets bForbidCopy, then the pipe returns only those bytes preceding the memory -+ boundary. Here the client may retrieve the data in segments over successive calls. */ -+ CPresult (*ReadBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint *nSize, CPbool bForbidCopy); -+ -+ /** Release a buffer obtained by ReadBuffer back to the pipe. */ -+ CPresult (*ReleaseReadBuffer)(CPhandle hContent, CPbyte *pBuffer); -+ -+ /** Write data of the specified size to the content (advance content pointer by size of data). -+ Note: pipe client provides pointer. This function is appropriate for small high frequency writes. */ -+ CPresult (*Write)( CPhandle hContent, CPbyte *data, CPuint nSize); -+ -+ /** Retrieve a buffer allocated by the pipe used to write data to the content. -+ Client will fill buffer with output data. Note: pipe provides pointer. This function is appropriate -+ for large writes. The client must call WriteBuffer when done it has filled the buffer with data.*/ -+ CPresult (*GetWriteBuffer)( CPhandle hContent, CPbyte **ppBuffer, CPuint nSize); -+ -+ /** Deliver a buffer obtained via GetWriteBuffer to the pipe. Pipe will write the -+ the contents of the buffer to content and advance content pointer by the size of the buffer */ -+ CPresult (*WriteBuffer)( CPhandle hContent, CPbyte *pBuffer, CPuint nFilledSize); -+ -+ /** Register a per-handle client callback with the content pipe. */ -+ CPresult (*RegisterCallback)( CPhandle hContent, CPresult (*ClientCallback)(CP_EVENTTYPE eEvent, CPuint iParam)); -+ -+} CP_PIPETYPE; -+ -+#endif -+ -diff --git a/encoder/include/khronos/OMX_Core.h b/encoder/include/khronos/OMX_Core.h -new file mode 100755 -index 0000000..c8f3c4b ---- /dev/null -+++ b/encoder/include/khronos/OMX_Core.h -@@ -0,0 +1,1422 @@ -+/* -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** OMX_Core.h - OpenMax IL version 1.1.2 -+ * The OMX_Core header file contains the definitions used by both the -+ * application and the component to access common items. -+ */ -+ -+#ifndef OMX_Core_h -+#define OMX_Core_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+ -+/* Each OMX header shall include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+ -+#include -+ -+ -+/** The OMX_COMMANDTYPE enumeration is used to specify the action in the -+ * OMX_SendCommand macro. -+ * @ingroup core -+ */ -+typedef enum OMX_COMMANDTYPE -+{ -+ OMX_CommandStateSet, /**< Change the component state */ -+ OMX_CommandFlush, /**< Flush the data queue(s) of a component */ -+ OMX_CommandPortDisable, /**< Disable a port on a component. */ -+ OMX_CommandPortEnable, /**< Enable a port on a component. */ -+ OMX_CommandMarkBuffer, /**< Mark a component/buffer for observation */ -+ OMX_CommandKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_CommandVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_CommandMax = 0X7FFFFFFF -+} OMX_COMMANDTYPE; -+ -+ -+ -+/** The OMX_STATETYPE enumeration is used to indicate or change the component -+ * state. This enumeration reflects the current state of the component when -+ * used with the OMX_GetState macro or becomes the parameter in a state change -+ * command when used with the OMX_SendCommand macro. -+ * -+ * The component will be in the Loaded state after the component is initially -+ * loaded into memory. In the Loaded state, the component is not allowed to -+ * allocate or hold resources other than to build it's internal parameter -+ * and configuration tables. The application will send one or more -+ * SetParameters/GetParameters and SetConfig/GetConfig commands to the -+ * component and the component will record each of these parameter and -+ * configuration changes for use later. When the application sends the -+ * Idle command, the component will acquire the resources needed for the -+ * specified configuration and will transition to the idle state if the -+ * allocation is successful. If the component cannot successfully -+ * transition to the idle state for any reason, the state of the component -+ * shall be fully rolled back to the Loaded state (e.g. all allocated -+ * resources shall be released). When the component receives the command -+ * to go to the Executing state, it shall begin processing buffers by -+ * sending all input buffers it holds to the application. While -+ * the component is in the Idle state, the application may also send the -+ * Pause command. If the component receives the pause command while in the -+ * Idle state, the component shall send all input buffers it holds to the -+ * application, but shall not begin processing buffers. This will allow the -+ * application to prefill buffers. -+ * -+ * @ingroup comp -+ */ -+ -+typedef enum OMX_STATETYPE { -+ OMX_StateInvalid, /**< component has detected that it's internal data -+ structures are corrupted to the point that -+ it cannot determine it's state properly */ -+ OMX_StateLoaded, /**< component has been loaded but has not completed -+ initialization. The OMX_SetParameter macro -+ and the OMX_GetParameter macro are the only -+ valid macros allowed to be sent to the -+ component in this state. */ -+ OMX_StateIdle, /**< component initialization has been completed -+ successfully and the component is ready to -+ to start. */ -+ OMX_StateExecuting, /**< component has accepted the start command and -+ is processing data (if data is available) */ -+ OMX_StatePause, /**< component has received pause command */ -+ OMX_StateWaitForResources, /**< component is waiting for resources, either after -+ preemption or before it gets the resources requested. -+ See specification for complete details. */ -+ OMX_StateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_StateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_StateMax = 0X7FFFFFFF -+} OMX_STATETYPE; -+ -+/** The OMX_ERRORTYPE enumeration defines the standard OMX Errors. These -+ * errors should cover most of the common failure cases. However, -+ * vendors are free to add additional error messages of their own as -+ * long as they follow these rules: -+ * 1. Vendor error messages shall be in the range of 0x90000000 to -+ * 0x9000FFFF. -+ * 2. Vendor error messages shall be defined in a header file provided -+ * with the component. No error messages are allowed that are -+ * not defined. -+ */ -+typedef enum OMX_ERRORTYPE { -+ OMX_ErrorNone = 0, -+ -+ /** There were insufficient resources to perform the requested operation */ -+ OMX_ErrorInsufficientResources = (OMX_S32) 0x80001000, -+ -+ /** There was an error, but the cause of the error could not be determined */ -+ OMX_ErrorUndefined = (OMX_S32) 0x80001001, -+ -+ /** The component name string was not valid */ -+ OMX_ErrorInvalidComponentName = (OMX_S32) 0x80001002, -+ -+ /** No component with the specified name string was found */ -+ OMX_ErrorComponentNotFound = (OMX_S32) 0x80001003, -+ -+ /** The component specified did not have a "OMX_ComponentInit" or -+ "OMX_ComponentDeInit entry point */ -+ OMX_ErrorInvalidComponent = (OMX_S32) 0x80001004, -+ -+ /** One or more parameters were not valid */ -+ OMX_ErrorBadParameter = (OMX_S32) 0x80001005, -+ -+ /** The requested function is not implemented */ -+ OMX_ErrorNotImplemented = (OMX_S32) 0x80001006, -+ -+ /** The buffer was emptied before the next buffer was ready */ -+ OMX_ErrorUnderflow = (OMX_S32) 0x80001007, -+ -+ /** The buffer was not available when it was needed */ -+ OMX_ErrorOverflow = (OMX_S32) 0x80001008, -+ -+ /** The hardware failed to respond as expected */ -+ OMX_ErrorHardware = (OMX_S32) 0x80001009, -+ -+ /** The component is in the state OMX_StateInvalid */ -+ OMX_ErrorInvalidState = (OMX_S32) 0x8000100A, -+ -+ /** Stream is found to be corrupt */ -+ OMX_ErrorStreamCorrupt = (OMX_S32) 0x8000100B, -+ -+ /** Ports being connected are not compatible */ -+ OMX_ErrorPortsNotCompatible = (OMX_S32) 0x8000100C, -+ -+ /** Resources allocated to an idle component have been -+ lost resulting in the component returning to the loaded state */ -+ OMX_ErrorResourcesLost = (OMX_S32) 0x8000100D, -+ -+ /** No more indicies can be enumerated */ -+ OMX_ErrorNoMore = (OMX_S32) 0x8000100E, -+ -+ /** The component detected a version mismatch */ -+ OMX_ErrorVersionMismatch = (OMX_S32) 0x8000100F, -+ -+ /** The component is not ready to return data at this time */ -+ OMX_ErrorNotReady = (OMX_S32) 0x80001010, -+ -+ /** There was a timeout that occurred */ -+ OMX_ErrorTimeout = (OMX_S32) 0x80001011, -+ -+ /** This error occurs when trying to transition into the state you are already in */ -+ OMX_ErrorSameState = (OMX_S32) 0x80001012, -+ -+ /** Resources allocated to an executing or paused component have been -+ preempted, causing the component to return to the idle state */ -+ OMX_ErrorResourcesPreempted = (OMX_S32) 0x80001013, -+ -+ /** A non-supplier port sends this error to the IL client (via the EventHandler callback) -+ during the allocation of buffers (on a transition from the LOADED to the IDLE state or -+ on a port restart) when it deems that it has waited an unusually long time for the supplier -+ to send it an allocated buffer via a UseBuffer call. */ -+ OMX_ErrorPortUnresponsiveDuringAllocation = (OMX_S32) 0x80001014, -+ -+ /** A non-supplier port sends this error to the IL client (via the EventHandler callback) -+ during the deallocation of buffers (on a transition from the IDLE to LOADED state or -+ on a port stop) when it deems that it has waited an unusually long time for the supplier -+ to request the deallocation of a buffer header via a FreeBuffer call. */ -+ OMX_ErrorPortUnresponsiveDuringDeallocation = (OMX_S32) 0x80001015, -+ -+ /** A supplier port sends this error to the IL client (via the EventHandler callback) -+ during the stopping of a port (either on a transition from the IDLE to LOADED -+ state or a port stop) when it deems that it has waited an unusually long time for -+ the non-supplier to return a buffer via an EmptyThisBuffer or FillThisBuffer call. */ -+ OMX_ErrorPortUnresponsiveDuringStop = (OMX_S32) 0x80001016, -+ -+ /** Attempting a state transtion that is not allowed */ -+ OMX_ErrorIncorrectStateTransition = (OMX_S32) 0x80001017, -+ -+ /* Attempting a command that is not allowed during the present state. */ -+ OMX_ErrorIncorrectStateOperation = (OMX_S32) 0x80001018, -+ -+ /** The values encapsulated in the parameter or config structure are not supported. */ -+ OMX_ErrorUnsupportedSetting = (OMX_S32) 0x80001019, -+ -+ /** The parameter or config indicated by the given index is not supported. */ -+ OMX_ErrorUnsupportedIndex = (OMX_S32) 0x8000101A, -+ -+ /** The port index supplied is incorrect. */ -+ OMX_ErrorBadPortIndex = (OMX_S32) 0x8000101B, -+ -+ /** The port has lost one or more of its buffers and it thus unpopulated. */ -+ OMX_ErrorPortUnpopulated = (OMX_S32) 0x8000101C, -+ -+ /** Component suspended due to temporary loss of resources */ -+ OMX_ErrorComponentSuspended = (OMX_S32) 0x8000101D, -+ -+ /** Component suspended due to an inability to acquire dynamic resources */ -+ OMX_ErrorDynamicResourcesUnavailable = (OMX_S32) 0x8000101E, -+ -+ /** When the macroblock error reporting is enabled the component returns new error -+ for every frame that has errors */ -+ OMX_ErrorMbErrorsInFrame = (OMX_S32) 0x8000101F, -+ -+ /** A component reports this error when it cannot parse or determine the format of an input stream. */ -+ OMX_ErrorFormatNotDetected = (OMX_S32) 0x80001020, -+ -+ /** The content open operation failed. */ -+ OMX_ErrorContentPipeOpenFailed = (OMX_S32) 0x80001021, -+ -+ /** The content creation operation failed. */ -+ OMX_ErrorContentPipeCreationFailed = (OMX_S32) 0x80001022, -+ -+ /** Separate table information is being used */ -+ OMX_ErrorSeperateTablesUsed = (OMX_S32) 0x80001023, -+ -+ /** Tunneling is unsupported by the component*/ -+ OMX_ErrorTunnelingUnsupported = (OMX_S32) 0x80001024, -+ -+ OMX_ErrorKhronosExtensions = (OMX_S32)0x8F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_ErrorVendorStartUnused = (OMX_S32)0x90000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_ErrorMax = 0x7FFFFFFF -+} OMX_ERRORTYPE; -+ -+/** @ingroup core */ -+typedef OMX_ERRORTYPE (* OMX_COMPONENTINITTYPE)(OMX_IN OMX_HANDLETYPE hComponent); -+ -+/** @ingroup core */ -+typedef struct OMX_COMPONENTREGISTERTYPE { -+ const char * pName; /* Component name, 128 byte limit (including '\0') applies */ -+ OMX_COMPONENTINITTYPE pInitialize; /* Component instance initialization function */ -+} OMX_COMPONENTREGISTERTYPE; -+ -+/** @ingroup core */ -+extern OMX_COMPONENTREGISTERTYPE OMX_ComponentRegistered[]; -+ -+/** @ingroup rpm */ -+typedef struct OMX_PRIORITYMGMTTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nGroupPriority; /**< Priority of the component group */ -+ OMX_U32 nGroupID; /**< ID of the component group */ -+} OMX_PRIORITYMGMTTYPE; -+ -+/* Component name and Role names are limited to 128 characters including the terminating '\0'. */ -+#define OMX_MAX_STRINGNAME_SIZE 128 -+ -+/** @ingroup comp */ -+typedef struct OMX_PARAM_COMPONENTROLETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U8 cRole[OMX_MAX_STRINGNAME_SIZE]; /**< name of standard component which defines component role */ -+} OMX_PARAM_COMPONENTROLETYPE; -+ -+/** End of Stream Buffer Flag: -+ * -+ * A component sets EOS when it has no more data to emit on a particular -+ * output port. Thus an output port shall set EOS on the last buffer it -+ * emits. A component's determination of when an output port should -+ * cease sending data is implemenation specific. -+ * @ingroup buf -+ */ -+ -+#define OMX_BUFFERFLAG_EOS 0x00000001 -+ -+/** Start Time Buffer Flag: -+ * -+ * The source of a stream (e.g. a demux component) sets the STARTTIME -+ * flag on the buffer that contains the starting timestamp for the -+ * stream. The starting timestamp corresponds to the first data that -+ * should be displayed at startup or after a seek. -+ * The first timestamp of the stream is not necessarily the start time. -+ * For instance, in the case of a seek to a particular video frame, -+ * the target frame may be an interframe. Thus the first buffer of -+ * the stream will be the intra-frame preceding the target frame and -+ * the starttime will occur with the target frame (with any other -+ * required frames required to reconstruct the target intervening). -+ * -+ * The STARTTIME flag is directly associated with the buffer's -+ * timestamp ' thus its association to buffer data and its -+ * propagation is identical to the timestamp's. -+ * -+ * When a Sync Component client receives a buffer with the -+ * STARTTIME flag it shall perform a SetConfig on its sync port -+ * using OMX_ConfigTimeClientStartTime and passing the buffer's -+ * timestamp. -+ * -+ * @ingroup buf -+ */ -+ -+#define OMX_BUFFERFLAG_STARTTIME 0x00000002 -+ -+ -+ -+/** Decode Only Buffer Flag: -+ * -+ * The source of a stream (e.g. a demux component) sets the DECODEONLY -+ * flag on any buffer that should shall be decoded but should not be -+ * displayed. This flag is used, for instance, when a source seeks to -+ * a target interframe that requires the decode of frames preceding the -+ * target to facilitate the target's reconstruction. In this case the -+ * source would emit the frames preceding the target downstream -+ * but mark them as decode only. -+ * -+ * The DECODEONLY is associated with buffer data and propagated in a -+ * manner identical to the buffer timestamp. -+ * -+ * A component that renders data should ignore all buffers with -+ * the DECODEONLY flag set. -+ * -+ * @ingroup buf -+ */ -+ -+#define OMX_BUFFERFLAG_DECODEONLY 0x00000004 -+ -+ -+/* Data Corrupt Flag: This flag is set when the IL client believes the data in the associated buffer is corrupt -+ * @ingroup buf -+ */ -+ -+#define OMX_BUFFERFLAG_DATACORRUPT 0x00000008 -+ -+/* End of Frame: The buffer contains exactly one end of frame and no data -+ * occurs after the end of frame. This flag is an optional hint. The absence -+ * of this flag does not imply the absence of an end of frame within the buffer. -+ * @ingroup buf -+*/ -+#define OMX_BUFFERFLAG_ENDOFFRAME 0x00000010 -+ -+/* Sync Frame Flag: This flag is set when the buffer content contains a coded sync frame ' -+ * a frame that has no dependency on any other frame information -+ * @ingroup buf -+ */ -+#define OMX_BUFFERFLAG_SYNCFRAME 0x00000020 -+ -+/* Extra data present flag: there is extra data appended to the data stream -+ * residing in the buffer -+ * @ingroup buf -+ */ -+#define OMX_BUFFERFLAG_EXTRADATA 0x00000040 -+ -+/** Codec Config Buffer Flag: -+* OMX_BUFFERFLAG_CODECCONFIG is an optional flag that is set by an -+* output port when all bytes in the buffer form part or all of a set of -+* codec specific configuration data. Examples include SPS/PPS nal units -+* for OMX_VIDEO_CodingAVC or AudioSpecificConfig data for -+* OMX_AUDIO_CodingAAC. Any component that for a given stream sets -+* OMX_BUFFERFLAG_CODECCONFIG shall not mix codec configuration bytes -+* with frame data in the same buffer, and shall send all buffers -+* containing codec configuration bytes before any buffers containing -+* frame data that those configurations bytes describe. -+* If the stream format for a particular codec has a frame specific -+* header at the start of each frame, for example OMX_AUDIO_CodingMP3 or -+* OMX_AUDIO_CodingAAC in ADTS mode, then these shall be presented as -+* normal without setting OMX_BUFFERFLAG_CODECCONFIG. -+ * @ingroup buf -+ */ -+#define OMX_BUFFERFLAG_CODECCONFIG 0x00000080 -+ -+ -+ -+/** @ingroup buf */ -+typedef struct OMX_BUFFERHEADERTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U8* pBuffer; /**< Pointer to actual block of memory -+ that is acting as the buffer */ -+ OMX_U32 nAllocLen; /**< size of the buffer allocated, in bytes */ -+ OMX_U32 nFilledLen; /**< number of bytes currently in the -+ buffer */ -+ OMX_U32 nOffset; /**< start offset of valid data in bytes from -+ the start of the buffer */ -+ OMX_PTR pAppPrivate; /**< pointer to any data the application -+ wants to associate with this buffer */ -+ OMX_PTR pPlatformPrivate; /**< pointer to any data the platform -+ wants to associate with this buffer */ -+ OMX_PTR pInputPortPrivate; /**< pointer to any data the input port -+ wants to associate with this buffer */ -+ OMX_PTR pOutputPortPrivate; /**< pointer to any data the output port -+ wants to associate with this buffer */ -+ OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will generate a -+ mark event upon processing this buffer. */ -+ OMX_PTR pMarkData; /**< Application specific data associated with -+ the mark sent on a mark event to disambiguate -+ this mark from others. */ -+ OMX_U32 nTickCount; /**< Optional entry that the component and -+ application can update with a tick count -+ when they access the component. This -+ value should be in microseconds. Since -+ this is a value relative to an arbitrary -+ starting point, this value cannot be used -+ to determine absolute time. This is an -+ optional entry and not all components -+ will update it.*/ -+ OMX_TICKS nTimeStamp; /**< Timestamp corresponding to the sample -+ starting at the first logical sample -+ boundary in the buffer. Timestamps of -+ successive samples within the buffer may -+ be inferred by adding the duration of the -+ of the preceding buffer to the timestamp -+ of the preceding buffer.*/ -+ OMX_U32 nFlags; /**< buffer specific flags */ -+ OMX_U32 nOutputPortIndex; /**< The index of the output port (if any) using -+ this buffer */ -+ OMX_U32 nInputPortIndex; /**< The index of the input port (if any) using -+ this buffer */ -+} OMX_BUFFERHEADERTYPE; -+ -+/** The OMX_EXTRADATATYPE enumeration is used to define the -+ * possible extra data payload types. -+ * NB: this enum is binary backwards compatible with the previous -+ * OMX_EXTRADATA_QUANT define. This should be replaced with -+ * OMX_ExtraDataQuantization. -+ */ -+typedef enum OMX_EXTRADATATYPE { -+ OMX_ExtraDataNone = 0, /**< Indicates that no more extra data sections follow */ -+ OMX_ExtraDataQuantization, /**< The data payload contains quantization data */ -+ OMX_ExtraDataKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_ExtraDataVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_ExtraDataMax = 0x7FFFFFFF -+} OMX_EXTRADATATYPE; -+ -+ -+typedef struct OMX_OTHER_EXTRADATATYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_EXTRADATATYPE eType; /* Extra Data type */ -+ OMX_U32 nDataSize; /* Size of the supporting data to follow */ -+ OMX_U8 data[1]; /* Supporting data hint */ -+} OMX_OTHER_EXTRADATATYPE; -+ -+/** @ingroup comp */ -+typedef struct OMX_PORT_PARAM_TYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPorts; /**< The number of ports for this component */ -+ OMX_U32 nStartPortNumber; /** first port number for this type of port */ -+} OMX_PORT_PARAM_TYPE; -+ -+/** @ingroup comp */ -+typedef enum OMX_EVENTTYPE { -+ OMX_EventCmdComplete, /**< component has sucessfully completed a command */ -+ OMX_EventError, /**< component has detected an error condition */ -+ OMX_EventMark, /**< component has detected a buffer mark */ -+ OMX_EventPortSettingsChanged, /**< component is reported a port settings change */ -+ OMX_EventBufferFlag, /**< component has detected an EOS */ -+ OMX_EventResourcesAcquired, /**< component has been granted resources and is -+ automatically starting the state change from -+ OMX_StateWaitForResources to OMX_StateIdle. */ -+ OMX_EventComponentResumed, /**< Component resumed due to reacquisition of resources */ -+ OMX_EventDynamicResourcesAvailable, /**< Component has acquired previously unavailable dynamic resources */ -+ OMX_EventPortFormatDetected, /**< Component has detected a supported format. */ -+ OMX_EventKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_EventVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_EventMax = 0x7FFFFFFF -+} OMX_EVENTTYPE; -+ -+typedef struct OMX_CALLBACKTYPE { -+ /** The EventHandler method is used to notify the application when an -+ event of interest occurs. Events are defined in the OMX_EVENTTYPE -+ enumeration. Please see that enumeration for details of what will -+ be returned for each type of event. Callbacks should not return -+ an error to the component, so if an error occurs, the application -+ shall handle it internally. This is a blocking call. -+ -+ The application should return from this call within 5 msec to avoid -+ blocking the component for an excessively long period of time. -+ -+ @param hComponent -+ handle of the component to access. This is the component -+ handle returned by the call to the GetHandle function. -+ @param pAppData -+ pointer to an application defined value that was provided in the -+ pAppData parameter to the OMX_GetHandle method for the component. -+ This application defined value is provided so that the application -+ can have a component specific context when receiving the callback. -+ @param eEvent -+ Event that the component wants to notify the application about. -+ @param nData1 -+ nData will be the OMX_ERRORTYPE for an error event and will be -+ an OMX_COMMANDTYPE for a command complete event and OMX_INDEXTYPE for a OMX_PortSettingsChanged event. -+ @param nData2 -+ nData2 will hold further information related to the event. Can be OMX_STATETYPE for -+ a OMX_CommandStateSet command or port index for a OMX_PortSettingsChanged event. -+ Default value is 0 if not used. ) -+ @param pEventData -+ Pointer to additional event-specific data (see spec for meaning). -+ */ -+ -+ OMX_ERRORTYPE (*EventHandler)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_PTR pAppData, -+ OMX_IN OMX_EVENTTYPE eEvent, -+ OMX_IN OMX_U32 nData1, -+ OMX_IN OMX_U32 nData2, -+ OMX_IN OMX_PTR pEventData); -+ -+ /** The EmptyBufferDone method is used to return emptied buffers from an -+ input port back to the application for reuse. This is a blocking call -+ so the application should not attempt to refill the buffers during this -+ call, but should queue them and refill them in another thread. There -+ is no error return, so the application shall handle any errors generated -+ internally. -+ -+ The application should return from this call within 5 msec. -+ -+ @param hComponent -+ handle of the component to access. This is the component -+ handle returned by the call to the GetHandle function. -+ @param pAppData -+ pointer to an application defined value that was provided in the -+ pAppData parameter to the OMX_GetHandle method for the component. -+ This application defined value is provided so that the application -+ can have a component specific context when receiving the callback. -+ @param pBuffer -+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer -+ or AllocateBuffer indicating the buffer that was emptied. -+ @ingroup buf -+ */ -+ OMX_ERRORTYPE (*EmptyBufferDone)( -+ OMX_IN OMX_HANDLETYPE hComponent, -+ OMX_IN OMX_PTR pAppData, -+ OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); -+ -+ /** The FillBufferDone method is used to return filled buffers from an -+ output port back to the application for emptying and then reuse. -+ This is a blocking call so the application should not attempt to -+ empty the buffers during this call, but should queue the buffers -+ and empty them in another thread. There is no error return, so -+ the application shall handle any errors generated internally. The -+ application shall also update the buffer header to indicate the -+ number of bytes placed into the buffer. -+ -+ The application should return from this call within 5 msec. -+ -+ @param hComponent -+ handle of the component to access. This is the component -+ handle returned by the call to the GetHandle function. -+ @param pAppData -+ pointer to an application defined value that was provided in the -+ pAppData parameter to the OMX_GetHandle method for the component. -+ This application defined value is provided so that the application -+ can have a component specific context when receiving the callback. -+ @param pBuffer -+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer -+ or AllocateBuffer indicating the buffer that was filled. -+ @ingroup buf -+ */ -+ OMX_ERRORTYPE (*FillBufferDone)( -+ OMX_OUT OMX_HANDLETYPE hComponent, -+ OMX_OUT OMX_PTR pAppData, -+ OMX_OUT OMX_BUFFERHEADERTYPE* pBuffer); -+ -+} OMX_CALLBACKTYPE; -+ -+/** The OMX_BUFFERSUPPLIERTYPE enumeration is used to dictate port supplier -+ preference when tunneling between two ports. -+ @ingroup tun buf -+*/ -+typedef enum OMX_BUFFERSUPPLIERTYPE { -+ OMX_BufferSupplyUnspecified = 0x0, /**< port supplying the buffers is unspecified, -+ or don't care */ -+ OMX_BufferSupplyInput, /**< input port supplies the buffers */ -+ OMX_BufferSupplyOutput, /**< output port supplies the buffers */ -+ OMX_BufferSupplyKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_BufferSupplyVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_BufferSupplyMax = 0x7FFFFFFF -+} OMX_BUFFERSUPPLIERTYPE; -+ -+ -+/** buffer supplier parameter -+ * @ingroup tun -+ */ -+typedef struct OMX_PARAM_BUFFERSUPPLIERTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_BUFFERSUPPLIERTYPE eBufferSupplier; /**< buffer supplier */ -+} OMX_PARAM_BUFFERSUPPLIERTYPE; -+ -+ -+/**< indicates that buffers received by an input port of a tunnel -+ may not modify the data in the buffers -+ @ingroup tun -+ */ -+#define OMX_PORTTUNNELFLAG_READONLY 0x00000001 -+ -+ -+/** The OMX_TUNNELSETUPTYPE structure is used to pass data from an output -+ port to an input port as part the two ComponentTunnelRequest calls -+ resulting from a OMX_SetupTunnel call from the IL Client. -+ @ingroup tun -+ */ -+typedef struct OMX_TUNNELSETUPTYPE { -+ OMX_U32 nTunnelFlags; /**< bit flags for tunneling */ -+ OMX_BUFFERSUPPLIERTYPE eSupplier; /**< supplier preference */ -+} OMX_TUNNELSETUPTYPE; -+ -+/* OMX Component headers is included to enable the core to use -+ macros for functions into the component for OMX release 1.0. -+ Developers should not access any structures or data from within -+ the component header directly */ -+/* TO BE REMOVED - #include */ -+ -+/** GetComponentVersion will return information about the component. -+ This is a blocking call. This macro will go directly from the -+ application to the component (via a core macro). The -+ component will return from this call within 5 msec. -+ @param [in] hComponent -+ handle of component to execute the command -+ @param [out] pComponentName -+ pointer to an empty string of length 128 bytes. The component -+ will write its name into this string. The name will be -+ terminated by a single zero byte. The name of a component will -+ be 127 bytes or less to leave room for the trailing zero byte. -+ An example of a valid component name is "OMX.ABC.ChannelMixer\0". -+ @param [out] pComponentVersion -+ pointer to an OMX Version structure that the component will fill -+ in. The component will fill in a value that indicates the -+ component version. NOTE: the component version is NOT the same -+ as the OMX Specification version (found in all structures). The -+ component version is defined by the vendor of the component and -+ its value is entirely up to the component vendor. -+ @param [out] pSpecVersion -+ pointer to an OMX Version structure that the component will fill -+ in. The SpecVersion is the version of the specification that the -+ component was built against. Please note that this value may or -+ may not match the structure's version. For example, if the -+ component was built against the 2.0 specification, but the -+ application (which creates the structure is built against the -+ 1.0 specification the versions would be different. -+ @param [out] pComponentUUID -+ pointer to the UUID of the component which will be filled in by -+ the component. The UUID is a unique identifier that is set at -+ RUN time for the component and is unique to each instantion of -+ the component. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp -+ */ -+#define OMX_GetComponentVersion( \ -+ hComponent, \ -+ pComponentName, \ -+ pComponentVersion, \ -+ pSpecVersion, \ -+ pComponentUUID) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->GetComponentVersion( \ -+ hComponent, \ -+ pComponentName, \ -+ pComponentVersion, \ -+ pSpecVersion, \ -+ pComponentUUID) /* Macro End */ -+ -+ -+/** Send a command to the component. This call is a non-blocking call. -+ The component should check the parameters and then queue the command -+ to the component thread to be executed. The component thread shall -+ send the EventHandler() callback at the conclusion of the command. -+ This macro will go directly from the application to the component (via -+ a core macro). The component will return from this call within 5 msec. -+ -+ When the command is "OMX_CommandStateSet" the component will queue a -+ state transition to the new state idenfied in nParam. -+ -+ When the command is "OMX_CommandFlush", to flush a port's buffer queues, -+ the command will force the component to return all buffers NOT CURRENTLY -+ BEING PROCESSED to the application, in the order in which the buffers -+ were received. -+ -+ When the command is "OMX_CommandPortDisable" or -+ "OMX_CommandPortEnable", the component's port (given by the value of -+ nParam) will be stopped or restarted. -+ -+ When the command "OMX_CommandMarkBuffer" is used to mark a buffer, the -+ pCmdData will point to a OMX_MARKTYPE structure containing the component -+ handle of the component to examine the buffer chain for the mark. nParam1 -+ contains the index of the port on which the buffer mark is applied. -+ -+ Specification text for more details. -+ -+ @param [in] hComponent -+ handle of component to execute the command -+ @param [in] Cmd -+ Command for the component to execute -+ @param [in] nParam -+ Parameter for the command to be executed. When Cmd has the value -+ OMX_CommandStateSet, value is a member of OMX_STATETYPE. When Cmd has -+ the value OMX_CommandFlush, value of nParam indicates which port(s) -+ to flush. -1 is used to flush all ports a single port index will -+ only flush that port. When Cmd has the value "OMX_CommandPortDisable" -+ or "OMX_CommandPortEnable", the component's port is given by -+ the value of nParam. When Cmd has the value "OMX_CommandMarkBuffer" -+ the components pot is given by the value of nParam. -+ @param [in] pCmdData -+ Parameter pointing to the OMX_MARKTYPE structure when Cmd has the value -+ "OMX_CommandMarkBuffer". -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp -+ */ -+#define OMX_SendCommand( \ -+ hComponent, \ -+ Cmd, \ -+ nParam, \ -+ pCmdData) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->SendCommand( \ -+ hComponent, \ -+ Cmd, \ -+ nParam, \ -+ pCmdData) /* Macro End */ -+ -+ -+/** The OMX_GetParameter macro will get one of the current parameter -+ settings from the component. This macro cannot only be invoked when -+ the component is in the OMX_StateInvalid state. The nParamIndex -+ parameter is used to indicate which structure is being requested from -+ the component. The application shall allocate the correct structure -+ and shall fill in the structure size and version information before -+ invoking this macro. When the parameter applies to a port, the -+ caller shall fill in the appropriate nPortIndex value indicating the -+ port on which the parameter applies. If the component has not had -+ any settings changed, then the component should return a set of -+ valid DEFAULT parameters for the component. This is a blocking -+ call. -+ -+ The component should return from this call within 20 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [in] nParamIndex -+ Index of the structure to be filled. This value is from the -+ OMX_INDEXTYPE enumeration. -+ @param [in,out] pComponentParameterStructure -+ Pointer to application allocated structure to be filled by the -+ component. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp -+ */ -+#define OMX_GetParameter( \ -+ hComponent, \ -+ nParamIndex, \ -+ pComponentParameterStructure) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->GetParameter( \ -+ hComponent, \ -+ nParamIndex, \ -+ pComponentParameterStructure) /* Macro End */ -+ -+ -+/** The OMX_SetParameter macro will send an initialization parameter -+ structure to a component. Each structure shall be sent one at a time, -+ in a separate invocation of the macro. This macro can only be -+ invoked when the component is in the OMX_StateLoaded state, or the -+ port is disabled (when the parameter applies to a port). The -+ nParamIndex parameter is used to indicate which structure is being -+ passed to the component. The application shall allocate the -+ correct structure and shall fill in the structure size and version -+ information (as well as the actual data) before invoking this macro. -+ The application is free to dispose of this structure after the call -+ as the component is required to copy any data it shall retain. This -+ is a blocking call. -+ -+ The component should return from this call within 20 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [in] nIndex -+ Index of the structure to be sent. This value is from the -+ OMX_INDEXTYPE enumeration. -+ @param [in] pComponentParameterStructure -+ pointer to application allocated structure to be used for -+ initialization by the component. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp -+ */ -+#define OMX_SetParameter( \ -+ hComponent, \ -+ nParamIndex, \ -+ pComponentParameterStructure) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->SetParameter( \ -+ hComponent, \ -+ nParamIndex, \ -+ pComponentParameterStructure) /* Macro End */ -+ -+ -+/** The OMX_GetConfig macro will get one of the configuration structures -+ from a component. This macro can be invoked anytime after the -+ component has been loaded. The nParamIndex call parameter is used to -+ indicate which structure is being requested from the component. The -+ application shall allocate the correct structure and shall fill in the -+ structure size and version information before invoking this macro. -+ If the component has not had this configuration parameter sent before, -+ then the component should return a set of valid DEFAULT values for the -+ component. This is a blocking call. -+ -+ The component should return from this call within 5 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [in] nIndex -+ Index of the structure to be filled. This value is from the -+ OMX_INDEXTYPE enumeration. -+ @param [in,out] pComponentConfigStructure -+ pointer to application allocated structure to be filled by the -+ component. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp -+*/ -+#define OMX_GetConfig( \ -+ hComponent, \ -+ nConfigIndex, \ -+ pComponentConfigStructure) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->GetConfig( \ -+ hComponent, \ -+ nConfigIndex, \ -+ pComponentConfigStructure) /* Macro End */ -+ -+ -+/** The OMX_SetConfig macro will send one of the configuration -+ structures to a component. Each structure shall be sent one at a time, -+ each in a separate invocation of the macro. This macro can be invoked -+ anytime after the component has been loaded. The application shall -+ allocate the correct structure and shall fill in the structure size -+ and version information (as well as the actual data) before invoking -+ this macro. The application is free to dispose of this structure after -+ the call as the component is required to copy any data it shall retain. -+ This is a blocking call. -+ -+ The component should return from this call within 5 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [in] nConfigIndex -+ Index of the structure to be sent. This value is from the -+ OMX_INDEXTYPE enumeration above. -+ @param [in] pComponentConfigStructure -+ pointer to application allocated structure to be used for -+ initialization by the component. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp -+ */ -+#define OMX_SetConfig( \ -+ hComponent, \ -+ nConfigIndex, \ -+ pComponentConfigStructure) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->SetConfig( \ -+ hComponent, \ -+ nConfigIndex, \ -+ pComponentConfigStructure) /* Macro End */ -+ -+ -+/** The OMX_GetExtensionIndex macro will invoke a component to translate -+ a vendor specific configuration or parameter string into an OMX -+ structure index. There is no requirement for the vendor to support -+ this command for the indexes already found in the OMX_INDEXTYPE -+ enumeration (this is done to save space in small components). The -+ component shall support all vendor supplied extension indexes not found -+ in the master OMX_INDEXTYPE enumeration. This is a blocking call. -+ -+ The component should return from this call within 5 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the GetHandle function. -+ @param [in] cParameterName -+ OMX_STRING that shall be less than 128 characters long including -+ the trailing null byte. This is the string that will get -+ translated by the component into a configuration index. -+ @param [out] pIndexType -+ a pointer to a OMX_INDEXTYPE to receive the index value. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp -+ */ -+#define OMX_GetExtensionIndex( \ -+ hComponent, \ -+ cParameterName, \ -+ pIndexType) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->GetExtensionIndex( \ -+ hComponent, \ -+ cParameterName, \ -+ pIndexType) /* Macro End */ -+ -+ -+/** The OMX_GetState macro will invoke the component to get the current -+ state of the component and place the state value into the location -+ pointed to by pState. -+ -+ The component should return from this call within 5 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [out] pState -+ pointer to the location to receive the state. The value returned -+ is one of the OMX_STATETYPE members -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp -+ */ -+#define OMX_GetState( \ -+ hComponent, \ -+ pState) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->GetState( \ -+ hComponent, \ -+ pState) /* Macro End */ -+ -+ -+/** The OMX_UseBuffer macro will request that the component use -+ a buffer (and allocate its own buffer header) already allocated -+ by another component, or by the IL Client. This is a blocking -+ call. -+ -+ The component should return from this call within 20 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [out] ppBuffer -+ pointer to an OMX_BUFFERHEADERTYPE structure used to receive the -+ pointer to the buffer header -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp buf -+ */ -+ -+#define OMX_UseBuffer( \ -+ hComponent, \ -+ ppBufferHdr, \ -+ nPortIndex, \ -+ pAppPrivate, \ -+ nSizeBytes, \ -+ pBuffer) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->UseBuffer( \ -+ hComponent, \ -+ ppBufferHdr, \ -+ nPortIndex, \ -+ pAppPrivate, \ -+ nSizeBytes, \ -+ pBuffer) -+ -+ -+/** The OMX_AllocateBuffer macro will request that the component allocate -+ a new buffer and buffer header. The component will allocate the -+ buffer and the buffer header and return a pointer to the buffer -+ header. This is a blocking call. -+ -+ The component should return from this call within 5 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [out] ppBuffer -+ pointer to an OMX_BUFFERHEADERTYPE structure used to receive -+ the pointer to the buffer header -+ @param [in] nPortIndex -+ nPortIndex is used to select the port on the component the buffer will -+ be used with. The port can be found by using the nPortIndex -+ value as an index into the Port Definition array of the component. -+ @param [in] pAppPrivate -+ pAppPrivate is used to initialize the pAppPrivate member of the -+ buffer header structure. -+ @param [in] nSizeBytes -+ size of the buffer to allocate. Used when bAllocateNew is true. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp buf -+ */ -+#define OMX_AllocateBuffer( \ -+ hComponent, \ -+ ppBuffer, \ -+ nPortIndex, \ -+ pAppPrivate, \ -+ nSizeBytes) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->AllocateBuffer( \ -+ hComponent, \ -+ ppBuffer, \ -+ nPortIndex, \ -+ pAppPrivate, \ -+ nSizeBytes) /* Macro End */ -+ -+ -+/** The OMX_FreeBuffer macro will release a buffer header from the component -+ which was allocated using either OMX_AllocateBuffer or OMX_UseBuffer. If -+ the component allocated the buffer (see the OMX_UseBuffer macro) then -+ the component shall free the buffer and buffer header. This is a -+ blocking call. -+ -+ The component should return from this call within 20 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [in] nPortIndex -+ nPortIndex is used to select the port on the component the buffer will -+ be used with. -+ @param [in] pBuffer -+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer -+ or AllocateBuffer. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp buf -+ */ -+#define OMX_FreeBuffer( \ -+ hComponent, \ -+ nPortIndex, \ -+ pBuffer) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->FreeBuffer( \ -+ hComponent, \ -+ nPortIndex, \ -+ pBuffer) /* Macro End */ -+ -+ -+/** The OMX_EmptyThisBuffer macro will send a buffer full of data to an -+ input port of a component. The buffer will be emptied by the component -+ and returned to the application via the EmptyBufferDone call back. -+ This is a non-blocking call in that the component will record the buffer -+ and return immediately and then empty the buffer, later, at the proper -+ time. As expected, this macro may be invoked only while the component -+ is in the OMX_StateExecuting. If nPortIndex does not specify an input -+ port, the component shall return an error. -+ -+ The component should return from this call within 5 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [in] pBuffer -+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer -+ or AllocateBuffer. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp buf -+ */ -+#define OMX_EmptyThisBuffer( \ -+ hComponent, \ -+ pBuffer) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->EmptyThisBuffer( \ -+ hComponent, \ -+ pBuffer) /* Macro End */ -+ -+ -+/** The OMX_FillThisBuffer macro will send an empty buffer to an -+ output port of a component. The buffer will be filled by the component -+ and returned to the application via the FillBufferDone call back. -+ This is a non-blocking call in that the component will record the buffer -+ and return immediately and then fill the buffer, later, at the proper -+ time. As expected, this macro may be invoked only while the component -+ is in the OMX_ExecutingState. If nPortIndex does not specify an output -+ port, the component shall return an error. -+ -+ The component should return from this call within 5 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [in] pBuffer -+ pointer to an OMX_BUFFERHEADERTYPE structure allocated with UseBuffer -+ or AllocateBuffer. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp buf -+ */ -+#define OMX_FillThisBuffer( \ -+ hComponent, \ -+ pBuffer) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->FillThisBuffer( \ -+ hComponent, \ -+ pBuffer) /* Macro End */ -+ -+ -+ -+/** The OMX_UseEGLImage macro will request that the component use -+ a EGLImage provided by EGL (and allocate its own buffer header) -+ This is a blocking call. -+ -+ The component should return from this call within 20 msec. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the OMX_GetHandle function. -+ @param [out] ppBuffer -+ pointer to an OMX_BUFFERHEADERTYPE structure used to receive the -+ pointer to the buffer header. Note that the memory location used -+ for this buffer is NOT visible to the IL Client. -+ @param [in] nPortIndex -+ nPortIndex is used to select the port on the component the buffer will -+ be used with. The port can be found by using the nPortIndex -+ value as an index into the Port Definition array of the component. -+ @param [in] pAppPrivate -+ pAppPrivate is used to initialize the pAppPrivate member of the -+ buffer header structure. -+ @param [in] eglImage -+ eglImage contains the handle of the EGLImage to use as a buffer on the -+ specified port. The component is expected to validate properties of -+ the EGLImage against the configuration of the port to ensure the component -+ can use the EGLImage as a buffer. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup comp buf -+ */ -+#define OMX_UseEGLImage( \ -+ hComponent, \ -+ ppBufferHdr, \ -+ nPortIndex, \ -+ pAppPrivate, \ -+ eglImage) \ -+ ((OMX_COMPONENTTYPE*)hComponent)->UseEGLImage( \ -+ hComponent, \ -+ ppBufferHdr, \ -+ nPortIndex, \ -+ pAppPrivate, \ -+ eglImage) -+ -+/** The OMX_Init method is used to initialize the OMX core. It shall be the -+ first call made into OMX and it should only be executed one time without -+ an interviening OMX_Deinit call. -+ -+ The core should return from this call within 20 msec. -+ -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup core -+ */ -+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Init(void); -+ -+ -+/** The OMX_Deinit method is used to deinitialize the OMX core. It shall be -+ the last call made into OMX. In the event that the core determines that -+ thare are components loaded when this call is made, the core may return -+ with an error rather than try to unload the components. -+ -+ The core should return from this call within 20 msec. -+ -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup core -+ */ -+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_Deinit(void); -+ -+ -+/** The OMX_ComponentNameEnum method will enumerate through all the names of -+ recognised valid components in the system. This function is provided -+ as a means to detect all the components in the system run-time. There is -+ no strict ordering to the enumeration order of component names, although -+ each name will only be enumerated once. If the OMX core supports run-time -+ installation of new components, it is only requried to detect newly -+ installed components when the first call to enumerate component names -+ is made (i.e. when nIndex is 0x0). -+ -+ The core should return from this call in 20 msec. -+ -+ @param [out] cComponentName -+ pointer to a null terminated string with the component name. The -+ names of the components are strings less than 127 bytes in length -+ plus the trailing null for a maximum size of 128 bytes. An example -+ of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0". Names are -+ assigned by the vendor, but shall start with "OMX." and then have -+ the Vendor designation next. -+ @param [in] nNameLength -+ number of characters in the cComponentName string. With all -+ component name strings restricted to less than 128 characters -+ (including the trailing null) it is recomended that the caller -+ provide a input string for the cComponentName of 128 characters. -+ @param [in] nIndex -+ number containing the enumeration index for the component. -+ Multiple calls to OMX_ComponentNameEnum with increasing values -+ of nIndex will enumerate through the component names in the -+ system until OMX_ErrorNoMore is returned. The value of nIndex -+ is 0 to (N-1), where N is the number of valid installed components -+ in the system. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. When the value of nIndex exceeds the number of -+ components in the system minus 1, OMX_ErrorNoMore will be -+ returned. Otherwise the appropriate OMX error will be returned. -+ @ingroup core -+ */ -+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_ComponentNameEnum( -+ OMX_OUT OMX_STRING cComponentName, -+ OMX_IN OMX_U32 nNameLength, -+ OMX_IN OMX_U32 nIndex); -+ -+ -+/** The OMX_GetHandle method will locate the component specified by the -+ component name given, load that component into memory and then invoke -+ the component's methods to create an instance of the component. -+ -+ The core should return from this call within 20 msec. -+ -+ @param [out] pHandle -+ pointer to an OMX_HANDLETYPE pointer to be filled in by this method. -+ @param [in] cComponentName -+ pointer to a null terminated string with the component name. The -+ names of the components are strings less than 127 bytes in length -+ plus the trailing null for a maximum size of 128 bytes. An example -+ of a valid component name is "OMX.TI.AUDIO.DSP.MIXER\0". Names are -+ assigned by the vendor, but shall start with "OMX." and then have -+ the Vendor designation next. -+ @param [in] pAppData -+ pointer to an application defined value that will be returned -+ during callbacks so that the application can identify the source -+ of the callback. -+ @param [in] pCallBacks -+ pointer to a OMX_CALLBACKTYPE structure that will be passed to the -+ component to initialize it with. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup core -+ */ -+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_GetHandle( -+ OMX_OUT OMX_HANDLETYPE* pHandle, -+ OMX_IN OMX_STRING cComponentName, -+ OMX_IN OMX_PTR pAppData, -+ OMX_IN OMX_CALLBACKTYPE* pCallBacks); -+ -+ -+/** The OMX_FreeHandle method will free a handle allocated by the OMX_GetHandle -+ method. If the component reference count goes to zero, the component will -+ be unloaded from memory. -+ -+ The core should return from this call within 20 msec when the component is -+ in the OMX_StateLoaded state. -+ -+ @param [in] hComponent -+ Handle of the component to be accessed. This is the component -+ handle returned by the call to the GetHandle function. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ @ingroup core -+ */ -+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_FreeHandle( -+ OMX_IN OMX_HANDLETYPE hComponent); -+ -+ -+ -+/** The OMX_SetupTunnel method will handle the necessary calls to the components -+ to setup the specified tunnel the two components. NOTE: This is -+ an actual method (not a #define macro). This method will make calls into -+ the component ComponentTunnelRequest method to do the actual tunnel -+ connection. -+ -+ The ComponentTunnelRequest method on both components will be called. -+ This method shall not be called unless the component is in the -+ OMX_StateLoaded state except when the ports used for the tunnel are -+ disabled. In this case, the component may be in the OMX_StateExecuting, -+ OMX_StatePause, or OMX_StateIdle states. -+ -+ The core should return from this call within 20 msec. -+ -+ @param [in] hOutput -+ Handle of the component to be accessed. Also this is the handle -+ of the component whose port, specified in the nPortOutput parameter -+ will be used the source for the tunnel. This is the component handle -+ returned by the call to the OMX_GetHandle function. There is a -+ requirement that hOutput be the source for the data when -+ tunelling (i.e. nPortOutput is an output port). If 0x0, the component -+ specified in hInput will have it's port specified in nPortInput -+ setup for communication with the application / IL client. -+ @param [in] nPortOutput -+ nPortOutput is used to select the source port on component to be -+ used in the tunnel. -+ @param [in] hInput -+ This is the component to setup the tunnel with. This is the handle -+ of the component whose port, specified in the nPortInput parameter -+ will be used the destination for the tunnel. This is the component handle -+ returned by the call to the OMX_GetHandle function. There is a -+ requirement that hInput be the destination for the data when -+ tunelling (i.e. nPortInut is an input port). If 0x0, the component -+ specified in hOutput will have it's port specified in nPortPOutput -+ setup for communication with the application / IL client. -+ @param [in] nPortInput -+ nPortInput is used to select the destination port on component to be -+ used in the tunnel. -+ @return OMX_ERRORTYPE -+ If the command successfully executes, the return code will be -+ OMX_ErrorNone. Otherwise the appropriate OMX error will be returned. -+ When OMX_ErrorNotImplemented is returned, one or both components is -+ a non-interop component and does not support tunneling. -+ -+ On failure, the ports of both components are setup for communication -+ with the application / IL Client. -+ @ingroup core tun -+ */ -+OMX_API OMX_ERRORTYPE OMX_APIENTRY OMX_SetupTunnel( -+ OMX_IN OMX_HANDLETYPE hOutput, -+ OMX_IN OMX_U32 nPortOutput, -+ OMX_IN OMX_HANDLETYPE hInput, -+ OMX_IN OMX_U32 nPortInput); -+ -+/** @ingroup cp */ -+OMX_API OMX_ERRORTYPE OMX_GetContentPipe( -+ OMX_OUT OMX_HANDLETYPE *hPipe, -+ OMX_IN OMX_STRING szURI); -+ -+/** The OMX_GetComponentsOfRole method will return the number of components that support the given -+ role and (if the compNames field is non-NULL) the names of those components. The call will fail if -+ an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the -+ client should: -+ * first call this function with the compNames field NULL to determine the number of component names -+ * second call this function with the compNames field pointing to an array of names allocated -+ according to the number returned by the first call. -+ -+ The core should return from this call within 5 msec. -+ -+ @param [in] role -+ This is generic standard component name consisting only of component class -+ name and the type within that class (e.g. 'audio_decoder.aac'). -+ @param [inout] pNumComps -+ This is used both as input and output. -+ -+ If compNames is NULL, the input is ignored and the output specifies how many components support -+ the given role. -+ -+ If compNames is not NULL, on input it bounds the size of the input structure and -+ on output, it specifies the number of components string names listed within the compNames parameter. -+ @param [inout] compNames -+ If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings which accepts -+ a list of the names of all physical components that implement the specified standard component name. -+ Each name is NULL terminated. numComps indicates the number of names. -+ @ingroup core -+ */ -+OMX_API OMX_ERRORTYPE OMX_GetComponentsOfRole ( -+ OMX_IN OMX_STRING role, -+ OMX_INOUT OMX_U32 *pNumComps, -+ OMX_INOUT OMX_U8 **compNames); -+ -+/** The OMX_GetRolesOfComponent method will return the number of roles supported by the given -+ component and (if the roles field is non-NULL) the names of those roles. The call will fail if -+ an insufficiently sized array of names is supplied. To ensure the array is sufficiently sized the -+ client should: -+ * first call this function with the roles field NULL to determine the number of role names -+ * second call this function with the roles field pointing to an array of names allocated -+ according to the number returned by the first call. -+ -+ The core should return from this call within 5 msec. -+ -+ @param [in] compName -+ This is the name of the component being queried about. -+ @param [inout] pNumRoles -+ This is used both as input and output. -+ -+ If roles is NULL, the input is ignored and the output specifies how many roles the component supports. -+ -+ If compNames is not NULL, on input it bounds the size of the input structure and -+ on output, it specifies the number of roles string names listed within the roles parameter. -+ @param [out] roles -+ If NULL this field is ignored. If non-NULL this points to an array of 128-byte strings -+ which accepts a list of the names of all standard components roles implemented on the -+ specified component name. numComps indicates the number of names. -+ @ingroup core -+ */ -+OMX_API OMX_ERRORTYPE OMX_GetRolesOfComponent ( -+ OMX_IN OMX_STRING compName, -+ OMX_INOUT OMX_U32 *pNumRoles, -+ OMX_OUT OMX_U8 **roles); -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -+/* File EOF */ -+ -diff --git a/encoder/include/khronos/OMX_CoreExt.h b/encoder/include/khronos/OMX_CoreExt.h -new file mode 100755 -index 0000000..e2e21cc ---- /dev/null -+++ b/encoder/include/khronos/OMX_CoreExt.h -@@ -0,0 +1,73 @@ -+/* -+ * Copyright (c) 2016 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** OMX_CoreExt.h - OpenMax IL version 1.1.2 -+ * The OMX_CoreExt header file contains extensions to the definitions used -+ * by both the application and the component to access common items. -+ */ -+ -+#ifndef OMX_CoreExt_h -+#define OMX_CoreExt_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+/* Each OMX header shall include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+#include -+ -+/** Extensions to the standard IL errors. */ -+typedef enum OMX_ERROREXTTYPE -+{ -+ OMX_ErrorInvalidMode = (OMX_S32) (OMX_ErrorKhronosExtensions + 0x00000001), -+ OMX_ErrorExtMax = 0x7FFFFFFF -+} OMX_ERROREXTTYPE; -+ -+ -+/** Event type extensions. */ -+typedef enum OMX_EVENTEXTTYPE -+{ -+ OMX_EventIndexSettingChanged = OMX_EventKhronosExtensions, /**< component signals the IL client of a change -+ in a param, config, or extension */ -+ OMX_EventExtMax = 0x7FFFFFFF -+} OMX_EVENTEXTTYPE; -+ -+ -+/** Enable or disable a callback event. */ -+typedef struct OMX_CONFIG_CALLBACKREQUESTTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_INDEXTYPE nIndex; /**< the index the callback is requested for */ -+ OMX_BOOL bEnable; /**< enable (OMX_TRUE) or disable (OMX_FALSE) the callback */ -+} OMX_CONFIG_CALLBACKREQUESTTYPE; -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif /* OMX_CoreExt_h */ -+/* File EOF */ -diff --git a/encoder/include/khronos/OMX_IVCommon.h b/encoder/include/khronos/OMX_IVCommon.h -new file mode 100755 -index 0000000..9aad7e9 ---- /dev/null -+++ b/encoder/include/khronos/OMX_IVCommon.h -@@ -0,0 +1,993 @@ -+/** -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** -+ * @file OMX_IVCommon.h - OpenMax IL version 1.1.2 -+ * The structures needed by Video and Image components to exchange -+ * parameters and configuration data with the components. -+ */ -+#ifndef OMX_IVCommon_h -+#define OMX_IVCommon_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+/** -+ * Each OMX header must include all required header files to allow the header -+ * to compile without errors. The includes below are required for this header -+ * file to compile successfully -+ */ -+ -+#include -+ -+/** @defgroup iv OpenMAX IL Imaging and Video Domain -+ * Common structures for OpenMAX IL Imaging and Video domains -+ * @{ -+ */ -+ -+ -+/** -+ * Enumeration defining possible uncompressed image/video formats. -+ * -+ * ENUMS: -+ * Unused : Placeholder value when format is N/A -+ * Monochrome : black and white -+ * 8bitRGB332 : Red 7:5, Green 4:2, Blue 1:0 -+ * 12bitRGB444 : Red 11:8, Green 7:4, Blue 3:0 -+ * 16bitARGB4444 : Alpha 15:12, Red 11:8, Green 7:4, Blue 3:0 -+ * 16bitARGB1555 : Alpha 15, Red 14:10, Green 9:5, Blue 4:0 -+ * 16bitRGB565 : Red 15:11, Green 10:5, Blue 4:0 -+ * 16bitBGR565 : Blue 15:11, Green 10:5, Red 4:0 -+ * 18bitRGB666 : Red 17:12, Green 11:6, Blue 5:0 -+ * 18bitARGB1665 : Alpha 17, Red 16:11, Green 10:5, Blue 4:0 -+ * 19bitARGB1666 : Alpha 18, Red 17:12, Green 11:6, Blue 5:0 -+ * 24bitRGB888 : Red 24:16, Green 15:8, Blue 7:0 -+ * 24bitBGR888 : Blue 24:16, Green 15:8, Red 7:0 -+ * 24bitARGB1887 : Alpha 23, Red 22:15, Green 14:7, Blue 6:0 -+ * 25bitARGB1888 : Alpha 24, Red 23:16, Green 15:8, Blue 7:0 -+ * 32bitBGRA8888 : Blue 31:24, Green 23:16, Red 15:8, Alpha 7:0 -+ * 32bitARGB8888 : Alpha 31:24, Red 23:16, Green 15:8, Blue 7:0 -+ * YUV411Planar : U,Y are subsampled by a factor of 4 horizontally -+ * YUV411PackedPlanar : packed per payload in planar slices -+ * YUV420Planar : Three arrays Y,U,V. -+ * YUV420PackedPlanar : packed per payload in planar slices -+ * YUV420SemiPlanar : Two arrays, one is all Y, the other is U and V -+ * YUV422Planar : Three arrays Y,U,V. -+ * YUV422PackedPlanar : packed per payload in planar slices -+ * YUV422SemiPlanar : Two arrays, one is all Y, the other is U and V -+ * YCbYCr : Organized as 16bit YUYV (i.e. YCbYCr) -+ * YCrYCb : Organized as 16bit YVYU (i.e. YCrYCb) -+ * CbYCrY : Organized as 16bit UYVY (i.e. CbYCrY) -+ * CrYCbY : Organized as 16bit VYUY (i.e. CrYCbY) -+ * YUV444Interleaved : Each pixel contains equal parts YUV -+ * RawBayer8bit : SMIA camera output format -+ * RawBayer10bit : SMIA camera output format -+ * RawBayer8bitcompressed : SMIA camera output format -+ */ -+typedef enum OMX_COLOR_FORMATTYPE { -+ OMX_COLOR_FormatUnused, -+ OMX_COLOR_FormatMonochrome, -+ OMX_COLOR_Format8bitRGB332, -+ OMX_COLOR_Format12bitRGB444, -+ OMX_COLOR_Format16bitARGB4444, -+ OMX_COLOR_Format16bitARGB1555, -+ OMX_COLOR_Format16bitRGB565, -+ OMX_COLOR_Format16bitBGR565, -+ OMX_COLOR_Format18bitRGB666, -+ OMX_COLOR_Format18bitARGB1665, -+ OMX_COLOR_Format19bitARGB1666, -+ OMX_COLOR_Format24bitRGB888, -+ OMX_COLOR_Format24bitBGR888, -+ OMX_COLOR_Format24bitARGB1887, -+ OMX_COLOR_Format25bitARGB1888, -+ OMX_COLOR_Format32bitBGRA8888, -+ OMX_COLOR_Format32bitARGB8888, -+ OMX_COLOR_FormatYUV411Planar, -+ OMX_COLOR_FormatYUV411PackedPlanar, -+ OMX_COLOR_FormatYUV420Planar, -+ OMX_COLOR_FormatYUV420PackedPlanar, -+ OMX_COLOR_FormatYUV420SemiPlanar, -+ OMX_COLOR_FormatYUV422Planar, -+ OMX_COLOR_FormatYUV422PackedPlanar, -+ OMX_COLOR_FormatYUV422SemiPlanar, -+ OMX_COLOR_FormatYCbYCr, -+ OMX_COLOR_FormatYCrYCb, -+ OMX_COLOR_FormatCbYCrY, -+ OMX_COLOR_FormatCrYCbY, -+ OMX_COLOR_FormatYUV444Interleaved, -+ OMX_COLOR_FormatRawBayer8bit, -+ OMX_COLOR_FormatRawBayer10bit, -+ OMX_COLOR_FormatRawBayer8bitcompressed, -+ OMX_COLOR_FormatL2, -+ OMX_COLOR_FormatL4, -+ OMX_COLOR_FormatL8, -+ OMX_COLOR_FormatL16, -+ OMX_COLOR_FormatL24, -+ OMX_COLOR_FormatL32, -+ OMX_COLOR_FormatYUV420PackedSemiPlanar, -+ OMX_COLOR_FormatYUV422PackedSemiPlanar, -+ OMX_COLOR_Format18BitBGR666, -+ OMX_COLOR_Format24BitARGB6666, -+ OMX_COLOR_Format24BitABGR6666, -+ OMX_COLOR_FormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_COLOR_FormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ -+ /* Starfive extensions */ -+ /* I420 */ -+ OMX_COLOR_FormatYUV420Planar_P10_16BIT_MSB, -+ OMX_COLOR_FormatYUV420Planar_P10_16BIT_LSB, -+ OMX_COLOR_FormatYUV420Planar_P12_16BIT_MSB, -+ OMX_COLOR_FormatYUV420Planar_P12_16BIT_LSB, -+ /* NV12 */ -+ OMX_COLOR_FormatYUV420SemiPlanar_P10_16BIT_MSB, -+ OMX_COLOR_FormatYUV420SemiPlanar_P10_16BIT_LSB, -+ OMX_COLOR_FormatYUV420SemiPlanar_P12_16BIT_MSB, -+ OMX_COLOR_FormatYUV420SemiPlanar_P12_16BIT_LSB, -+ /* NV21 */ -+ OMX_COLOR_FormatYVU420SemiPlanar, -+ OMX_COLOR_FormatYVU420SemiPlanar_P10_16BIT_MSB, -+ OMX_COLOR_FormatYVU420SemiPlanar_P10_16BIT_LSB, -+ OMX_COLOR_FormatYVU420SemiPlanar_P12_16BIT_MSB, -+ OMX_COLOR_FormatYVU420SemiPlanar_P12_16BIT_LSB, -+ /* I422 */ -+ OMX_COLOR_FormatYUV422Planar_P10_16BIT_MSB, -+ OMX_COLOR_FormatYUV422Planar_P10_16BIT_LSB, -+ OMX_COLOR_FormatYUV422Planar_P12_16BIT_MSB, -+ OMX_COLOR_FormatYUV422Planar_P12_16BIT_LSB, -+ /* NV16 */ -+ OMX_COLOR_FormatYUV422SemiPlanar_P10_16BIT_MSB, -+ OMX_COLOR_FormatYUV422SemiPlanar_P10_16BIT_LSB, -+ OMX_COLOR_FormatYUV422SemiPlanar_P12_16BIT_MSB, -+ OMX_COLOR_FormatYUV422SemiPlanar_P12_16BIT_LSB, -+ /* NV61 */ -+ OMX_COLOR_FormatYVU422SemiPlanar, -+ OMX_COLOR_FormatYVU422SemiPlanar_P10_16BIT_MSB, -+ OMX_COLOR_FormatYVU422SemiPlanar_P10_16BIT_LSB, -+ OMX_COLOR_FormatYVU422SemiPlanar_P12_16BIT_MSB, -+ OMX_COLOR_FormatYVU422SemiPlanar_P12_16BIT_LSB, -+ /* YUYV */ -+ OMX_COLOR_FormatYCbYCr_P10_16BIT_MSB, -+ OMX_COLOR_FormatYCbYCr_P10_16BIT_LSB, -+ OMX_COLOR_FormatYCbYCr_P12_16BIT_MSB, -+ OMX_COLOR_FormatYCbYCr_P12_16BIT_LSB, -+ /* YVYU */ -+ OMX_COLOR_FormatYCrYCb_P10_16BIT_MSB, -+ OMX_COLOR_FormatYCrYCb_P10_16BIT_LSB, -+ OMX_COLOR_FormatYCrYCb_P12_16BIT_MSB, -+ OMX_COLOR_FormatYCrYCb_P12_16BIT_LSB, -+ /* UYVY */ -+ OMX_COLOR_FormatCbYCrY_P10_16BIT_MSB, -+ OMX_COLOR_FormatCbYCrY_P10_16BIT_LSB, -+ OMX_COLOR_FormatCbYCrY_P12_16BIT_MSB, -+ OMX_COLOR_FormatCbYCrY_P12_16BIT_LSB, -+ /* VYUY */ -+ OMX_COLOR_FormatCrYCbY_P10_16BIT_MSB, -+ OMX_COLOR_FormatCrYCbY_P10_16BIT_LSB, -+ OMX_COLOR_FormatCrYCbY_P12_16BIT_MSB, -+ OMX_COLOR_FormatCrYCbY_P12_16BIT_LSB, -+ /* I444 */ -+ OMX_COLOR_FormatYUV444Planar, -+ OMX_COLOR_FormatYUV444Planar_P10_16BIT_MSB, -+ OMX_COLOR_FormatYUV444Planar_P10_16BIT_LSB, -+ OMX_COLOR_FormatYUV444Planar_P12_16BIT_MSB, -+ OMX_COLOR_FormatYUV444Planar_P12_16BIT_LSB, -+ /* YUV444PACKED */ -+ OMX_COLOR_FormatYUV444Interleaved_P10_16BIT_MSB, -+ OMX_COLOR_FormatYUV444Interleaved_P10_16BIT_LSB, -+ OMX_COLOR_FormatYUV444Interleaved_P12_16BIT_MSB, -+ OMX_COLOR_FormatYUV444Interleaved_P12_16BIT_LSB, -+ /* YUV400 */ -+ OMX_COLOR_FormatYUV400, -+ OMX_COLOR_FormatYUV400_P10_16BIT_MSB, -+ OMX_COLOR_FormatYUV400_P10_16BIT_LSB, -+ OMX_COLOR_FormatYUV400_P12_16BIT_MSB, -+ OMX_COLOR_FormatYUV400_P12_16BIT_LSB, -+ /* Starfive extensions end */ -+ -+ OMX_COLOR_FormatMax = 0x7FFFFFFF -+} OMX_COLOR_FORMATTYPE; -+ -+ -+/** -+ * Defines the matrix for conversion from RGB to YUV or vice versa. -+ * iColorMatrix should be initialized with the fixed point values -+ * used in converting between formats. -+ */ -+typedef struct OMX_CONFIG_COLORCONVERSIONTYPE { -+ OMX_U32 nSize; /**< Size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version info */ -+ OMX_U32 nPortIndex; /**< Port that this struct applies to */ -+ OMX_S32 xColorMatrix[3][3]; /**< Stored in signed Q16 format */ -+ OMX_S32 xColorOffset[4]; /**< Stored in signed Q16 format */ -+} OMX_CONFIG_COLORCONVERSIONTYPE; -+ -+ -+/** -+ * Structure defining percent to scale each frame dimension. For example: -+ * To make the width 50% larger, use fWidth = 1.5 and to make the width -+ * 1/2 the original size, use fWidth = 0.5 -+ */ -+typedef struct OMX_CONFIG_SCALEFACTORTYPE { -+ OMX_U32 nSize; /**< Size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version info */ -+ OMX_U32 nPortIndex; /**< Port that this struct applies to */ -+ OMX_S32 xWidth; /**< Fixed point value stored as Q16 */ -+ OMX_S32 xHeight; /**< Fixed point value stored as Q16 */ -+} OMX_CONFIG_SCALEFACTORTYPE; -+ -+ -+/** -+ * Enumeration of possible image filter types -+ */ -+typedef enum OMX_IMAGEFILTERTYPE { -+ OMX_ImageFilterNone, -+ OMX_ImageFilterNoise, -+ OMX_ImageFilterEmboss, -+ OMX_ImageFilterNegative, -+ OMX_ImageFilterSketch, -+ OMX_ImageFilterOilPaint, -+ OMX_ImageFilterHatch, -+ OMX_ImageFilterGpen, -+ OMX_ImageFilterAntialias, -+ OMX_ImageFilterDeRing, -+ OMX_ImageFilterSolarize, -+ OMX_ImageFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_ImageFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_ImageFilterMax = 0x7FFFFFFF -+} OMX_IMAGEFILTERTYPE; -+ -+ -+/** -+ * Image filter configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eImageFilter : Image filter type enumeration -+ */ -+typedef struct OMX_CONFIG_IMAGEFILTERTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_IMAGEFILTERTYPE eImageFilter; -+} OMX_CONFIG_IMAGEFILTERTYPE; -+ -+ -+/** -+ * Customized U and V for color enhancement -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * bColorEnhancement : Enable/disable color enhancement -+ * nCustomizedU : Practical values: 16-240, range: 0-255, value set for -+ * U component -+ * nCustomizedV : Practical values: 16-240, range: 0-255, value set for -+ * V component -+ */ -+typedef struct OMX_CONFIG_COLORENHANCEMENTTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bColorEnhancement; -+ OMX_U8 nCustomizedU; -+ OMX_U8 nCustomizedV; -+} OMX_CONFIG_COLORENHANCEMENTTYPE; -+ -+ -+/** -+ * Define color key and color key mask -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nARGBColor : 32bit Alpha, Red, Green, Blue Color -+ * nARGBMask : 32bit Mask for Alpha, Red, Green, Blue channels -+ */ -+typedef struct OMX_CONFIG_COLORKEYTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nARGBColor; -+ OMX_U32 nARGBMask; -+} OMX_CONFIG_COLORKEYTYPE; -+ -+ -+/** -+ * List of color blend types for pre/post processing -+ * -+ * ENUMS: -+ * None : No color blending present -+ * AlphaConstant : Function is (alpha_constant * src) + -+ * (1 - alpha_constant) * dst) -+ * AlphaPerPixel : Function is (alpha * src) + (1 - alpha) * dst) -+ * Alternate : Function is alternating pixels from src and dst -+ * And : Function is (src & dst) -+ * Or : Function is (src | dst) -+ * Invert : Function is ~src -+ */ -+typedef enum OMX_COLORBLENDTYPE { -+ OMX_ColorBlendNone, -+ OMX_ColorBlendAlphaConstant, -+ OMX_ColorBlendAlphaPerPixel, -+ OMX_ColorBlendAlternate, -+ OMX_ColorBlendAnd, -+ OMX_ColorBlendOr, -+ OMX_ColorBlendInvert, -+ OMX_ColorBlendKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_ColorBlendVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_ColorBlendMax = 0x7FFFFFFF -+} OMX_COLORBLENDTYPE; -+ -+ -+/** -+ * Color blend configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nRGBAlphaConstant : Constant global alpha values when global alpha is used -+ * eColorBlend : Color blend type enumeration -+ */ -+typedef struct OMX_CONFIG_COLORBLENDTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nRGBAlphaConstant; -+ OMX_COLORBLENDTYPE eColorBlend; -+} OMX_CONFIG_COLORBLENDTYPE; -+ -+ -+/** -+ * Hold frame dimension -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nWidth : Frame width in pixels -+ * nHeight : Frame height in pixels -+ */ -+typedef struct OMX_FRAMESIZETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nWidth; -+ OMX_U32 nHeight; -+} OMX_FRAMESIZETYPE; -+ -+ -+/** -+ * Rotation configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nRotation : +/- integer rotation value -+ */ -+typedef struct OMX_CONFIG_ROTATIONTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_S32 nRotation; -+} OMX_CONFIG_ROTATIONTYPE; -+ -+ -+/** -+ * Possible mirroring directions for pre/post processing -+ * -+ * ENUMS: -+ * None : No mirroring -+ * Vertical : Vertical mirroring, flip on X axis -+ * Horizontal : Horizontal mirroring, flip on Y axis -+ * Both : Both vertical and horizontal mirroring -+ */ -+typedef enum OMX_MIRRORTYPE { -+ OMX_MirrorNone = 0, -+ OMX_MirrorVertical, -+ OMX_MirrorHorizontal, -+ OMX_MirrorBoth, -+ OMX_MirrorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_MirrorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_MirrorMax = 0x7FFFFFFF -+} OMX_MIRRORTYPE; -+ -+ -+/** -+ * Mirroring configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eMirror : Mirror type enumeration -+ */ -+typedef struct OMX_CONFIG_MIRRORTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_MIRRORTYPE eMirror; -+} OMX_CONFIG_MIRRORTYPE; -+ -+ -+/** -+ * Position information only -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nX : X coordinate for the point -+ * nY : Y coordinate for the point -+ */ -+typedef struct OMX_CONFIG_POINTTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_S32 nX; -+ OMX_S32 nY; -+} OMX_CONFIG_POINTTYPE; -+ -+ -+/** -+ * Frame size plus position -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nLeft : X Coordinate of the top left corner of the rectangle -+ * nTop : Y Coordinate of the top left corner of the rectangle -+ * nWidth : Width of the rectangle -+ * nHeight : Height of the rectangle -+ */ -+typedef struct OMX_CONFIG_RECTTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_S32 nLeft; -+ OMX_S32 nTop; -+ OMX_U32 nWidth; -+ OMX_U32 nHeight; -+} OMX_CONFIG_RECTTYPE; -+ -+ -+/** -+ * Deblocking state; it is required to be set up before starting the codec -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * bDeblocking : Enable/disable deblocking mode -+ */ -+typedef struct OMX_PARAM_DEBLOCKINGTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bDeblocking; -+} OMX_PARAM_DEBLOCKINGTYPE; -+ -+ -+/** -+ * Stabilization state -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * bStab : Enable/disable frame stabilization state -+ */ -+typedef struct OMX_CONFIG_FRAMESTABTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bStab; -+} OMX_CONFIG_FRAMESTABTYPE; -+ -+ -+/** -+ * White Balance control type -+ * -+ * STRUCT MEMBERS: -+ * SunLight : Referenced in JSR-234 -+ * Flash : Optimal for device's integrated flash -+ */ -+typedef enum OMX_WHITEBALCONTROLTYPE { -+ OMX_WhiteBalControlOff = 0, -+ OMX_WhiteBalControlAuto, -+ OMX_WhiteBalControlSunLight, -+ OMX_WhiteBalControlCloudy, -+ OMX_WhiteBalControlShade, -+ OMX_WhiteBalControlTungsten, -+ OMX_WhiteBalControlFluorescent, -+ OMX_WhiteBalControlIncandescent, -+ OMX_WhiteBalControlFlash, -+ OMX_WhiteBalControlHorizon, -+ OMX_WhiteBalControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_WhiteBalControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_WhiteBalControlMax = 0x7FFFFFFF -+} OMX_WHITEBALCONTROLTYPE; -+ -+ -+/** -+ * White Balance control configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eWhiteBalControl : White balance enumeration -+ */ -+typedef struct OMX_CONFIG_WHITEBALCONTROLTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_WHITEBALCONTROLTYPE eWhiteBalControl; -+} OMX_CONFIG_WHITEBALCONTROLTYPE; -+ -+ -+/** -+ * Exposure control type -+ */ -+typedef enum OMX_EXPOSURECONTROLTYPE { -+ OMX_ExposureControlOff = 0, -+ OMX_ExposureControlAuto, -+ OMX_ExposureControlNight, -+ OMX_ExposureControlBackLight, -+ OMX_ExposureControlSpotLight, -+ OMX_ExposureControlSports, -+ OMX_ExposureControlSnow, -+ OMX_ExposureControlBeach, -+ OMX_ExposureControlLargeAperture, -+ OMX_ExposureControlSmallApperture, -+ OMX_ExposureControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_ExposureControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_ExposureControlMax = 0x7FFFFFFF -+} OMX_EXPOSURECONTROLTYPE; -+ -+ -+/** -+ * White Balance control configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eExposureControl : Exposure control enumeration -+ */ -+typedef struct OMX_CONFIG_EXPOSURECONTROLTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_EXPOSURECONTROLTYPE eExposureControl; -+} OMX_CONFIG_EXPOSURECONTROLTYPE; -+ -+ -+/** -+ * Defines sensor supported mode. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nFrameRate : Single shot mode is indicated by a 0 -+ * bOneShot : Enable for single shot, disable for streaming -+ * sFrameSize : Framesize -+ */ -+typedef struct OMX_PARAM_SENSORMODETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nFrameRate; -+ OMX_BOOL bOneShot; -+ OMX_FRAMESIZETYPE sFrameSize; -+} OMX_PARAM_SENSORMODETYPE; -+ -+ -+/** -+ * Defines contrast level -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nContrast : Values allowed for contrast -100 to 100, zero means no change -+ */ -+typedef struct OMX_CONFIG_CONTRASTTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_S32 nContrast; -+} OMX_CONFIG_CONTRASTTYPE; -+ -+ -+/** -+ * Defines brightness level -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nBrightness : 0-100% -+ */ -+typedef struct OMX_CONFIG_BRIGHTNESSTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nBrightness; -+} OMX_CONFIG_BRIGHTNESSTYPE; -+ -+ -+/** -+ * Defines backlight level configuration for a video sink, e.g. LCD panel -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nBacklight : Values allowed for backlight 0-100% -+ * nTimeout : Number of milliseconds before backlight automatically turns -+ * off. A value of 0x0 disables backight timeout -+ */ -+typedef struct OMX_CONFIG_BACKLIGHTTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nBacklight; -+ OMX_U32 nTimeout; -+} OMX_CONFIG_BACKLIGHTTYPE; -+ -+ -+/** -+ * Defines setting for Gamma -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nGamma : Values allowed for gamma -100 to 100, zero means no change -+ */ -+typedef struct OMX_CONFIG_GAMMATYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_S32 nGamma; -+} OMX_CONFIG_GAMMATYPE; -+ -+ -+/** -+ * Define for setting saturation -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nSaturation : Values allowed for saturation -100 to 100, zero means -+ * no change -+ */ -+typedef struct OMX_CONFIG_SATURATIONTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_S32 nSaturation; -+} OMX_CONFIG_SATURATIONTYPE; -+ -+ -+/** -+ * Define for setting Lightness -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nLightness : Values allowed for lightness -100 to 100, zero means no -+ * change -+ */ -+typedef struct OMX_CONFIG_LIGHTNESSTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_S32 nLightness; -+} OMX_CONFIG_LIGHTNESSTYPE; -+ -+ -+/** -+ * Plane blend configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Index of input port associated with the plane. -+ * nDepth : Depth of the plane in relation to the screen. Higher -+ * numbered depths are "behind" lower number depths. -+ * This number defaults to the Port Index number. -+ * nAlpha : Transparency blending component for the entire plane. -+ * See blending modes for more detail. -+ */ -+typedef struct OMX_CONFIG_PLANEBLENDTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nDepth; -+ OMX_U32 nAlpha; -+} OMX_CONFIG_PLANEBLENDTYPE; -+ -+ -+/** -+ * Define interlace type -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * bEnable : Enable control variable for this functionality -+ * (see below) -+ * nInterleavePortIndex : Index of input or output port associated with -+ * the interleaved plane. -+ * pPlanarPortIndexes[4] : Index of input or output planar ports. -+ */ -+typedef struct OMX_PARAM_INTERLEAVETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bEnable; -+ OMX_U32 nInterleavePortIndex; -+} OMX_PARAM_INTERLEAVETYPE; -+ -+ -+/** -+ * Defines the picture effect used for an input picture -+ */ -+typedef enum OMX_TRANSITIONEFFECTTYPE { -+ OMX_EffectNone, -+ OMX_EffectFadeFromBlack, -+ OMX_EffectFadeToBlack, -+ OMX_EffectUnspecifiedThroughConstantColor, -+ OMX_EffectDissolve, -+ OMX_EffectWipe, -+ OMX_EffectUnspecifiedMixOfTwoScenes, -+ OMX_EffectKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_EffectVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_EffectMax = 0x7FFFFFFF -+} OMX_TRANSITIONEFFECTTYPE; -+ -+ -+/** -+ * Structure used to configure current transition effect -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eEffect : Effect to enable -+ */ -+typedef struct OMX_CONFIG_TRANSITIONEFFECTTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_TRANSITIONEFFECTTYPE eEffect; -+} OMX_CONFIG_TRANSITIONEFFECTTYPE; -+ -+ -+/** -+ * Defines possible data unit types for encoded video data. The data unit -+ * types are used both for encoded video input for playback as well as -+ * encoded video output from recording. -+ */ -+typedef enum OMX_DATAUNITTYPE { -+ OMX_DataUnitCodedPicture, -+ OMX_DataUnitVideoSegment, -+ OMX_DataUnitSeveralSegments, -+ OMX_DataUnitArbitraryStreamSection, -+ OMX_DataUnitKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_DataUnitVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_DataUnitMax = 0x7FFFFFFF -+} OMX_DATAUNITTYPE; -+ -+ -+/** -+ * Defines possible encapsulation types for coded video data unit. The -+ * encapsulation information is used both for encoded video input for -+ * playback as well as encoded video output from recording. -+ */ -+typedef enum OMX_DATAUNITENCAPSULATIONTYPE { -+ OMX_DataEncapsulationElementaryStream, -+ OMX_DataEncapsulationGenericPayload, -+ OMX_DataEncapsulationRtpPayload, -+ OMX_DataEncapsulationKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_DataEncapsulationVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_DataEncapsulationMax = 0x7FFFFFFF -+} OMX_DATAUNITENCAPSULATIONTYPE; -+ -+ -+/** -+ * Structure used to configure the type of being decoded/encoded -+ */ -+typedef struct OMX_PARAM_DATAUNITTYPE { -+ OMX_U32 nSize; /**< Size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port that this structure applies to */ -+ OMX_DATAUNITTYPE eUnitType; -+ OMX_DATAUNITENCAPSULATIONTYPE eEncapsulationType; -+} OMX_PARAM_DATAUNITTYPE; -+ -+ -+/** -+ * Defines dither types -+ */ -+typedef enum OMX_DITHERTYPE { -+ OMX_DitherNone, -+ OMX_DitherOrdered, -+ OMX_DitherErrorDiffusion, -+ OMX_DitherOther, -+ OMX_DitherKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_DitherVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_DitherMax = 0x7FFFFFFF -+} OMX_DITHERTYPE; -+ -+ -+/** -+ * Structure used to configure current type of dithering -+ */ -+typedef struct OMX_CONFIG_DITHERTYPE { -+ OMX_U32 nSize; /**< Size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Port that this structure applies to */ -+ OMX_DITHERTYPE eDither; /**< Type of dithering to use */ -+} OMX_CONFIG_DITHERTYPE; -+ -+typedef struct OMX_CONFIG_CAPTUREMODETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; /**< Port that this structure applies to */ -+ OMX_BOOL bContinuous; /**< If true then ignore frame rate and emit capture -+ * data as fast as possible (otherwise obey port's frame rate). */ -+ OMX_BOOL bFrameLimited; /**< If true then terminate capture after the port emits the -+ * specified number of frames (otherwise the port does not -+ * terminate the capture until instructed to do so by the client). -+ * Even if set, the client may manually terminate the capture prior -+ * to reaching the limit. */ -+ OMX_U32 nFrameLimit; /**< Limit on number of frames emitted during a capture (only -+ * valid if bFrameLimited is set). */ -+} OMX_CONFIG_CAPTUREMODETYPE; -+ -+typedef enum OMX_METERINGTYPE { -+ -+ OMX_MeteringModeAverage, /**< Center-weighted average metering. */ -+ OMX_MeteringModeSpot, /**< Spot (partial) metering. */ -+ OMX_MeteringModeMatrix, /**< Matrix or evaluative metering. */ -+ -+ OMX_MeteringKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_MeteringVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_EVModeMax = 0x7fffffff -+} OMX_METERINGTYPE; -+ -+typedef struct OMX_CONFIG_EXPOSUREVALUETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_METERINGTYPE eMetering; -+ OMX_S32 xEVCompensation; /**< Fixed point value stored as Q16 */ -+ OMX_U32 nApertureFNumber; /**< e.g. nApertureFNumber = 2 implies "f/2" - Q16 format */ -+ OMX_BOOL bAutoAperture; /**< Whether aperture number is defined automatically */ -+ OMX_U32 nShutterSpeedMsec; /**< Shutterspeed in milliseconds */ -+ OMX_BOOL bAutoShutterSpeed; /**< Whether shutter speed is defined automatically */ -+ OMX_U32 nSensitivity; /**< e.g. nSensitivity = 100 implies "ISO 100" */ -+ OMX_BOOL bAutoSensitivity; /**< Whether sensitivity is defined automatically */ -+} OMX_CONFIG_EXPOSUREVALUETYPE; -+ -+/** -+ * Focus region configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * bCenter : Use center region as focus region of interest -+ * bLeft : Use left region as focus region of interest -+ * bRight : Use right region as focus region of interest -+ * bTop : Use top region as focus region of interest -+ * bBottom : Use bottom region as focus region of interest -+ * bTopLeft : Use top left region as focus region of interest -+ * bTopRight : Use top right region as focus region of interest -+ * bBottomLeft : Use bottom left region as focus region of interest -+ * bBottomRight : Use bottom right region as focus region of interest -+ */ -+typedef struct OMX_CONFIG_FOCUSREGIONTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bCenter; -+ OMX_BOOL bLeft; -+ OMX_BOOL bRight; -+ OMX_BOOL bTop; -+ OMX_BOOL bBottom; -+ OMX_BOOL bTopLeft; -+ OMX_BOOL bTopRight; -+ OMX_BOOL bBottomLeft; -+ OMX_BOOL bBottomRight; -+} OMX_CONFIG_FOCUSREGIONTYPE; -+ -+/** -+ * Focus Status type -+ */ -+typedef enum OMX_FOCUSSTATUSTYPE { -+ OMX_FocusStatusOff = 0, -+ OMX_FocusStatusRequest, -+ OMX_FocusStatusReached, -+ OMX_FocusStatusUnableToReach, -+ OMX_FocusStatusLost, -+ OMX_FocusStatusKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_FocusStatusVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_FocusStatusMax = 0x7FFFFFFF -+} OMX_FOCUSSTATUSTYPE; -+ -+/** -+ * Focus status configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eFocusStatus : Specifies the focus status -+ * bCenterStatus : Use center region as focus region of interest -+ * bLeftStatus : Use left region as focus region of interest -+ * bRightStatus : Use right region as focus region of interest -+ * bTopStatus : Use top region as focus region of interest -+ * bBottomStatus : Use bottom region as focus region of interest -+ * bTopLeftStatus : Use top left region as focus region of interest -+ * bTopRightStatus : Use top right region as focus region of interest -+ * bBottomLeftStatus : Use bottom left region as focus region of interest -+ * bBottomRightStatus : Use bottom right region as focus region of interest -+ */ -+typedef struct OMX_PARAM_FOCUSSTATUSTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_FOCUSSTATUSTYPE eFocusStatus; -+ OMX_BOOL bCenterStatus; -+ OMX_BOOL bLeftStatus; -+ OMX_BOOL bRightStatus; -+ OMX_BOOL bTopStatus; -+ OMX_BOOL bBottomStatus; -+ OMX_BOOL bTopLeftStatus; -+ OMX_BOOL bTopRightStatus; -+ OMX_BOOL bBottomLeftStatus; -+ OMX_BOOL bBottomRightStatus; -+} OMX_PARAM_FOCUSSTATUSTYPE; -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -+/* File EOF */ -diff --git a/encoder/include/khronos/OMX_Image.h b/encoder/include/khronos/OMX_Image.h -new file mode 100755 -index 0000000..ca64882 ---- /dev/null -+++ b/encoder/include/khronos/OMX_Image.h -@@ -0,0 +1,328 @@ -+/** -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+/** -+ * @file OMX_Image.h - OpenMax IL version 1.1.2 -+ * The structures needed by Image components to exchange parameters and -+ * configuration data with the components. -+ */ -+#ifndef OMX_Image_h -+#define OMX_Image_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+ -+/** -+ * Each OMX header must include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+ -+#include -+ -+/** @defgroup imaging OpenMAX IL Imaging Domain -+ * @ingroup iv -+ * Structures for OpenMAX IL Imaging domain -+ * @{ -+ */ -+ -+/** -+ * Enumeration used to define the possible image compression coding. -+ */ -+typedef enum OMX_IMAGE_CODINGTYPE { -+ OMX_IMAGE_CodingUnused, /**< Value when format is N/A */ -+ OMX_IMAGE_CodingAutoDetect, /**< Auto detection of image format */ -+ OMX_IMAGE_CodingJPEG, /**< JPEG/JFIF image format */ -+ OMX_IMAGE_CodingJPEG2K, /**< JPEG 2000 image format */ -+ OMX_IMAGE_CodingEXIF, /**< EXIF image format */ -+ OMX_IMAGE_CodingTIFF, /**< TIFF image format */ -+ OMX_IMAGE_CodingGIF, /**< Graphics image format */ -+ OMX_IMAGE_CodingPNG, /**< PNG image format */ -+ OMX_IMAGE_CodingLZW, /**< LZW image format */ -+ OMX_IMAGE_CodingBMP, /**< Windows Bitmap format */ -+ OMX_IMAGE_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_IMAGE_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_IMAGE_CodingMax = 0x7FFFFFFF -+} OMX_IMAGE_CODINGTYPE; -+ -+ -+/** -+ * Data structure used to define an image path. The number of image paths -+ * for input and output will vary by type of the image component. -+ * -+ * Input (aka Source) : Zero Inputs, one Output, -+ * Splitter : One Input, 2 or more Outputs, -+ * Processing Element : One Input, one output, -+ * Mixer : 2 or more inputs, one output, -+ * Output (aka Sink) : One Input, zero outputs. -+ * -+ * The PortDefinition structure is used to define all of the parameters -+ * necessary for the compliant component to setup an input or an output -+ * image path. If additional vendor specific data is required, it should -+ * be transmitted to the component using the CustomCommand function. -+ * Compliant components will prepopulate this structure with optimal -+ * values during the OMX_GetParameter() command. -+ * -+ * STRUCT MEMBERS: -+ * cMIMEType : MIME type of data for the port -+ * pNativeRender : Platform specific reference for a display if a -+ * sync, otherwise this field is 0 -+ * nFrameWidth : Width of frame to be used on port if -+ * uncompressed format is used. Use 0 for -+ * unknown, don't care or variable -+ * nFrameHeight : Height of frame to be used on port if -+ * uncompressed format is used. Use 0 for -+ * unknown, don't care or variable -+ * nStride : Number of bytes per span of an image (i.e. -+ * indicates the number of bytes to get from -+ * span N to span N+1, where negative stride -+ * indicates the image is bottom up -+ * nSliceHeight : Height used when encoding in slices -+ * bFlagErrorConcealment : Turns on error concealment if it is supported by -+ * the OMX component -+ * eCompressionFormat : Compression format used in this instance of -+ * the component. When OMX_IMAGE_CodingUnused is -+ * specified, eColorFormat is valid -+ * eColorFormat : Decompressed format used by this component -+ * pNativeWindow : Platform specific reference for a window object if a -+ * display sink , otherwise this field is 0x0. -+ */ -+typedef struct OMX_IMAGE_PORTDEFINITIONTYPE { -+ OMX_STRING cMIMEType; -+ OMX_NATIVE_DEVICETYPE pNativeRender; -+ OMX_U32 nFrameWidth; -+ OMX_U32 nFrameHeight; -+ OMX_S32 nStride; -+ OMX_U32 nSliceHeight; -+ OMX_BOOL bFlagErrorConcealment; -+ OMX_IMAGE_CODINGTYPE eCompressionFormat; -+ OMX_COLOR_FORMATTYPE eColorFormat; -+ OMX_NATIVE_WINDOWTYPE pNativeWindow; -+} OMX_IMAGE_PORTDEFINITIONTYPE; -+ -+ -+/** -+ * Port format parameter. This structure is used to enumerate the various -+ * data input/output format supported by the port. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Indicates which port to set -+ * nIndex : Indicates the enumeration index for the format from -+ * 0x0 to N-1 -+ * eCompressionFormat : Compression format used in this instance of the -+ * component. When OMX_IMAGE_CodingUnused is specified, -+ * eColorFormat is valid -+ * eColorFormat : Decompressed format used by this component -+ */ -+typedef struct OMX_IMAGE_PARAM_PORTFORMATTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nIndex; -+ OMX_IMAGE_CODINGTYPE eCompressionFormat; -+ OMX_COLOR_FORMATTYPE eColorFormat; -+} OMX_IMAGE_PARAM_PORTFORMATTYPE; -+ -+ -+/** -+ * Flash control type -+ * -+ * ENUMS -+ * Torch : Flash forced constantly on -+ */ -+typedef enum OMX_IMAGE_FLASHCONTROLTYPE { -+ OMX_IMAGE_FlashControlOn = 0, -+ OMX_IMAGE_FlashControlOff, -+ OMX_IMAGE_FlashControlAuto, -+ OMX_IMAGE_FlashControlRedEyeReduction, -+ OMX_IMAGE_FlashControlFillin, -+ OMX_IMAGE_FlashControlTorch, -+ OMX_IMAGE_FlashControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_IMAGE_FlashControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_IMAGE_FlashControlMax = 0x7FFFFFFF -+} OMX_IMAGE_FLASHCONTROLTYPE; -+ -+ -+/** -+ * Flash control configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eFlashControl : Flash control type -+ */ -+typedef struct OMX_IMAGE_PARAM_FLASHCONTROLTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_IMAGE_FLASHCONTROLTYPE eFlashControl; -+} OMX_IMAGE_PARAM_FLASHCONTROLTYPE; -+ -+ -+/** -+ * Focus control type -+ */ -+typedef enum OMX_IMAGE_FOCUSCONTROLTYPE { -+ OMX_IMAGE_FocusControlOn = 0, -+ OMX_IMAGE_FocusControlOff, -+ OMX_IMAGE_FocusControlAuto, -+ OMX_IMAGE_FocusControlAutoLock, -+ OMX_IMAGE_FocusControlKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_IMAGE_FocusControlVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_IMAGE_FocusControlMax = 0x7FFFFFFF -+} OMX_IMAGE_FOCUSCONTROLTYPE; -+ -+ -+/** -+ * Focus control configuration -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eFocusControl : Focus control -+ * nFocusSteps : Focus can take on values from 0 mm to infinity. -+ * Interest is only in number of steps over this range. -+ * nFocusStepIndex : Current focus step index -+ */ -+typedef struct OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_IMAGE_FOCUSCONTROLTYPE eFocusControl; -+ OMX_U32 nFocusSteps; -+ OMX_U32 nFocusStepIndex; -+} OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE; -+ -+ -+/** -+ * Q Factor for JPEG compression, which controls the tradeoff between image -+ * quality and size. Q Factor provides a more simple means of controlling -+ * JPEG compression quality, without directly programming Quantization -+ * tables for chroma and luma -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nQFactor : JPEG Q factor value in the range of 1-100. A factor of 1 -+ * produces the smallest, worst quality images, and a factor -+ * of 100 produces the largest, best quality images. A -+ * typical default is 75 for small good quality images -+ */ -+typedef struct OMX_IMAGE_PARAM_QFACTORTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nQFactor; -+} OMX_IMAGE_PARAM_QFACTORTYPE; -+ -+/** -+ * Quantization table type -+ */ -+ -+typedef enum OMX_IMAGE_QUANTIZATIONTABLETYPE { -+ OMX_IMAGE_QuantizationTableLuma = 0, -+ OMX_IMAGE_QuantizationTableChroma, -+ OMX_IMAGE_QuantizationTableChromaCb, -+ OMX_IMAGE_QuantizationTableChromaCr, -+ OMX_IMAGE_QuantizationTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_IMAGE_QuantizationTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_IMAGE_QuantizationTableMax = 0x7FFFFFFF -+} OMX_IMAGE_QUANTIZATIONTABLETYPE; -+ -+/** -+ * JPEG quantization tables are used to determine DCT compression for -+ * YUV data, as an alternative to specifying Q factor, providing exact -+ * control of compression -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eQuantizationTable : Quantization table type -+ * nQuantizationMatrix[64] : JPEG quantization table of coefficients stored -+ * in increasing columns then by rows of data (i.e. -+ * row 1, ... row 8). Quantization values are in -+ * the range 0-255 and stored in linear order -+ * (i.e. the component will zig-zag the -+ * quantization table data if required internally) -+ */ -+typedef struct OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_IMAGE_QUANTIZATIONTABLETYPE eQuantizationTable; -+ OMX_U8 nQuantizationMatrix[64]; -+} OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE; -+ -+ -+/** -+ * Huffman table type, the same Huffman table is applied for chroma and -+ * luma component -+ */ -+typedef enum OMX_IMAGE_HUFFMANTABLETYPE { -+ OMX_IMAGE_HuffmanTableAC = 0, -+ OMX_IMAGE_HuffmanTableDC, -+ OMX_IMAGE_HuffmanTableACLuma, -+ OMX_IMAGE_HuffmanTableACChroma, -+ OMX_IMAGE_HuffmanTableDCLuma, -+ OMX_IMAGE_HuffmanTableDCChroma, -+ OMX_IMAGE_HuffmanTableKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_IMAGE_HuffmanTableVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_IMAGE_HuffmanTableMax = 0x7FFFFFFF -+} OMX_IMAGE_HUFFMANTABLETYPE; -+ -+/** -+ * JPEG Huffman table -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eHuffmanTable : Huffman table type -+ * nNumberOfHuffmanCodeOfLength[16] : 0-16, number of Huffman codes of each -+ * possible length -+ * nHuffmanTable[256] : 0-255, the size used for AC and DC -+ * HuffmanTable are 16 and 162 -+ */ -+typedef struct OMX_IMAGE_PARAM_HUFFMANTTABLETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_IMAGE_HUFFMANTABLETYPE eHuffmanTable; -+ OMX_U8 nNumberOfHuffmanCodeOfLength[16]; -+ OMX_U8 nHuffmanTable[256]; -+} OMX_IMAGE_PARAM_HUFFMANTTABLETYPE; -+ -+/** @} */ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -+/* File EOF */ -diff --git a/encoder/include/khronos/OMX_ImageExt.h b/encoder/include/khronos/OMX_ImageExt.h -new file mode 100755 -index 0000000..e7cae02 ---- /dev/null -+++ b/encoder/include/khronos/OMX_ImageExt.h -@@ -0,0 +1,55 @@ -+/* -+ * Copyright (c) 2016 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** OMX_ImageExt.h - OpenMax IL version 1.1.2 -+ * The OMX_ImageExt header file contains extensions to the -+ * definitions used by both the application and the component to -+ * access image items. -+ */ -+ -+#ifndef OMX_ImageExt_h -+#define OMX_ImageExt_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+/* Each OMX header shall include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+#include -+ -+/** Enum for standard image codingtype extensions */ -+typedef enum OMX_IMAGE_CODINGEXTTYPE { -+ OMX_IMAGE_CodingExtUnused = OMX_IMAGE_CodingKhronosExtensions, -+ OMX_IMAGE_CodingWEBP, /**< WebP image format */ -+} OMX_IMAGE_CODINGEXTTYPE; -+ -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif /* OMX_ImageExt_h */ -+/* File EOF */ -diff --git a/encoder/include/khronos/OMX_Index.h b/encoder/include/khronos/OMX_Index.h -new file mode 100755 -index 0000000..20a109c ---- /dev/null -+++ b/encoder/include/khronos/OMX_Index.h -@@ -0,0 +1,260 @@ -+/* -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** @file OMX_Index.h - OpenMax IL version 1.1.2 -+ * The OMX_Index header file contains the definitions for both applications -+ * and components . -+ */ -+ -+ -+#ifndef OMX_Index_h -+#define OMX_Index_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+ -+/* Each OMX header must include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+#include -+ -+ -+/** The OMX_INDEXTYPE enumeration is used to select a structure when either -+ * getting or setting parameters and/or configuration data. Each entry in -+ * this enumeration maps to an OMX specified structure. When the -+ * OMX_GetParameter, OMX_SetParameter, OMX_GetConfig or OMX_SetConfig methods -+ * are used, the second parameter will always be an entry from this enumeration -+ * and the third entry will be the structure shown in the comments for the entry. -+ * For example, if the application is initializing a cropping function, the -+ * OMX_SetConfig command would have OMX_IndexConfigCommonInputCrop as the second parameter -+ * and would send a pointer to an initialized OMX_RECTTYPE structure as the -+ * third parameter. -+ * -+ * The enumeration entries named with the OMX_Config prefix are sent using -+ * the OMX_SetConfig command and the enumeration entries named with the -+ * OMX_PARAM_ prefix are sent using the OMX_SetParameter command. -+ */ -+typedef enum OMX_INDEXTYPE { -+ -+ OMX_IndexComponentStartUnused = 0x01000000, -+ OMX_IndexParamPriorityMgmt, /**< reference: OMX_PRIORITYMGMTTYPE */ -+ OMX_IndexParamAudioInit, /**< reference: OMX_PORT_PARAM_TYPE */ -+ OMX_IndexParamImageInit, /**< reference: OMX_PORT_PARAM_TYPE */ -+ OMX_IndexParamVideoInit, /**< reference: OMX_PORT_PARAM_TYPE */ -+ OMX_IndexParamOtherInit, /**< reference: OMX_PORT_PARAM_TYPE */ -+ OMX_IndexParamNumAvailableStreams, /**< reference: OMX_PARAM_U32TYPE */ -+ OMX_IndexParamActiveStream, /**< reference: OMX_PARAM_U32TYPE */ -+ OMX_IndexParamSuspensionPolicy, /**< reference: OMX_PARAM_SUSPENSIONPOLICYTYPE */ -+ OMX_IndexParamComponentSuspended, /**< reference: OMX_PARAM_SUSPENSIONTYPE */ -+ OMX_IndexConfigCapturing, /**< reference: OMX_CONFIG_BOOLEANTYPE */ -+ OMX_IndexConfigCaptureMode, /**< reference: OMX_CONFIG_CAPTUREMODETYPE */ -+ OMX_IndexAutoPauseAfterCapture, /**< reference: OMX_CONFIG_BOOLEANTYPE */ -+ OMX_IndexParamContentURI, /**< reference: OMX_PARAM_CONTENTURITYPE */ -+ OMX_IndexParamCustomContentPipe, /**< reference: OMX_PARAM_CONTENTPIPETYPE */ -+ OMX_IndexParamDisableResourceConcealment, /**< reference: OMX_RESOURCECONCEALMENTTYPE */ -+ OMX_IndexConfigMetadataItemCount, /**< reference: OMX_CONFIG_METADATAITEMCOUNTTYPE */ -+ OMX_IndexConfigContainerNodeCount, /**< reference: OMX_CONFIG_CONTAINERNODECOUNTTYPE */ -+ OMX_IndexConfigMetadataItem, /**< reference: OMX_CONFIG_METADATAITEMTYPE */ -+ OMX_IndexConfigCounterNodeID, /**< reference: OMX_CONFIG_CONTAINERNODEIDTYPE */ -+ OMX_IndexParamMetadataFilterType, /**< reference: OMX_PARAM_METADATAFILTERTYPE */ -+ OMX_IndexParamMetadataKeyFilter, /**< reference: OMX_PARAM_METADATAFILTERTYPE */ -+ OMX_IndexConfigPriorityMgmt, /**< reference: OMX_PRIORITYMGMTTYPE */ -+ OMX_IndexParamStandardComponentRole, /**< reference: OMX_PARAM_COMPONENTROLETYPE */ -+ -+ OMX_IndexPortStartUnused = 0x02000000, -+ OMX_IndexParamPortDefinition, /**< reference: OMX_PARAM_PORTDEFINITIONTYPE */ -+ OMX_IndexParamCompBufferSupplier, /**< reference: OMX_PARAM_BUFFERSUPPLIERTYPE */ -+ OMX_IndexReservedStartUnused = 0x03000000, -+ -+ /* Audio parameters and configurations */ -+ OMX_IndexAudioStartUnused = 0x04000000, -+ OMX_IndexParamAudioPortFormat, /**< reference: OMX_AUDIO_PARAM_PORTFORMATTYPE */ -+ OMX_IndexParamAudioPcm, /**< reference: OMX_AUDIO_PARAM_PCMMODETYPE */ -+ OMX_IndexParamAudioAac, /**< reference: OMX_AUDIO_PARAM_AACPROFILETYPE */ -+ OMX_IndexParamAudioRa, /**< reference: OMX_AUDIO_PARAM_RATYPE */ -+ OMX_IndexParamAudioMp3, /**< reference: OMX_AUDIO_PARAM_MP3TYPE */ -+ OMX_IndexParamAudioAdpcm, /**< reference: OMX_AUDIO_PARAM_ADPCMTYPE */ -+ OMX_IndexParamAudioG723, /**< reference: OMX_AUDIO_PARAM_G723TYPE */ -+ OMX_IndexParamAudioG729, /**< reference: OMX_AUDIO_PARAM_G729TYPE */ -+ OMX_IndexParamAudioAmr, /**< reference: OMX_AUDIO_PARAM_AMRTYPE */ -+ OMX_IndexParamAudioWma, /**< reference: OMX_AUDIO_PARAM_WMATYPE */ -+ OMX_IndexParamAudioSbc, /**< reference: OMX_AUDIO_PARAM_SBCTYPE */ -+ OMX_IndexParamAudioMidi, /**< reference: OMX_AUDIO_PARAM_MIDITYPE */ -+ OMX_IndexParamAudioGsm_FR, /**< reference: OMX_AUDIO_PARAM_GSMFRTYPE */ -+ OMX_IndexParamAudioMidiLoadUserSound, /**< reference: OMX_AUDIO_PARAM_MIDILOADUSERSOUNDTYPE */ -+ OMX_IndexParamAudioG726, /**< reference: OMX_AUDIO_PARAM_G726TYPE */ -+ OMX_IndexParamAudioGsm_EFR, /**< reference: OMX_AUDIO_PARAM_GSMEFRTYPE */ -+ OMX_IndexParamAudioGsm_HR, /**< reference: OMX_AUDIO_PARAM_GSMHRTYPE */ -+ OMX_IndexParamAudioPdc_FR, /**< reference: OMX_AUDIO_PARAM_PDCFRTYPE */ -+ OMX_IndexParamAudioPdc_EFR, /**< reference: OMX_AUDIO_PARAM_PDCEFRTYPE */ -+ OMX_IndexParamAudioPdc_HR, /**< reference: OMX_AUDIO_PARAM_PDCHRTYPE */ -+ OMX_IndexParamAudioTdma_FR, /**< reference: OMX_AUDIO_PARAM_TDMAFRTYPE */ -+ OMX_IndexParamAudioTdma_EFR, /**< reference: OMX_AUDIO_PARAM_TDMAEFRTYPE */ -+ OMX_IndexParamAudioQcelp8, /**< reference: OMX_AUDIO_PARAM_QCELP8TYPE */ -+ OMX_IndexParamAudioQcelp13, /**< reference: OMX_AUDIO_PARAM_QCELP13TYPE */ -+ OMX_IndexParamAudioEvrc, /**< reference: OMX_AUDIO_PARAM_EVRCTYPE */ -+ OMX_IndexParamAudioSmv, /**< reference: OMX_AUDIO_PARAM_SMVTYPE */ -+ OMX_IndexParamAudioVorbis, /**< reference: OMX_AUDIO_PARAM_VORBISTYPE */ -+ -+ OMX_IndexConfigAudioMidiImmediateEvent, /**< reference: OMX_AUDIO_CONFIG_MIDIIMMEDIATEEVENTTYPE */ -+ OMX_IndexConfigAudioMidiControl, /**< reference: OMX_AUDIO_CONFIG_MIDICONTROLTYPE */ -+ OMX_IndexConfigAudioMidiSoundBankProgram, /**< reference: OMX_AUDIO_CONFIG_MIDISOUNDBANKPROGRAMTYPE */ -+ OMX_IndexConfigAudioMidiStatus, /**< reference: OMX_AUDIO_CONFIG_MIDISTATUSTYPE */ -+ OMX_IndexConfigAudioMidiMetaEvent, /**< reference: OMX_AUDIO_CONFIG_MIDIMETAEVENTTYPE */ -+ OMX_IndexConfigAudioMidiMetaEventData, /**< reference: OMX_AUDIO_CONFIG_MIDIMETAEVENTDATATYPE */ -+ OMX_IndexConfigAudioVolume, /**< reference: OMX_AUDIO_CONFIG_VOLUMETYPE */ -+ OMX_IndexConfigAudioBalance, /**< reference: OMX_AUDIO_CONFIG_BALANCETYPE */ -+ OMX_IndexConfigAudioChannelMute, /**< reference: OMX_AUDIO_CONFIG_CHANNELMUTETYPE */ -+ OMX_IndexConfigAudioMute, /**< reference: OMX_AUDIO_CONFIG_MUTETYPE */ -+ OMX_IndexConfigAudioLoudness, /**< reference: OMX_AUDIO_CONFIG_LOUDNESSTYPE */ -+ OMX_IndexConfigAudioEchoCancelation, /**< reference: OMX_AUDIO_CONFIG_ECHOCANCELATIONTYPE */ -+ OMX_IndexConfigAudioNoiseReduction, /**< reference: OMX_AUDIO_CONFIG_NOISEREDUCTIONTYPE */ -+ OMX_IndexConfigAudioBass, /**< reference: OMX_AUDIO_CONFIG_BASSTYPE */ -+ OMX_IndexConfigAudioTreble, /**< reference: OMX_AUDIO_CONFIG_TREBLETYPE */ -+ OMX_IndexConfigAudioStereoWidening, /**< reference: OMX_AUDIO_CONFIG_STEREOWIDENINGTYPE */ -+ OMX_IndexConfigAudioChorus, /**< reference: OMX_AUDIO_CONFIG_CHORUSTYPE */ -+ OMX_IndexConfigAudioEqualizer, /**< reference: OMX_AUDIO_CONFIG_EQUALIZERTYPE */ -+ OMX_IndexConfigAudioReverberation, /**< reference: OMX_AUDIO_CONFIG_REVERBERATIONTYPE */ -+ OMX_IndexConfigAudioChannelVolume, /**< reference: OMX_AUDIO_CONFIG_CHANNELVOLUMETYPE */ -+ -+ /* Image specific parameters and configurations */ -+ OMX_IndexImageStartUnused = 0x05000000, -+ OMX_IndexParamImagePortFormat, /**< reference: OMX_IMAGE_PARAM_PORTFORMATTYPE */ -+ OMX_IndexParamFlashControl, /**< reference: OMX_IMAGE_PARAM_FLASHCONTROLTYPE */ -+ OMX_IndexConfigFocusControl, /**< reference: OMX_IMAGE_CONFIG_FOCUSCONTROLTYPE */ -+ OMX_IndexParamQFactor, /**< reference: OMX_IMAGE_PARAM_QFACTORTYPE */ -+ OMX_IndexParamQuantizationTable, /**< reference: OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE */ -+ OMX_IndexParamHuffmanTable, /**< reference: OMX_IMAGE_PARAM_HUFFMANTTABLETYPE */ -+ OMX_IndexConfigFlashControl, /**< reference: OMX_IMAGE_PARAM_FLASHCONTROLTYPE */ -+ -+ /* Video specific parameters and configurations */ -+ OMX_IndexVideoStartUnused = 0x06000000, -+ OMX_IndexParamVideoPortFormat, /**< reference: OMX_VIDEO_PARAM_PORTFORMATTYPE */ -+ OMX_IndexParamVideoQuantization, /**< reference: OMX_VIDEO_PARAM_QUANTIZATIONTYPE */ -+ OMX_IndexParamVideoFastUpdate, /**< reference: OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE */ -+ OMX_IndexParamVideoBitrate, /**< reference: OMX_VIDEO_PARAM_BITRATETYPE */ -+ OMX_IndexParamVideoMotionVector, /**< reference: OMX_VIDEO_PARAM_MOTIONVECTORTYPE */ -+ OMX_IndexParamVideoIntraRefresh, /**< reference: OMX_VIDEO_PARAM_INTRAREFRESHTYPE */ -+ OMX_IndexParamVideoErrorCorrection, /**< reference: OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE */ -+ OMX_IndexParamVideoVBSMC, /**< reference: OMX_VIDEO_PARAM_VBSMCTYPE */ -+ OMX_IndexParamVideoMpeg2, /**< reference: OMX_VIDEO_PARAM_MPEG2TYPE */ -+ OMX_IndexParamVideoMpeg4, /**< reference: OMX_VIDEO_PARAM_MPEG4TYPE */ -+ OMX_IndexParamVideoWmv, /**< reference: OMX_VIDEO_PARAM_WMVTYPE */ -+ OMX_IndexParamVideoRv, /**< reference: OMX_VIDEO_PARAM_RVTYPE */ -+ OMX_IndexParamVideoAvc, /**< reference: OMX_VIDEO_PARAM_AVCTYPE */ -+ OMX_IndexParamVideoH263, /**< reference: OMX_VIDEO_PARAM_H263TYPE */ -+ OMX_IndexParamVideoProfileLevelQuerySupported, /**< reference: OMX_VIDEO_PARAM_PROFILELEVELTYPE */ -+ OMX_IndexParamVideoProfileLevelCurrent, /**< reference: OMX_VIDEO_PARAM_PROFILELEVELTYPE */ -+ OMX_IndexConfigVideoBitrate, /**< reference: OMX_VIDEO_CONFIG_BITRATETYPE */ -+ OMX_IndexConfigVideoFramerate, /**< reference: OMX_CONFIG_FRAMERATETYPE */ -+ OMX_IndexConfigVideoIntraVOPRefresh, /**< reference: OMX_CONFIG_INTRAREFRESHVOPTYPE */ -+ OMX_IndexConfigVideoIntraMBRefresh, /**< reference: OMX_CONFIG_MACROBLOCKERRORMAPTYPE */ -+ OMX_IndexConfigVideoMBErrorReporting, /**< reference: OMX_CONFIG_MBERRORREPORTINGTYPE */ -+ OMX_IndexParamVideoMacroblocksPerFrame, /**< reference: OMX_PARAM_MACROBLOCKSTYPE */ -+ OMX_IndexConfigVideoMacroBlockErrorMap, /**< reference: OMX_CONFIG_MACROBLOCKERRORMAPTYPE */ -+ OMX_IndexParamVideoSliceFMO, /**< reference: OMX_VIDEO_PARAM_AVCSLICEFMO */ -+ OMX_IndexConfigVideoAVCIntraPeriod, /**< reference: OMX_VIDEO_CONFIG_AVCINTRAPERIOD */ -+ OMX_IndexConfigVideoNalSize, /**< reference: OMX_VIDEO_CONFIG_NALSIZE */ -+ -+ /* Image & Video common Configurations */ -+ OMX_IndexCommonStartUnused = 0x07000000, -+ OMX_IndexParamCommonDeblocking, /**< reference: OMX_PARAM_DEBLOCKINGTYPE */ -+ OMX_IndexParamCommonSensorMode, /**< reference: OMX_PARAM_SENSORMODETYPE */ -+ OMX_IndexParamCommonInterleave, /**< reference: OMX_PARAM_INTERLEAVETYPE */ -+ OMX_IndexConfigCommonColorFormatConversion, /**< reference: OMX_CONFIG_COLORCONVERSIONTYPE */ -+ OMX_IndexConfigCommonScale, /**< reference: OMX_CONFIG_SCALEFACTORTYPE */ -+ OMX_IndexConfigCommonImageFilter, /**< reference: OMX_CONFIG_IMAGEFILTERTYPE */ -+ OMX_IndexConfigCommonColorEnhancement, /**< reference: OMX_CONFIG_COLORENHANCEMENTTYPE */ -+ OMX_IndexConfigCommonColorKey, /**< reference: OMX_CONFIG_COLORKEYTYPE */ -+ OMX_IndexConfigCommonColorBlend, /**< reference: OMX_CONFIG_COLORBLENDTYPE */ -+ OMX_IndexConfigCommonFrameStabilisation,/**< reference: OMX_CONFIG_FRAMESTABTYPE */ -+ OMX_IndexConfigCommonRotate, /**< reference: OMX_CONFIG_ROTATIONTYPE */ -+ OMX_IndexConfigCommonMirror, /**< reference: OMX_CONFIG_MIRRORTYPE */ -+ OMX_IndexConfigCommonOutputPosition, /**< reference: OMX_CONFIG_POINTTYPE */ -+ OMX_IndexConfigCommonInputCrop, /**< reference: OMX_CONFIG_RECTTYPE */ -+ OMX_IndexConfigCommonOutputCrop, /**< reference: OMX_CONFIG_RECTTYPE */ -+ OMX_IndexConfigCommonDigitalZoom, /**< reference: OMX_CONFIG_SCALEFACTORTYPE */ -+ OMX_IndexConfigCommonOpticalZoom, /**< reference: OMX_CONFIG_SCALEFACTORTYPE*/ -+ OMX_IndexConfigCommonWhiteBalance, /**< reference: OMX_CONFIG_WHITEBALCONTROLTYPE */ -+ OMX_IndexConfigCommonExposure, /**< reference: OMX_CONFIG_EXPOSURECONTROLTYPE */ -+ OMX_IndexConfigCommonContrast, /**< reference: OMX_CONFIG_CONTRASTTYPE */ -+ OMX_IndexConfigCommonBrightness, /**< reference: OMX_CONFIG_BRIGHTNESSTYPE */ -+ OMX_IndexConfigCommonBacklight, /**< reference: OMX_CONFIG_BACKLIGHTTYPE */ -+ OMX_IndexConfigCommonGamma, /**< reference: OMX_CONFIG_GAMMATYPE */ -+ OMX_IndexConfigCommonSaturation, /**< reference: OMX_CONFIG_SATURATIONTYPE */ -+ OMX_IndexConfigCommonLightness, /**< reference: OMX_CONFIG_LIGHTNESSTYPE */ -+ OMX_IndexConfigCommonExclusionRect, /**< reference: OMX_CONFIG_RECTTYPE */ -+ OMX_IndexConfigCommonDithering, /**< reference: OMX_CONFIG_DITHERTYPE */ -+ OMX_IndexConfigCommonPlaneBlend, /**< reference: OMX_CONFIG_PLANEBLENDTYPE */ -+ OMX_IndexConfigCommonExposureValue, /**< reference: OMX_CONFIG_EXPOSUREVALUETYPE */ -+ OMX_IndexConfigCommonOutputSize, /**< reference: OMX_FRAMESIZETYPE */ -+ OMX_IndexParamCommonExtraQuantData, /**< reference: OMX_OTHER_EXTRADATATYPE */ -+ OMX_IndexConfigCommonFocusRegion, /**< reference: OMX_CONFIG_FOCUSREGIONTYPE */ -+ OMX_IndexConfigCommonFocusStatus, /**< reference: OMX_PARAM_FOCUSSTATUSTYPE */ -+ OMX_IndexConfigCommonTransitionEffect, /**< reference: OMX_CONFIG_TRANSITIONEFFECTTYPE */ -+ -+ /* Reserved Configuration range */ -+ OMX_IndexOtherStartUnused = 0x08000000, -+ OMX_IndexParamOtherPortFormat, /**< reference: OMX_OTHER_PARAM_PORTFORMATTYPE */ -+ OMX_IndexConfigOtherPower, /**< reference: OMX_OTHER_CONFIG_POWERTYPE */ -+ OMX_IndexConfigOtherStats, /**< reference: OMX_OTHER_CONFIG_STATSTYPE */ -+ -+ -+ /* Reserved Time range */ -+ OMX_IndexTimeStartUnused = 0x09000000, -+ OMX_IndexConfigTimeScale, /**< reference: OMX_TIME_CONFIG_SCALETYPE */ -+ OMX_IndexConfigTimeClockState, /**< reference: OMX_TIME_CONFIG_CLOCKSTATETYPE */ -+ OMX_IndexConfigTimeActiveRefClock, /**< reference: OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE */ -+ OMX_IndexConfigTimeCurrentMediaTime, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (read only) */ -+ OMX_IndexConfigTimeCurrentWallTime, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (read only) */ -+ OMX_IndexConfigTimeCurrentAudioReference, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */ -+ OMX_IndexConfigTimeCurrentVideoReference, /**< reference: OMX_TIME_CONFIG_TIMESTAMPTYPE (write only) */ -+ OMX_IndexConfigTimeMediaTimeRequest, /**< reference: OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE (write only) */ -+ OMX_IndexConfigTimeClientStartTime, /** -+ -+ -+/** Khronos standard extension indices. -+ -+This enum lists the current Khronos extension indices to OpenMAX IL. -+*/ -+typedef enum OMX_INDEXEXTTYPE { -+ -+ /* Component parameters and configurations */ -+ OMX_IndexExtComponentStartUnused = OMX_IndexKhronosExtensions + 0x00100000, -+ OMX_IndexConfigCallbackRequest, /**< reference: OMX_CONFIG_CALLBACKREQUESTTYPE */ -+ OMX_IndexConfigCommitMode, /**< reference: OMX_CONFIG_COMMITMODETYPE */ -+ OMX_IndexConfigCommit, /**< reference: OMX_CONFIG_COMMITTYPE */ -+ -+ /* Port parameters and configurations */ -+ OMX_IndexExtPortStartUnused = OMX_IndexKhronosExtensions + 0x00200000, -+ -+ /* Audio parameters and configurations */ -+ OMX_IndexExtAudioStartUnused = OMX_IndexKhronosExtensions + 0x00400000, -+ OMX_IndexParamAudioAndroidAc3, /**< reference: OMX_AUDIO_PARAM_ANDROID_AC3TYPE */ -+ OMX_IndexParamAudioAndroidOpus, /**< reference: OMX_AUDIO_PARAM_ANDROID_OPUSTYPE */ -+ OMX_IndexParamAudioAndroidAacPresentation, /**< reference: OMX_AUDIO_PARAM_ANDROID_AACPRESENTATIONTYPE */ -+ OMX_IndexParamAudioAndroidEac3, /**< reference: OMX_AUDIO_PARAM_ANDROID_EAC3TYPE */ -+ OMX_IndexParamAudioProfileQuerySupported, /**< reference: OMX_AUDIO_PARAM_ANDROID_PROFILETYPE */ -+ -+ /* Image parameters and configurations */ -+ OMX_IndexExtImageStartUnused = OMX_IndexKhronosExtensions + 0x00500000, -+ -+ /* Video parameters and configurations */ -+ OMX_IndexExtVideoStartUnused = OMX_IndexKhronosExtensions + 0x00600000, -+ OMX_IndexParamNalStreamFormatSupported, /**< reference: OMX_NALSTREAMFORMATTYPE */ -+ OMX_IndexParamNalStreamFormat, /**< reference: OMX_NALSTREAMFORMATTYPE */ -+ OMX_IndexParamNalStreamFormatSelect, /**< reference: OMX_NALSTREAMFORMATTYPE */ -+ OMX_IndexParamVideoVp8, /**< reference: OMX_VIDEO_PARAM_VP8TYPE */ -+ OMX_IndexConfigVideoVp8ReferenceFrame, /**< reference: OMX_VIDEO_VP8REFERENCEFRAMETYPE */ -+ OMX_IndexConfigVideoVp8ReferenceFrameType, /**< reference: OMX_VIDEO_VP8REFERENCEFRAMEINFOTYPE */ -+ OMX_IndexParamVideoAndroidVp8Encoder, /**< reference: OMX_VIDEO_PARAM_ANDROID_VP8ENCODERTYPE */ -+ OMX_IndexParamVideoHevc, /**< reference: OMX_VIDEO_PARAM_HEVCTYPE */ -+ OMX_IndexParamSliceSegments, /**< reference: OMX_VIDEO_SLICESEGMENTSTYPE */ -+ OMX_IndexConfigAndroidIntraRefresh, /**< reference: OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE */ -+ OMX_IndexParamAndroidVideoTemporalLayering, /**< reference: OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE */ -+ OMX_IndexConfigAndroidVideoTemporalLayering, /**< reference: OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE */ -+ -+ /* Image & Video common configurations */ -+ OMX_IndexExtCommonStartUnused = OMX_IndexKhronosExtensions + 0x00700000, -+ -+ /* Other configurations */ -+ OMX_IndexExtOtherStartUnused = OMX_IndexKhronosExtensions + 0x00800000, -+ OMX_IndexConfigAutoFramerateConversion, /**< reference: OMX_CONFIG_BOOLEANTYPE */ -+ OMX_IndexConfigPriority, /**< reference: OMX_PARAM_U32TYPE */ -+ OMX_IndexConfigOperatingRate, /**< reference: OMX_PARAM_U32TYPE in Q16 format for video and in Hz for audio */ -+ OMX_IndexParamConsumerUsageBits, /**< reference: OMX_PARAM_U32TYPE */ -+ -+ /* Time configurations */ -+ OMX_IndexExtTimeStartUnused = OMX_IndexKhronosExtensions + 0x00900000, -+ -+ OMX_IndexExtMax = 0x7FFFFFFF -+} OMX_INDEXEXTTYPE; -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif /* OMX_IndexExt_h */ -+/* File EOF */ -diff --git a/encoder/include/khronos/OMX_Other.h b/encoder/include/khronos/OMX_Other.h -new file mode 100755 -index 0000000..8aa67b7 ---- /dev/null -+++ b/encoder/include/khronos/OMX_Other.h -@@ -0,0 +1,366 @@ -+/* -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** @file OMX_Other.h - OpenMax IL version 1.1.2 -+ * The structures needed by Other components to exchange -+ * parameters and configuration data with the components. -+ */ -+ -+#ifndef OMX_Other_h -+#define OMX_Other_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+ -+/* Each OMX header must include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+ -+#include -+ -+ -+/** -+ * Enumeration of possible data types which match to multiple domains or no -+ * domain at all. For types which are vendor specific, a value above -+ * OMX_OTHER_VENDORTSTART should be used. -+ */ -+typedef enum OMX_OTHER_FORMATTYPE { -+ OMX_OTHER_FormatTime = 0, /**< Transmission of various timestamps, elapsed time, -+ time deltas, etc */ -+ OMX_OTHER_FormatPower, /**< Perhaps used for enabling/disabling power -+ management, setting clocks? */ -+ OMX_OTHER_FormatStats, /**< Could be things such as frame rate, frames -+ dropped, etc */ -+ OMX_OTHER_FormatBinary, /**< Arbitrary binary data */ -+ OMX_OTHER_FormatVendorReserved = 1000, /**< Starting value for vendor specific -+ formats */ -+ -+ OMX_OTHER_FormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_OTHER_FormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_OTHER_FormatMax = 0x7FFFFFFF -+} OMX_OTHER_FORMATTYPE; -+ -+/** -+ * Enumeration of seek modes. -+ */ -+typedef enum OMX_TIME_SEEKMODETYPE { -+ OMX_TIME_SeekModeFast = 0, /**< Prefer seeking to an approximation -+ * of the requested seek position over -+ * the actual seek position if it -+ * results in a faster seek. */ -+ OMX_TIME_SeekModeAccurate, /**< Prefer seeking to the actual seek -+ * position over an approximation -+ * of the requested seek position even -+ * if it results in a slower seek. */ -+ OMX_TIME_SeekModeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_TIME_SeekModeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_TIME_SeekModeMax = 0x7FFFFFFF -+} OMX_TIME_SEEKMODETYPE; -+ -+/* Structure representing the seekmode of the component */ -+typedef struct OMX_TIME_CONFIG_SEEKMODETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_TIME_SEEKMODETYPE eType; /**< The seek mode */ -+} OMX_TIME_CONFIG_SEEKMODETYPE; -+ -+/** -+ * colorspace -+ */ -+typedef enum OMX_ROCKCHIP_EXT_COLORSPACE { -+ OMX_RK_EXT_ColorspaceBT709 = 1, -+ OMX_RK_EXT_ColorspaceBT2020, -+ OMX_RK_EXT_ColorspaceMax = 0x7FFFFFFF -+} OMX_RK_EXT_COLORSPACE; -+ -+/** -+ * dynamic range -+ */ -+typedef enum OMX_ROCKCHIP_EXT_DYNCRANGE { -+ OMX_RK_EXT_DyncrangeSDR = 0, -+ OMX_RK_EXT_DyncrangeHDR10, -+ OMX_RK_EXT_DyncrangeHDRHLG, -+ OMX_RK_EXT_DyncrangeHDRDOLBY, -+ OMX_RK_EXT_DyncrangeMax = 0x7FFFFFFF -+} OMX_RK_EXT_DYNCRANGE; -+ -+ -+/* Structure Rockchip extension HDR param of the component */ -+ typedef struct OMX_EXTENSION_VIDEO_PARAM_HDR { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_RK_EXT_COLORSPACE eColorSpace; /**< Color space */ -+ OMX_RK_EXT_DYNCRANGE eDyncRange; /**< dynamic range */ -+} OMX_EXTENSION_VIDEO_PARAM_HDR; -+ -+/** Structure representing a time stamp used with the following configs -+ * on the Clock Component (CC): -+ * -+ * OMX_IndexConfigTimeCurrentWallTime: query of the CC’s current wall -+ * time -+ * OMX_IndexConfigTimeCurrentMediaTime: query of the CC’s current media -+ * time -+ * OMX_IndexConfigTimeCurrentAudioReference and -+ * OMX_IndexConfigTimeCurrentVideoReference: audio/video reference -+ * clock sending SC its reference time -+ * OMX_IndexConfigTimeClientStartTime: a Clock Component client sends -+ * this structure to the Clock Component via a SetConfig on its -+ * client port when it receives a buffer with -+ * OMX_BUFFERFLAG_STARTTIME set. It must use the timestamp -+ * specified by that buffer for nStartTimestamp. -+ * -+ * It’s also used with the following config on components in general: -+ * -+ * OMX_IndexConfigTimePosition: IL client querying component position -+ * (GetConfig) or commanding a component to seek to the given location -+ * (SetConfig) -+ */ -+typedef struct OMX_TIME_CONFIG_TIMESTAMPTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version -+ * information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_TICKS nTimestamp; /**< timestamp .*/ -+} OMX_TIME_CONFIG_TIMESTAMPTYPE; -+ -+/** Enumeration of possible reference clocks to the media time. */ -+typedef enum OMX_TIME_UPDATETYPE { -+ OMX_TIME_UpdateRequestFulfillment, /**< Update is the fulfillment of a media time request. */ -+ OMX_TIME_UpdateScaleChanged, /**< Update was generated because the scale chagned. */ -+ OMX_TIME_UpdateClockStateChanged, /**< Update was generated because the clock state changed. */ -+ OMX_TIME_UpdateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_TIME_UpdateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_TIME_UpdateMax = 0x7FFFFFFF -+} OMX_TIME_UPDATETYPE; -+ -+/** Enumeration of possible reference clocks to the media time. */ -+typedef enum OMX_TIME_REFCLOCKTYPE { -+ OMX_TIME_RefClockNone, /**< Use no references. */ -+ OMX_TIME_RefClockAudio, /**< Use references sent through OMX_IndexConfigTimeCurrentAudioReference */ -+ OMX_TIME_RefClockVideo, /**< Use references sent through OMX_IndexConfigTimeCurrentVideoReference */ -+ OMX_TIME_RefClockKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_TIME_RefClockVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_TIME_RefClockMax = 0x7FFFFFFF -+} OMX_TIME_REFCLOCKTYPE; -+ -+/** Enumeration of clock states. */ -+typedef enum OMX_TIME_CLOCKSTATE { -+ OMX_TIME_ClockStateRunning, /**< Clock running. */ -+ OMX_TIME_ClockStateWaitingForStartTime, /**< Clock waiting until the -+ * prescribed clients emit their -+ * start time. */ -+ OMX_TIME_ClockStateStopped, /**< Clock stopped. */ -+ OMX_TIME_ClockStateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_TIME_ClockStateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_TIME_ClockStateMax = 0x7FFFFFFF -+} OMX_TIME_CLOCKSTATE; -+ -+/** Structure representing a media time request to the clock component. -+ * -+ * A client component sends this structure to the Clock Component via a SetConfig -+ * on its client port to specify a media timestamp the Clock Component -+ * should emit. The Clock Component should fulfill the request by sending a -+ * OMX_TIME_MEDIATIMETYPE when its media clock matches the requested -+ * timestamp. -+ * -+ * The client may require a media time request be fulfilled slightly -+ * earlier than the media time specified. In this case the client specifies -+ * an offset which is equal to the difference between wall time corresponding -+ * to the requested media time and the wall time when it will be -+ * fulfilled. -+ * -+ * A client component may uses these requests and the OMX_TIME_MEDIATIMETYPE to -+ * time events according to timestamps. If a client must perform an operation O at -+ * a time T (e.g. deliver a video frame at its corresponding timestamp), it makes a -+ * media time request at T (perhaps specifying an offset to ensure the request fulfillment -+ * is a little early). When the clock component passes the resulting OMX_TIME_MEDIATIMETYPE -+ * structure back to the client component, the client may perform operation O (perhaps having -+ * to wait a slight amount more time itself as specified by the return values). -+ */ -+ -+typedef struct OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< port that this structure applies to */ -+ OMX_PTR pClientPrivate; /**< Client private data to disabiguate this media time -+ * from others (e.g. the number of the frame to deliver). -+ * Duplicated in the media time structure that fulfills -+ * this request. A value of zero is reserved for time scale -+ * updates. */ -+ OMX_TICKS nMediaTimestamp; /**< Media timestamp requested.*/ -+ OMX_TICKS nOffset; /**< Amount of wall clock time by which this -+ * request should be fulfilled early */ -+} OMX_TIME_CONFIG_MEDIATIMEREQUESTTYPE; -+ -+/**< Structure sent from the clock component client either when fulfilling -+ * a media time request or when the time scale has changed. -+ * -+ * In the former case the Clock Component fills this structure and times its emission -+ * to a client component (via the client port) according to the corresponding media -+ * time request sent by the client. The Clock Component should time the emission to occur -+ * when the requested timestamp matches the Clock Component's media time but also the -+ * prescribed offset early. -+ * -+ * Upon scale changes the clock component clears the nClientPrivate data, sends the current -+ * media time and sets the nScale to the new scale via the client port. It emits a -+ * OMX_TIME_MEDIATIMETYPE to all clients independent of any requests. This allows clients to -+ * alter processing to accomodate scaling. For instance a video component might skip inter-frames -+ * in the case of extreme fastforward. Likewise an audio component might add or remove samples -+ * from an audio frame to scale audio data. -+ * -+ * It is expected that some clock components may not be able to fulfill requests -+ * at exactly the prescribed time. This is acceptable so long as the request is -+ * fulfilled at least as early as described and not later. This structure provides -+ * fields the client may use to wait for the remaining time. -+ * -+ * The client may use either the nOffset or nWallTimeAtMedia fields to determine the -+ * wall time until the nMediaTimestamp actually occurs. In the latter case the -+ * client can get a more accurate value for offset by getting the current wall -+ * from the cloc component and subtracting it from nWallTimeAtMedia. -+ */ -+ -+typedef struct OMX_TIME_MEDIATIMETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nClientPrivate; /**< Client private data to disabiguate this media time -+ * from others. Copied from the media time request. -+ * A value of zero is reserved for time scale updates. */ -+ OMX_TIME_UPDATETYPE eUpdateType; /**< Reason for the update */ -+ OMX_TICKS nMediaTimestamp; /**< Media time requested. If no media time was -+ * requested then this is the current media time. */ -+ OMX_TICKS nOffset; /**< Amount of wall clock time by which this -+ * request was actually fulfilled early */ -+ -+ OMX_TICKS nWallTimeAtMediaTime; /**< Wall time corresponding to nMediaTimeStamp. -+ * A client may compare this value to current -+ * media time obtained from the Clock Component to determine -+ * the wall time until the media timestamp is really -+ * current. */ -+ OMX_S32 xScale; /**< Current media time scale in Q16 format. */ -+ OMX_TIME_CLOCKSTATE eState; /* Seeking Change. Added 7/12.*/ -+ /**< State of the media time. */ -+} OMX_TIME_MEDIATIMETYPE; -+ -+/** Structure representing the current media time scale factor. Applicable only to clock -+ * component, other components see scale changes via OMX_TIME_MEDIATIMETYPE buffers sent via -+ * the clock component client ports. Upon recieving this config the clock component changes -+ * the rate by which the media time increases or decreases effectively implementing trick modes. -+ */ -+typedef struct OMX_TIME_CONFIG_SCALETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_S32 xScale; /**< This is a value in Q16 format which is used for -+ * scaling the media time */ -+} OMX_TIME_CONFIG_SCALETYPE; -+ -+/** Bits used to identify a clock port. Used in OMX_TIME_CONFIG_CLOCKSTATETYPE’s nWaitMask field */ -+#define OMX_CLOCKPORT0 0x00000001 -+#define OMX_CLOCKPORT1 0x00000002 -+#define OMX_CLOCKPORT2 0x00000004 -+#define OMX_CLOCKPORT3 0x00000008 -+#define OMX_CLOCKPORT4 0x00000010 -+#define OMX_CLOCKPORT5 0x00000020 -+#define OMX_CLOCKPORT6 0x00000040 -+#define OMX_CLOCKPORT7 0x00000080 -+ -+/** Structure representing the current mode of the media clock. -+ * IL Client uses this config to change or query the mode of the -+ * media clock of the clock component. Applicable only to clock -+ * component. -+ * -+ * On a SetConfig if eState is OMX_TIME_ClockStateRunning media time -+ * starts immediately at the prescribed start time. If -+ * OMX_TIME_ClockStateWaitingForStartTime the Clock Component ignores -+ * the given nStartTime and waits for all clients specified in the -+ * nWaitMask to send starttimes (via -+ * OMX_IndexConfigTimeClientStartTime). The Clock Component then starts -+ * the media clock using the earliest start time supplied. */ -+typedef struct OMX_TIME_CONFIG_CLOCKSTATETYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version -+ * information */ -+ OMX_TIME_CLOCKSTATE eState; /**< State of the media time. */ -+ OMX_TICKS nStartTime; /**< Start time of the media time. */ -+ OMX_TICKS nOffset; /**< Time to offset the media time by -+ * (e.g. preroll). Media time will be -+ * reported to be nOffset ticks earlier. -+ */ -+ OMX_U32 nWaitMask; /**< Mask of OMX_CLOCKPORT values. */ -+} OMX_TIME_CONFIG_CLOCKSTATETYPE; -+ -+/** Structure representing the reference clock currently being used to -+ * compute media time. IL client uses this config to change or query the -+ * clock component's active reference clock */ -+typedef struct OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_TIME_REFCLOCKTYPE eClock; /**< Reference clock used to compute media time */ -+} OMX_TIME_CONFIG_ACTIVEREFCLOCKTYPE; -+ -+/** Descriptor for setting specifics of power type. -+ * Note: this structure is listed for backwards compatibility. */ -+typedef struct OMX_OTHER_CONFIG_POWERTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_BOOL bEnablePM; /**< Flag to enable Power Management */ -+} OMX_OTHER_CONFIG_POWERTYPE; -+ -+ -+/** Descriptor for setting specifics of stats type. -+ * Note: this structure is listed for backwards compatibility. */ -+typedef struct OMX_OTHER_CONFIG_STATSTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ /* what goes here */ -+} OMX_OTHER_CONFIG_STATSTYPE; -+ -+ -+/** -+ * The PortDefinition structure is used to define all of the parameters -+ * necessary for the compliant component to setup an input or an output other -+ * path. -+ */ -+typedef struct OMX_OTHER_PORTDEFINITIONTYPE { -+ OMX_OTHER_FORMATTYPE eFormat; /**< Type of data expected for this channel */ -+} OMX_OTHER_PORTDEFINITIONTYPE; -+ -+/** Port format parameter. This structure is used to enumerate -+ * the various data input/output format supported by the port. -+ */ -+typedef struct OMX_OTHER_PARAM_PORTFORMATTYPE { -+ OMX_U32 nSize; /**< size of the structure in bytes */ -+ OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ -+ OMX_U32 nPortIndex; /**< Indicates which port to set */ -+ OMX_U32 nIndex; /**< Indicates the enumeration index for the format from 0x0 to N-1 */ -+ OMX_OTHER_FORMATTYPE eFormat; /**< Type of data expected for this channel */ -+} OMX_OTHER_PARAM_PORTFORMATTYPE; -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -+/* File EOF */ -diff --git a/encoder/include/khronos/OMX_Types.h b/encoder/include/khronos/OMX_Types.h -new file mode 100755 -index 0000000..527ba23 ---- /dev/null -+++ b/encoder/include/khronos/OMX_Types.h -@@ -0,0 +1,361 @@ -+/* -+ * Copyright (c) 2016 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** OMX_Types.h - OpenMax IL version 1.1.2 -+ * The OMX_Types header file contains the primitive type definitions used by -+ * the core, the application and the component. This file may need to be -+ * modified to be used on systems that do not have "char" set to 8 bits, -+ * "short" set to 16 bits and "long" set to 32 bits. -+ */ -+ -+#ifndef OMX_Types_h -+#define OMX_Types_h -+ -+#include -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+/** The OMX_API and OMX_APIENTRY are platform specific definitions used -+ * to declare OMX function prototypes. They are modified to meet the -+ * requirements for a particular platform */ -+#ifdef __SYMBIAN32__ -+# ifdef __OMX_EXPORTS -+# define OMX_API __declspec(dllexport) -+# else -+# ifdef _WIN32 -+# define OMX_API __declspec(dllexport) -+# else -+# define OMX_API __declspec(dllimport) -+# endif -+# endif -+#else -+# ifdef _WIN32 -+# ifdef __OMX_EXPORTS -+# define OMX_API __declspec(dllexport) -+# else -+# define OMX_API __declspec(dllimport) -+# endif -+# else -+# ifdef __OMX_EXPORTS -+# define OMX_API -+# else -+# define OMX_API extern -+# endif -+# endif -+#endif -+ -+#ifndef OMX_APIENTRY -+#define OMX_APIENTRY -+#endif -+ -+/** OMX_IN is used to identify inputs to an OMX function. This designation -+ will also be used in the case of a pointer that points to a parameter -+ that is used as an output. */ -+#ifndef OMX_IN -+#define OMX_IN -+#endif -+ -+/** OMX_OUT is used to identify outputs from an OMX function. This -+ designation will also be used in the case of a pointer that points -+ to a parameter that is used as an input. */ -+#ifndef OMX_OUT -+#define OMX_OUT -+#endif -+ -+ -+/** OMX_INOUT is used to identify parameters that may be either inputs or -+ outputs from an OMX function at the same time. This designation will -+ also be used in the case of a pointer that points to a parameter that -+ is used both as an input and an output. */ -+#ifndef OMX_INOUT -+#define OMX_INOUT -+#endif -+ -+/** OMX_ALL is used to as a wildcard to select all entities of the same type -+ * when specifying the index, or referring to a object by an index. (i.e. -+ * use OMX_ALL to indicate all N channels). When used as a port index -+ * for a config or parameter this OMX_ALL denotes that the config or -+ * parameter applies to the entire component not just one port. */ -+#define OMX_ALL 0xFFFFFFFF -+ -+/** In the following we define groups that help building doxygen documentation */ -+ -+/** @defgroup core OpenMAX IL core -+ * Functions and structure related to the OMX IL core -+ */ -+ -+ /** @defgroup comp OpenMAX IL component -+ * Functions and structure related to the OMX IL component -+ */ -+ -+/** @defgroup rpm Resource and Policy Management -+ * Structures for resource and policy management of components -+ */ -+ -+/** @defgroup buf Buffer Management -+ * Buffer handling functions and structures -+ */ -+ -+/** @defgroup tun Tunneling -+ * @ingroup core comp -+ * Structures and functions to manage tunnels among component ports -+ */ -+ -+/** @defgroup cp Content Pipes -+ * @ingroup core -+ */ -+ -+ /** @defgroup metadata Metadata handling -+ * -+ */ -+ -+/** OMX_U8 is an 8 bit unsigned quantity that is byte aligned */ -+typedef uint8_t OMX_U8; -+ -+/** OMX_S8 is an 8 bit signed quantity that is byte aligned */ -+typedef int8_t OMX_S8; -+ -+/** OMX_U16 is a 16 bit unsigned quantity that is 16 bit word aligned */ -+typedef uint16_t OMX_U16; -+ -+/** OMX_S16 is a 16 bit signed quantity that is 16 bit word aligned */ -+typedef int16_t OMX_S16; -+ -+/** OMX_U32 is a 32 bit unsigned quantity that is 32 bit word aligned */ -+typedef uint32_t OMX_U32; -+ -+/** OMX_S32 is a 32 bit signed quantity that is 32 bit word aligned */ -+typedef int32_t OMX_S32; -+ -+ -+/* Users with compilers that cannot accept the "long long" designation should -+ define the OMX_SKIP64BIT macro. It should be noted that this may cause -+ some components to fail to compile if the component was written to require -+ 64 bit integral types. However, these components would NOT compile anyway -+ since the compiler does not support the way the component was written. -+*/ -+#ifndef OMX_SKIP64BIT -+#ifdef __SYMBIAN32__ -+/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ -+typedef unsigned long long OMX_U64; -+ -+/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ -+typedef signed long long OMX_S64; -+ -+#elif defined(WIN32) -+ -+/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ -+typedef unsigned __int64 OMX_U64; -+ -+/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ -+typedef signed __int64 OMX_S64; -+ -+#else /* WIN32 */ -+ -+/** OMX_U64 is a 64 bit unsigned quantity that is 64 bit word aligned */ -+typedef uint64_t OMX_U64; -+ -+/** OMX_S64 is a 64 bit signed quantity that is 64 bit word aligned */ -+typedef int64_t OMX_S64; -+ -+#endif /* WIN32 */ -+#endif -+ -+ -+/** The OMX_BOOL type is intended to be used to represent a true or a false -+ value when passing parameters to and from the OMX core and components. The -+ OMX_BOOL is a 32 bit quantity and is aligned on a 32 bit word boundary. -+ */ -+typedef enum OMX_BOOL { -+ OMX_FALSE = 0, -+ OMX_TRUE = !OMX_FALSE, -+ OMX_BOOL_MAX = 0x7FFFFFFF -+} OMX_BOOL; -+ -+/** The OMX_PTR type is intended to be used to pass pointers between the OMX -+ applications and the OMX Core and components. This is a 32 bit pointer and -+ is aligned on a 32 bit boundary. -+ */ -+typedef void* OMX_PTR; -+ -+/** The OMX_STRING type is intended to be used to pass "C" type strings between -+ the application and the core and component. The OMX_STRING type is a 32 -+ bit pointer to a zero terminated string. The pointer is word aligned and -+ the string is byte aligned. -+ */ -+typedef char* OMX_STRING; -+ -+/** The OMX_BYTE type is intended to be used to pass arrays of bytes such as -+ buffers between the application and the component and core. The OMX_BYTE -+ type is a 32 bit pointer to a zero terminated string. The pointer is word -+ aligned and the string is byte aligned. -+ */ -+typedef unsigned char* OMX_BYTE; -+ -+/** OMX_UUIDTYPE is a very long unique identifier to uniquely identify -+ at runtime. This identifier should be generated by a component in a way -+ that guarantees that every instance of the identifier running on the system -+ is unique. */ -+typedef unsigned char OMX_UUIDTYPE[128]; -+ -+/** The OMX_DIRTYPE enumeration is used to indicate if a port is an input or -+ an output port. This enumeration is common across all component types. -+ */ -+typedef enum OMX_DIRTYPE -+{ -+ OMX_DirInput, /**< Port is an input port */ -+ OMX_DirOutput, /**< Port is an output port */ -+ OMX_DirMax = 0x7FFFFFFF -+} OMX_DIRTYPE; -+ -+/** The OMX_ENDIANTYPE enumeration is used to indicate the bit ordering -+ for numerical data (i.e. big endian, or little endian). -+ */ -+typedef enum OMX_ENDIANTYPE -+{ -+ OMX_EndianBig, /**< big endian */ -+ OMX_EndianLittle, /**< little endian */ -+ OMX_EndianMax = 0x7FFFFFFF -+} OMX_ENDIANTYPE; -+ -+ -+/** The OMX_NUMERICALDATATYPE enumeration is used to indicate if data -+ is signed or unsigned -+ */ -+typedef enum OMX_NUMERICALDATATYPE -+{ -+ OMX_NumericalDataSigned, /**< signed data */ -+ OMX_NumericalDataUnsigned, /**< unsigned data */ -+ OMX_NumercialDataMax = 0x7FFFFFFF -+} OMX_NUMERICALDATATYPE; -+ -+ -+/** Unsigned bounded value type */ -+typedef struct OMX_BU32 { -+ OMX_U32 nValue; /**< actual value */ -+ OMX_U32 nMin; /**< minimum for value (i.e. nValue >= nMin) */ -+ OMX_U32 nMax; /**< maximum for value (i.e. nValue <= nMax) */ -+} OMX_BU32; -+ -+ -+/** Signed bounded value type */ -+typedef struct OMX_BS32 { -+ OMX_S32 nValue; /**< actual value */ -+ OMX_S32 nMin; /**< minimum for value (i.e. nValue >= nMin) */ -+ OMX_S32 nMax; /**< maximum for value (i.e. nValue <= nMax) */ -+} OMX_BS32; -+ -+ -+/** Structure representing some time or duration in microseconds. This structure -+ * must be interpreted as a signed 64 bit value. The quantity is signed to accommodate -+ * negative deltas and preroll scenarios. The quantity is represented in microseconds -+ * to accomodate high resolution timestamps (e.g. DVD presentation timestamps based -+ * on a 90kHz clock) and to allow more accurate and synchronized delivery (e.g. -+ * individual audio samples delivered at 192 kHz). The quantity is 64 bit to -+ * accommodate a large dynamic range (signed 32 bit values would allow only for plus -+ * or minus 35 minutes). -+ * -+ * Implementations with limited precision may convert the signed 64 bit value to -+ * a signed 32 bit value internally but risk loss of precision. -+ */ -+#ifndef OMX_SKIP64BIT -+typedef OMX_S64 OMX_TICKS; -+#else -+typedef struct OMX_TICKS -+{ -+ OMX_U32 nLowPart; /** low bits of the signed 64 bit tick value */ -+ OMX_U32 nHighPart; /** high bits of the signed 64 bit tick value */ -+} OMX_TICKS; -+#endif -+#define OMX_TICKS_PER_SECOND 1000000 -+ -+/** Define the public interface for the OMX Handle. The core will not use -+ this value internally, but the application should only use this value. -+ */ -+typedef void* OMX_HANDLETYPE; -+ -+typedef struct OMX_MARKTYPE -+{ -+ OMX_HANDLETYPE hMarkTargetComponent; /**< The component that will -+ generate a mark event upon -+ processing the mark. */ -+ OMX_PTR pMarkData; /**< Application specific data associated with -+ the mark sent on a mark event to disambiguate -+ this mark from others. */ -+} OMX_MARKTYPE; -+ -+ -+/** OMX_NATIVE_DEVICETYPE is used to map a OMX video port to the -+ * platform & operating specific object used to reference the display -+ * or can be used by a audio port for native audio rendering */ -+typedef void* OMX_NATIVE_DEVICETYPE; -+ -+/** OMX_NATIVE_WINDOWTYPE is used to map a OMX video port to the -+ * platform & operating specific object used to reference the window */ -+typedef void* OMX_NATIVE_WINDOWTYPE; -+ -+ -+/** Define the OMX IL version that corresponds to this set of header files. -+ * We also define a combined version that can be used to write or compare -+ * values of the 32bit nVersion field, assuming a little endian architecture */ -+#define OMX_VERSION_MAJOR 1 -+#define OMX_VERSION_MINOR 1 -+#define OMX_VERSION_REVISION 2 -+#define OMX_VERSION_STEP 0 -+ -+#define OMX_VERSION ((OMX_VERSION_STEP<<24) | (OMX_VERSION_REVISION<<16) | (OMX_VERSION_MINOR<<8) | OMX_VERSION_MAJOR) -+ -+ -+/** The OMX_VERSIONTYPE union is used to specify the version for -+ a structure or component. For a component, the version is entirely -+ specified by the component vendor. Components doing the same function -+ from different vendors may or may not have the same version. For -+ structures, the version shall be set by the entity that allocates the -+ structure. For structures specified in the OMX 1.1 specification, the -+ value of the version shall be set to 1.1.0.0 in all cases. Access to the -+ OMX_VERSIONTYPE can be by a single 32 bit access (e.g. by nVersion) or -+ by accessing one of the structure elements to, for example, check only -+ the Major revision. -+ */ -+typedef union OMX_VERSIONTYPE -+{ -+ struct -+ { -+ OMX_U8 nVersionMajor; /**< Major version accessor element */ -+ OMX_U8 nVersionMinor; /**< Minor version accessor element */ -+ OMX_U8 nRevision; /**< Revision version accessor element */ -+ OMX_U8 nStep; /**< Step version accessor element */ -+ } s; -+ OMX_U32 nVersion; /**< 32 bit value to make accessing the -+ version easily done in a single word -+ size copy/compare operation */ -+} OMX_VERSIONTYPE; -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -+/* File EOF */ -diff --git a/encoder/include/khronos/OMX_Video.h b/encoder/include/khronos/OMX_Video.h -new file mode 100755 -index 0000000..6fa2626 ---- /dev/null -+++ b/encoder/include/khronos/OMX_Video.h -@@ -0,0 +1,1141 @@ -+/** -+ * Copyright (c) 2008 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** -+ * @file OMX_Video.h - OpenMax IL version 1.1.2 -+ * The structures is needed by Video components to exchange parameters -+ * and configuration data with OMX components. -+ */ -+#ifndef OMX_Video_h -+#define OMX_Video_h -+ -+/** @defgroup video OpenMAX IL Video Domain -+ * @ingroup iv -+ * Structures for OpenMAX IL Video domain -+ * @{ -+ */ -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+ -+/** -+ * Each OMX header must include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+ -+#include -+ -+ -+/** -+ * Enumeration used to define the possible video compression codings. -+ * NOTE: This essentially refers to file extensions. If the coding is -+ * being used to specify the ENCODE type, then additional work -+ * must be done to configure the exact flavor of the compression -+ * to be used. For decode cases where the user application can -+ * not differentiate between MPEG-4 and H.264 bit streams, it is -+ * up to the codec to handle this. -+ */ -+typedef enum OMX_VIDEO_CODINGTYPE { -+ OMX_VIDEO_CodingUnused, /**< Value when coding is N/A */ -+ OMX_VIDEO_CodingAutoDetect, /**< Autodetection of coding type */ -+ OMX_VIDEO_CodingMPEG2, /**< AKA: H.262 */ -+ OMX_VIDEO_CodingH263, /**< H.263 */ -+ OMX_VIDEO_CodingMPEG4, /**< MPEG-4 */ -+ OMX_VIDEO_CodingWMV, /**< all versions of Windows Media Video */ -+ OMX_VIDEO_CodingRV, /**< all versions of Real Video */ -+ OMX_VIDEO_CodingAVC, /**< H.264/AVC */ -+ OMX_VIDEO_CodingMJPEG, /**< Motion JPEG */ -+ OMX_VIDEO_CodingVP8, /**< Google VP8, formerly known as On2 VP8 */ -+ OMX_VIDEO_CodingVP9, /**< Google VP9 */ -+ OMX_VIDEO_CodingHEVC, /**< ITU H.265/HEVC */ -+ OMX_VIDEO_CodingKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_CodingVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_CodingMax = 0x7FFFFFFF -+} OMX_VIDEO_CODINGTYPE; -+ -+ -+/** -+ * Data structure used to define a video path. The number of Video paths for -+ * input and output will vary by type of the Video component. -+ * -+ * Input (aka Source) : zero Inputs, one Output, -+ * Splitter : one Input, 2 or more Outputs, -+ * Processing Element : one Input, one output, -+ * Mixer : 2 or more inputs, one output, -+ * Output (aka Sink) : one Input, zero outputs. -+ * -+ * The PortDefinition structure is used to define all of the parameters -+ * necessary for the compliant component to setup an input or an output video -+ * path. If additional vendor specific data is required, it should be -+ * transmitted to the component using the CustomCommand function. Compliant -+ * components will prepopulate this structure with optimal values during the -+ * GetDefaultInitParams command. -+ * -+ * STRUCT MEMBERS: -+ * cMIMEType : MIME type of data for the port -+ * pNativeRender : Platform specific reference for a display if a -+ * sync, otherwise this field is 0 -+ * nFrameWidth : Width of frame to be used on channel if -+ * uncompressed format is used. Use 0 for unknown, -+ * don't care or variable -+ * nFrameHeight : Height of frame to be used on channel if -+ * uncompressed format is used. Use 0 for unknown, -+ * don't care or variable -+ * nStride : Number of bytes per span of an image -+ * (i.e. indicates the number of bytes to get -+ * from span N to span N+1, where negative stride -+ * indicates the image is bottom up -+ * nSliceHeight : Height used when encoding in slices -+ * nBitrate : Bit rate of frame to be used on channel if -+ * compressed format is used. Use 0 for unknown, -+ * don't care or variable -+ * xFramerate : Frame rate to be used on channel if uncompressed -+ * format is used. Use 0 for unknown, don't care or -+ * variable. Units are Q16 frames per second. -+ * bFlagErrorConcealment : Turns on error concealment if it is supported by -+ * the OMX component -+ * eCompressionFormat : Compression format used in this instance of the -+ * component. When OMX_VIDEO_CodingUnused is -+ * specified, eColorFormat is used -+ * eColorFormat : Decompressed format used by this component -+ * pNativeWindow : Platform specific reference for a window object if a -+ * display sink , otherwise this field is 0x0. -+ */ -+typedef struct OMX_VIDEO_PORTDEFINITIONTYPE { -+ OMX_STRING cMIMEType; -+ OMX_NATIVE_DEVICETYPE pNativeRender; -+ OMX_U32 nFrameWidth; -+ OMX_U32 nFrameHeight; -+ OMX_S32 nStride; -+ OMX_U32 nSliceHeight; -+ OMX_U32 nBitrate; -+ OMX_U32 xFramerate; -+ OMX_BOOL bFlagErrorConcealment; -+ OMX_VIDEO_CODINGTYPE eCompressionFormat; -+ OMX_COLOR_FORMATTYPE eColorFormat; -+ OMX_NATIVE_WINDOWTYPE pNativeWindow; -+} OMX_VIDEO_PORTDEFINITIONTYPE; -+ -+/** -+ * Port format parameter. This structure is used to enumerate the various -+ * data input/output format supported by the port. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Indicates which port to set -+ * nIndex : Indicates the enumeration index for the format from -+ * 0x0 to N-1 -+ * eCompressionFormat : Compression format used in this instance of the -+ * component. When OMX_VIDEO_CodingUnused is specified, -+ * eColorFormat is used -+ * eColorFormat : Decompressed format used by this component -+ * xFrameRate : Indicates the video frame rate in Q16 format -+ */ -+typedef struct OMX_VIDEO_PARAM_PORTFORMATTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nIndex; -+ OMX_VIDEO_CODINGTYPE eCompressionFormat; -+ OMX_COLOR_FORMATTYPE eColorFormat; -+ OMX_U32 xFramerate; -+} OMX_VIDEO_PARAM_PORTFORMATTYPE; -+ -+ -+/** -+ * This is a structure for configuring video compression quantization -+ * parameter values. Codecs may support different QP values for different -+ * frame types. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version info -+ * nPortIndex : Port that this structure applies to -+ * nQpI : QP value to use for index frames -+ * nQpP : QP value to use for P frames -+ * nQpB : QP values to use for bidirectional frames -+ */ -+typedef struct OMX_VIDEO_PARAM_QUANTIZATIONTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nQpI; -+ OMX_U32 nQpP; -+ OMX_U32 nQpB; -+} OMX_VIDEO_PARAM_QUANTIZATIONTYPE; -+ -+ -+/** -+ * Structure for configuration of video fast update parameters. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version info -+ * nPortIndex : Port that this structure applies to -+ * bEnableVFU : Enable/Disable video fast update -+ * nFirstGOB : Specifies the number of the first macroblock row -+ * nFirstMB : specifies the first MB relative to the specified first GOB -+ * nNumMBs : Specifies the number of MBs to be refreshed from nFirstGOB -+ * and nFirstMB -+ */ -+typedef struct OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bEnableVFU; -+ OMX_U32 nFirstGOB; -+ OMX_U32 nFirstMB; -+ OMX_U32 nNumMBs; -+} OMX_VIDEO_PARAM_VIDEOFASTUPDATETYPE; -+ -+ -+/** -+ * Enumeration of possible bitrate control types -+ */ -+typedef enum OMX_VIDEO_CONTROLRATETYPE { -+ OMX_Video_ControlRateDisable, -+ OMX_Video_ControlRateVariable, -+ OMX_Video_ControlRateConstant, -+ OMX_Video_ControlRateVariableSkipFrames, -+ OMX_Video_ControlRateConstantSkipFrames, -+ OMX_Video_ControlRateKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_Video_ControlRateVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_Video_ControlRateMax = 0x7FFFFFFF -+} OMX_VIDEO_CONTROLRATETYPE; -+ -+ -+/** -+ * Structure for configuring bitrate mode of a codec. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the struct in bytes -+ * nVersion : OMX spec version info -+ * nPortIndex : Port that this struct applies to -+ * eControlRate : Control rate type enum -+ * nTargetBitrate : Target bitrate to encode with -+ */ -+typedef struct OMX_VIDEO_PARAM_BITRATETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_CONTROLRATETYPE eControlRate; -+ OMX_U32 nTargetBitrate; -+} OMX_VIDEO_PARAM_BITRATETYPE; -+ -+ -+/** -+ * Enumeration of possible motion vector (MV) types -+ */ -+typedef enum OMX_VIDEO_MOTIONVECTORTYPE { -+ OMX_Video_MotionVectorPixel, -+ OMX_Video_MotionVectorHalfPel, -+ OMX_Video_MotionVectorQuarterPel, -+ OMX_Video_MotionVectorEighthPel, -+ OMX_Video_MotionVectorKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_Video_MotionVectorVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_Video_MotionVectorMax = 0x7FFFFFFF -+} OMX_VIDEO_MOTIONVECTORTYPE; -+ -+ -+/** -+ * Structure for configuring the number of motion vectors used as well -+ * as their accuracy. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the struct in bytes -+ * nVersion : OMX spec version info -+ * nPortIndex : port that this structure applies to -+ * eAccuracy : Enumerated MV accuracy -+ * bUnrestrictedMVs : Allow unrestricted MVs -+ * bFourMV : Allow use of 4 MVs -+ * sXSearchRange : Search range in horizontal direction for MVs -+ * sYSearchRange : Search range in vertical direction for MVs -+ */ -+typedef struct OMX_VIDEO_PARAM_MOTIONVECTORTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_MOTIONVECTORTYPE eAccuracy; -+ OMX_BOOL bUnrestrictedMVs; -+ OMX_BOOL bFourMV; -+ OMX_S32 sXSearchRange; -+ OMX_S32 sYSearchRange; -+} OMX_VIDEO_PARAM_MOTIONVECTORTYPE; -+ -+ -+/** -+ * Enumeration of possible methods to use for Intra Refresh -+ */ -+typedef enum OMX_VIDEO_INTRAREFRESHTYPE { -+ OMX_VIDEO_IntraRefreshCyclic, -+ OMX_VIDEO_IntraRefreshAdaptive, -+ OMX_VIDEO_IntraRefreshBoth, -+ OMX_VIDEO_IntraRefreshKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_IntraRefreshVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_IntraRefreshMax = 0x7FFFFFFF -+} OMX_VIDEO_INTRAREFRESHTYPE; -+ -+ -+/** -+ * Structure for configuring intra refresh mode -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eRefreshMode : Cyclic, Adaptive, or Both -+ * nAirMBs : Number of intra macroblocks to refresh in a frame when -+ * AIR is enabled -+ * nAirRef : Number of times a motion marked macroblock has to be -+ * intra coded -+ * nCirMBs : Number of consecutive macroblocks to be coded as "intra" -+ * when CIR is enabled -+ */ -+typedef struct OMX_VIDEO_PARAM_INTRAREFRESHTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_INTRAREFRESHTYPE eRefreshMode; -+ OMX_U32 nAirMBs; -+ OMX_U32 nAirRef; -+ OMX_U32 nCirMBs; -+} OMX_VIDEO_PARAM_INTRAREFRESHTYPE; -+ -+ -+/** -+ * Structure for enabling various error correction methods for video -+ * compression. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * bEnableHEC : Enable/disable header extension codes (HEC) -+ * bEnableResync : Enable/disable resynchronization markers -+ * nResynchMarkerSpacing : Resynch markers interval (in bits) to be -+ * applied in the stream -+ * bEnableDataPartitioning : Enable/disable data partitioning -+ * bEnableRVLC : Enable/disable reversible variable length -+ * coding -+ */ -+typedef struct OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bEnableHEC; -+ OMX_BOOL bEnableResync; -+ OMX_U32 nResynchMarkerSpacing; -+ OMX_BOOL bEnableDataPartitioning; -+ OMX_BOOL bEnableRVLC; -+} OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE; -+ -+ -+/** -+ * Configuration of variable block-size motion compensation (VBSMC) -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * b16x16 : Enable inter block search 16x16 -+ * b16x8 : Enable inter block search 16x8 -+ * b8x16 : Enable inter block search 8x16 -+ * b8x8 : Enable inter block search 8x8 -+ * b8x4 : Enable inter block search 8x4 -+ * b4x8 : Enable inter block search 4x8 -+ * b4x4 : Enable inter block search 4x4 -+ */ -+typedef struct OMX_VIDEO_PARAM_VBSMCTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL b16x16; -+ OMX_BOOL b16x8; -+ OMX_BOOL b8x16; -+ OMX_BOOL b8x8; -+ OMX_BOOL b8x4; -+ OMX_BOOL b4x8; -+ OMX_BOOL b4x4; -+} OMX_VIDEO_PARAM_VBSMCTYPE; -+ -+ -+/** -+ * H.263 profile types, each profile indicates support for various -+ * performance bounds and different annexes. -+ * -+ * ENUMS: -+ * Baseline : Baseline Profile: H.263 (V1), no optional modes -+ * H320 Coding : H.320 Coding Efficiency Backward Compatibility -+ * Profile: H.263+ (V2), includes annexes I, J, L.4 -+ * and T -+ * BackwardCompatible : Backward Compatibility Profile: H.263 (V1), -+ * includes annex F -+ * ISWV2 : Interactive Streaming Wireless Profile: H.263+ -+ * (V2), includes annexes I, J, K and T -+ * ISWV3 : Interactive Streaming Wireless Profile: H.263++ -+ * (V3), includes profile 3 and annexes V and W.6.3.8 -+ * HighCompression : Conversational High Compression Profile: H.263++ -+ * (V3), includes profiles 1 & 2 and annexes D and U -+ * Internet : Conversational Internet Profile: H.263++ (V3), -+ * includes profile 5 and annex K -+ * Interlace : Conversational Interlace Profile: H.263++ (V3), -+ * includes profile 5 and annex W.6.3.11 -+ * HighLatency : High Latency Profile: H.263++ (V3), includes -+ * profile 6 and annexes O.1 and P.5 -+ */ -+typedef enum OMX_VIDEO_H263PROFILETYPE { -+ OMX_VIDEO_H263ProfileBaseline = 0x01, -+ OMX_VIDEO_H263ProfileH320Coding = 0x02, -+ OMX_VIDEO_H263ProfileBackwardCompatible = 0x04, -+ OMX_VIDEO_H263ProfileISWV2 = 0x08, -+ OMX_VIDEO_H263ProfileISWV3 = 0x10, -+ OMX_VIDEO_H263ProfileHighCompression = 0x20, -+ OMX_VIDEO_H263ProfileInternet = 0x40, -+ OMX_VIDEO_H263ProfileInterlace = 0x80, -+ OMX_VIDEO_H263ProfileHighLatency = 0x100, -+ OMX_VIDEO_H263ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_H263ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_H263ProfileMax = 0x7FFFFFFF -+} OMX_VIDEO_H263PROFILETYPE; -+ -+ -+/** -+ * H.263 level types, each level indicates support for various frame sizes, -+ * bit rates, decoder frame rates. -+ */ -+typedef enum OMX_VIDEO_H263LEVELTYPE { -+ OMX_VIDEO_H263Level10 = 0x01, -+ OMX_VIDEO_H263Level20 = 0x02, -+ OMX_VIDEO_H263Level30 = 0x04, -+ OMX_VIDEO_H263Level40 = 0x08, -+ OMX_VIDEO_H263Level45 = 0x10, -+ OMX_VIDEO_H263Level50 = 0x20, -+ OMX_VIDEO_H263Level60 = 0x40, -+ OMX_VIDEO_H263Level70 = 0x80, -+ OMX_VIDEO_H263LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_H263LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_H263LevelMax = 0x7FFFFFFF -+} OMX_VIDEO_H263LEVELTYPE; -+ -+ -+/** -+ * Specifies the picture type. These values should be OR'd to signal all -+ * pictures types which are allowed. -+ * -+ * ENUMS: -+ * Generic Picture Types: I, P and B -+ * H.263 Specific Picture Types: SI and SP -+ * H.264 Specific Picture Types: EI and EP -+ * MPEG-4 Specific Picture Types: S -+ */ -+typedef enum OMX_VIDEO_PICTURETYPE { -+ OMX_VIDEO_PictureTypeI = 0x01, -+ OMX_VIDEO_PictureTypeP = 0x02, -+ OMX_VIDEO_PictureTypeB = 0x04, -+ OMX_VIDEO_PictureTypeSI = 0x08, -+ OMX_VIDEO_PictureTypeSP = 0x10, -+ OMX_VIDEO_PictureTypeEI = 0x11, -+ OMX_VIDEO_PictureTypeEP = 0x12, -+ OMX_VIDEO_PictureTypeS = 0x14, -+ OMX_VIDEO_PictureTypeKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_PictureTypeVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_PictureTypeMax = 0x7FFFFFFF -+} OMX_VIDEO_PICTURETYPE; -+ -+ -+/** -+ * H.263 Params -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nPFrames : Number of P frames between each I frame -+ * nBFrames : Number of B frames between each I frame -+ * eProfile : H.263 profile(s) to use -+ * eLevel : H.263 level(s) to use -+ * bPLUSPTYPEAllowed : Indicating that it is allowed to use PLUSPTYPE -+ * (specified in the 1998 version of H.263) to -+ * indicate custom picture sizes or clock -+ * frequencies -+ * nAllowedPictureTypes : Specifies the picture types allowed in the -+ * bitstream -+ * bForceRoundingTypeToZero : value of the RTYPE bit (bit 6 of MPPTYPE) is -+ * not constrained. It is recommended to change -+ * the value of the RTYPE bit for each reference -+ * picture in error-free communication -+ * nPictureHeaderRepetition : Specifies the frequency of picture header -+ * repetition -+ * nGOBHeaderInterval : Specifies the interval of non-empty GOB -+ * headers in units of GOBs -+ */ -+typedef struct OMX_VIDEO_PARAM_H263TYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nPFrames; -+ OMX_U32 nBFrames; -+ OMX_VIDEO_H263PROFILETYPE eProfile; -+ OMX_VIDEO_H263LEVELTYPE eLevel; -+ OMX_BOOL bPLUSPTYPEAllowed; -+ OMX_U32 nAllowedPictureTypes; -+ OMX_BOOL bForceRoundingTypeToZero; -+ OMX_U32 nPictureHeaderRepetition; -+ OMX_U32 nGOBHeaderInterval; -+} OMX_VIDEO_PARAM_H263TYPE; -+ -+ -+/** -+ * MPEG-2 profile types, each profile indicates support for various -+ * performance bounds and different annexes. -+ */ -+typedef enum OMX_VIDEO_MPEG2PROFILETYPE { -+ OMX_VIDEO_MPEG2ProfileSimple = 0, /**< Simple Profile */ -+ OMX_VIDEO_MPEG2ProfileMain, /**< Main Profile */ -+ OMX_VIDEO_MPEG2Profile422, /**< 4:2:2 Profile */ -+ OMX_VIDEO_MPEG2ProfileSNR, /**< SNR Profile */ -+ OMX_VIDEO_MPEG2ProfileSpatial, /**< Spatial Profile */ -+ OMX_VIDEO_MPEG2ProfileHigh, /**< High Profile */ -+ OMX_VIDEO_MPEG2ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_MPEG2ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_MPEG2ProfileMax = 0x7FFFFFFF -+} OMX_VIDEO_MPEG2PROFILETYPE; -+ -+ -+/** -+ * MPEG-2 level types, each level indicates support for various frame -+ * sizes, bit rates, decoder frame rates. No need -+ */ -+typedef enum OMX_VIDEO_MPEG2LEVELTYPE { -+ OMX_VIDEO_MPEG2LevelLL = 0, /**< Low Level */ -+ OMX_VIDEO_MPEG2LevelML, /**< Main Level */ -+ OMX_VIDEO_MPEG2LevelH14, /**< High 1440 */ -+ OMX_VIDEO_MPEG2LevelHL, /**< High Level */ -+ OMX_VIDEO_MPEG2LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_MPEG2LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_MPEG2LevelMax = 0x7FFFFFFF -+} OMX_VIDEO_MPEG2LEVELTYPE; -+ -+ -+/** -+ * MPEG-2 params -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nPFrames : Number of P frames between each I frame -+ * nBFrames : Number of B frames between each I frame -+ * eProfile : MPEG-2 profile(s) to use -+ * eLevel : MPEG-2 levels(s) to use -+ */ -+typedef struct OMX_VIDEO_PARAM_MPEG2TYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nPFrames; -+ OMX_U32 nBFrames; -+ OMX_VIDEO_MPEG2PROFILETYPE eProfile; -+ OMX_VIDEO_MPEG2LEVELTYPE eLevel; -+} OMX_VIDEO_PARAM_MPEG2TYPE; -+ -+ -+/** -+ * MPEG-4 profile types, each profile indicates support for various -+ * performance bounds and different annexes. -+ * -+ * ENUMS: -+ * - Simple Profile, Levels 1-3 -+ * - Simple Scalable Profile, Levels 1-2 -+ * - Core Profile, Levels 1-2 -+ * - Main Profile, Levels 2-4 -+ * - N-bit Profile, Level 2 -+ * - Scalable Texture Profile, Level 1 -+ * - Simple Face Animation Profile, Levels 1-2 -+ * - Simple Face and Body Animation (FBA) Profile, Levels 1-2 -+ * - Basic Animated Texture Profile, Levels 1-2 -+ * - Hybrid Profile, Levels 1-2 -+ * - Advanced Real Time Simple Profiles, Levels 1-4 -+ * - Core Scalable Profile, Levels 1-3 -+ * - Advanced Coding Efficiency Profile, Levels 1-4 -+ * - Advanced Core Profile, Levels 1-2 -+ * - Advanced Scalable Texture, Levels 2-3 -+ */ -+typedef enum OMX_VIDEO_MPEG4PROFILETYPE { -+ OMX_VIDEO_MPEG4ProfileSimple = 0x01, -+ OMX_VIDEO_MPEG4ProfileSimpleScalable = 0x02, -+ OMX_VIDEO_MPEG4ProfileCore = 0x04, -+ OMX_VIDEO_MPEG4ProfileMain = 0x08, -+ OMX_VIDEO_MPEG4ProfileNbit = 0x10, -+ OMX_VIDEO_MPEG4ProfileScalableTexture = 0x20, -+ OMX_VIDEO_MPEG4ProfileSimpleFace = 0x40, -+ OMX_VIDEO_MPEG4ProfileSimpleFBA = 0x80, -+ OMX_VIDEO_MPEG4ProfileBasicAnimated = 0x100, -+ OMX_VIDEO_MPEG4ProfileHybrid = 0x200, -+ OMX_VIDEO_MPEG4ProfileAdvancedRealTime = 0x400, -+ OMX_VIDEO_MPEG4ProfileCoreScalable = 0x800, -+ OMX_VIDEO_MPEG4ProfileAdvancedCoding = 0x1000, -+ OMX_VIDEO_MPEG4ProfileAdvancedCore = 0x2000, -+ OMX_VIDEO_MPEG4ProfileAdvancedScalable = 0x4000, -+ OMX_VIDEO_MPEG4ProfileAdvancedSimple = 0x8000, -+ OMX_VIDEO_MPEG4ProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_MPEG4ProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_MPEG4ProfileMax = 0x7FFFFFFF -+} OMX_VIDEO_MPEG4PROFILETYPE; -+ -+ -+/** -+ * MPEG-4 level types, each level indicates support for various frame -+ * sizes, bit rates, decoder frame rates. No need -+ */ -+typedef enum OMX_VIDEO_MPEG4LEVELTYPE { -+ OMX_VIDEO_MPEG4Level0 = 0x01, /**< Level 0 */ -+ OMX_VIDEO_MPEG4Level0b = 0x02, /**< Level 0b */ -+ OMX_VIDEO_MPEG4Level1 = 0x04, /**< Level 1 */ -+ OMX_VIDEO_MPEG4Level2 = 0x08, /**< Level 2 */ -+ OMX_VIDEO_MPEG4Level3 = 0x10, /**< Level 3 */ -+ OMX_VIDEO_MPEG4Level4 = 0x20, /**< Level 4 */ -+ OMX_VIDEO_MPEG4Level4a = 0x40, /**< Level 4a */ -+ OMX_VIDEO_MPEG4Level5 = 0x80, /**< Level 5 */ -+ OMX_VIDEO_MPEG4LevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_MPEG4LevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_MPEG4LevelMax = 0x7FFFFFFF -+} OMX_VIDEO_MPEG4LEVELTYPE; -+ -+ -+/** -+ * MPEG-4 configuration. This structure handles configuration options -+ * which are specific to MPEG4 algorithms -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nSliceHeaderSpacing : Number of macroblocks between slice header (H263+ -+ * Annex K). Put zero if not used -+ * bSVH : Enable Short Video Header mode -+ * bGov : Flag to enable GOV -+ * nPFrames : Number of P frames between each I frame (also called -+ * GOV period) -+ * nBFrames : Number of B frames between each I frame -+ * nIDCVLCThreshold : Value of intra DC VLC threshold -+ * bACPred : Flag to use ac prediction -+ * nMaxPacketSize : Maximum size of packet in bytes. -+ * nTimeIncRes : Used to pass VOP time increment resolution for MPEG4. -+ * Interpreted as described in MPEG4 standard. -+ * eProfile : MPEG-4 profile(s) to use. -+ * eLevel : MPEG-4 level(s) to use. -+ * nAllowedPictureTypes : Specifies the picture types allowed in the bitstream -+ * nHeaderExtension : Specifies the number of consecutive video packet -+ * headers within a VOP -+ * bReversibleVLC : Specifies whether reversible variable length coding -+ * is in use -+ */ -+typedef struct OMX_VIDEO_PARAM_MPEG4TYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nSliceHeaderSpacing; -+ OMX_BOOL bSVH; -+ OMX_BOOL bGov; -+ OMX_U32 nPFrames; -+ OMX_U32 nBFrames; -+ OMX_U32 nIDCVLCThreshold; -+ OMX_BOOL bACPred; -+ OMX_U32 nMaxPacketSize; -+ OMX_U32 nTimeIncRes; -+ OMX_VIDEO_MPEG4PROFILETYPE eProfile; -+ OMX_VIDEO_MPEG4LEVELTYPE eLevel; -+ OMX_U32 nAllowedPictureTypes; -+ OMX_U32 nHeaderExtension; -+ OMX_BOOL bReversibleVLC; -+} OMX_VIDEO_PARAM_MPEG4TYPE; -+ -+ -+/** -+ * WMV Versions -+ */ -+typedef enum OMX_VIDEO_WMVFORMATTYPE { -+ OMX_VIDEO_WMVFormatUnused = 0x01, /**< Format unused or unknown */ -+ OMX_VIDEO_WMVFormat7 = 0x02, /**< Windows Media Video format 7 */ -+ OMX_VIDEO_WMVFormat8 = 0x04, /**< Windows Media Video format 8 */ -+ OMX_VIDEO_WMVFormat9 = 0x08, /**< Windows Media Video format 9 */ -+ OMX_VIDEO_WMFFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_WMFFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_WMVFormatMax = 0x7FFFFFFF -+} OMX_VIDEO_WMVFORMATTYPE; -+ -+ -+/** -+ * WMV Params -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eFormat : Version of WMV stream / data -+ */ -+typedef struct OMX_VIDEO_PARAM_WMVTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_WMVFORMATTYPE eFormat; -+} OMX_VIDEO_PARAM_WMVTYPE; -+ -+ -+/** -+ * Real Video Version -+ */ -+typedef enum OMX_VIDEO_RVFORMATTYPE { -+ OMX_VIDEO_RVFormatUnused = 0, /**< Format unused or unknown */ -+ OMX_VIDEO_RVFormat8, /**< Real Video format 8 */ -+ OMX_VIDEO_RVFormat9, /**< Real Video format 9 */ -+ OMX_VIDEO_RVFormatG2, /**< Real Video Format G2 */ -+ OMX_VIDEO_RVFormatKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_RVFormatVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_RVFormatMax = 0x7FFFFFFF -+} OMX_VIDEO_RVFORMATTYPE; -+ -+ -+/** -+ * Real Video Params -+ * -+ * STUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * eFormat : Version of RV stream / data -+ * nBitsPerPixel : Bits per pixel coded in the frame -+ * nPaddedWidth : Padded width in pixel of a video frame -+ * nPaddedHeight : Padded Height in pixels of a video frame -+ * nFrameRate : Rate of video in frames per second -+ * nBitstreamFlags : Flags which internal information about the bitstream -+ * nBitstreamVersion : Bitstream version -+ * nMaxEncodeFrameSize: Max encoded frame size -+ * bEnablePostFilter : Turn on/off post filter -+ * bEnableTemporalInterpolation : Turn on/off temporal interpolation -+ * bEnableLatencyMode : When enabled, the decoder does not display a decoded -+ * frame until it has detected that no enhancement layer -+ * frames or dependent B frames will be coming. This -+ * detection usually occurs when a subsequent non-B -+ * frame is encountered -+ */ -+typedef struct OMX_VIDEO_PARAM_RVTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_RVFORMATTYPE eFormat; -+ OMX_U16 nBitsPerPixel; -+ OMX_U16 nPaddedWidth; -+ OMX_U16 nPaddedHeight; -+ OMX_U32 nFrameRate; -+ OMX_U32 nBitstreamFlags; -+ OMX_U32 nBitstreamVersion; -+ OMX_U32 nMaxEncodeFrameSize; -+ OMX_BOOL bEnablePostFilter; -+ OMX_BOOL bEnableTemporalInterpolation; -+ OMX_BOOL bEnableLatencyMode; -+} OMX_VIDEO_PARAM_RVTYPE; -+ -+ -+/** -+ * AVC profile types, each profile indicates support for various -+ * performance bounds and different annexes. -+ */ -+typedef enum OMX_VIDEO_AVCPROFILETYPE { -+ OMX_VIDEO_AVCProfileBaseline = 0x01, /**< Baseline profile */ -+ OMX_VIDEO_AVCProfileMain = 0x02, /**< Main profile */ -+ OMX_VIDEO_AVCProfileExtended = 0x04, /**< Extended profile */ -+ OMX_VIDEO_AVCProfileHigh = 0x08, /**< High profile */ -+ OMX_VIDEO_AVCProfileHigh10 = 0x10, /**< High 10 profile */ -+ OMX_VIDEO_AVCProfileHigh422 = 0x20, /**< High 4:2:2 profile */ -+ OMX_VIDEO_AVCProfileHigh444 = 0x40, /**< High 4:4:4 profile */ -+ OMX_VIDEO_AVCProfileKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_AVCProfileVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_AVCProfileMax = 0x7FFFFFFF -+} OMX_VIDEO_AVCPROFILETYPE; -+ -+ -+/** -+ * AVC level types, each level indicates support for various frame sizes, -+ * bit rates, decoder frame rates. No need -+ */ -+typedef enum OMX_VIDEO_AVCLEVELTYPE { -+ OMX_VIDEO_AVCLevel1 = 0x01, /**< Level 1 */ -+ OMX_VIDEO_AVCLevel1b = 0x02, /**< Level 1b */ -+ OMX_VIDEO_AVCLevel11 = 0x04, /**< Level 1.1 */ -+ OMX_VIDEO_AVCLevel12 = 0x08, /**< Level 1.2 */ -+ OMX_VIDEO_AVCLevel13 = 0x10, /**< Level 1.3 */ -+ OMX_VIDEO_AVCLevel2 = 0x20, /**< Level 2 */ -+ OMX_VIDEO_AVCLevel21 = 0x40, /**< Level 2.1 */ -+ OMX_VIDEO_AVCLevel22 = 0x80, /**< Level 2.2 */ -+ OMX_VIDEO_AVCLevel3 = 0x100, /**< Level 3 */ -+ OMX_VIDEO_AVCLevel31 = 0x200, /**< Level 3.1 */ -+ OMX_VIDEO_AVCLevel32 = 0x400, /**< Level 3.2 */ -+ OMX_VIDEO_AVCLevel4 = 0x800, /**< Level 4 */ -+ OMX_VIDEO_AVCLevel41 = 0x1000, /**< Level 4.1 */ -+ OMX_VIDEO_AVCLevel42 = 0x2000, /**< Level 4.2 */ -+ OMX_VIDEO_AVCLevel5 = 0x4000, /**< Level 5 */ -+ OMX_VIDEO_AVCLevel51 = 0x8000, /**< Level 5.1 */ -+ OMX_VIDEO_AVCLevel52 = 0x10000, /**< Level 5.2 */ -+ OMX_VIDEO_AVCLevelKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_AVCLevelVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_AVCLevelMax = 0x7FFFFFFF -+} OMX_VIDEO_AVCLEVELTYPE; -+ -+ -+/** -+ * AVC loop filter modes -+ * -+ * OMX_VIDEO_AVCLoopFilterEnable : Enable -+ * OMX_VIDEO_AVCLoopFilterDisable : Disable -+ * OMX_VIDEO_AVCLoopFilterDisableSliceBoundary : Disabled on slice boundaries -+ */ -+typedef enum OMX_VIDEO_AVCLOOPFILTERTYPE { -+ OMX_VIDEO_AVCLoopFilterEnable = 0, -+ OMX_VIDEO_AVCLoopFilterDisable, -+ OMX_VIDEO_AVCLoopFilterDisableSliceBoundary, -+ OMX_VIDEO_AVCLoopFilterKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_AVCLoopFilterVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_AVCLoopFilterMax = 0x7FFFFFFF -+} OMX_VIDEO_AVCLOOPFILTERTYPE; -+ -+ -+/** -+ * AVC params -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nSliceHeaderSpacing : Number of macroblocks between slice header, put -+ * zero if not used -+ * nPFrames : Number of P frames between each I frame -+ * nBFrames : Number of B frames between each I frame -+ * bUseHadamard : Enable/disable Hadamard transform -+ * nRefFrames : Max number of reference frames to use for inter -+ * motion search (1-16) -+ * nRefIdxTrailing : Pic param set ref frame index (index into ref -+ * frame buffer of trailing frames list), B frame -+ * support -+ * nRefIdxForward : Pic param set ref frame index (index into ref -+ * frame buffer of forward frames list), B frame -+ * support -+ * bEnableUEP : Enable/disable unequal error protection. This -+ * is only valid of data partitioning is enabled. -+ * bEnableFMO : Enable/disable flexible macroblock ordering -+ * bEnableASO : Enable/disable arbitrary slice ordering -+ * bEnableRS : Enable/disable sending of redundant slices -+ * eProfile : AVC profile(s) to use -+ * eLevel : AVC level(s) to use -+ * nAllowedPictureTypes : Specifies the picture types allowed in the -+ * bitstream -+ * bFrameMBsOnly : specifies that every coded picture of the -+ * coded video sequence is a coded frame -+ * containing only frame macroblocks -+ * bMBAFF : Enable/disable switching between frame and -+ * field macroblocks within a picture -+ * bEntropyCodingCABAC : Entropy decoding method to be applied for the -+ * syntax elements for which two descriptors appear -+ * in the syntax tables -+ * bWeightedPPrediction : Enable/disable weighted prediction shall not -+ * be applied to P and SP slices -+ * nWeightedBipredicitonMode : Default weighted prediction is applied to B -+ * slices -+ * bconstIpred : Enable/disable intra prediction -+ * bDirect8x8Inference : Specifies the method used in the derivation -+ * process for luma motion vectors for B_Skip, -+ * B_Direct_16x16 and B_Direct_8x8 as specified -+ * in subclause 8.4.1.2 of the AVC spec -+ * bDirectSpatialTemporal : Flag indicating spatial or temporal direct -+ * mode used in B slice coding (related to -+ * bDirect8x8Inference) . Spatial direct mode is -+ * more common and should be the default. -+ * nCabacInitIdx : Index used to init CABAC contexts -+ * eLoopFilterMode : Enable/disable loop filter -+ */ -+typedef struct OMX_VIDEO_PARAM_AVCTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nSliceHeaderSpacing; -+ OMX_U32 nPFrames; -+ OMX_U32 nBFrames; -+ OMX_BOOL bUseHadamard; -+ OMX_U32 nRefFrames; -+ OMX_U32 nRefIdx10ActiveMinus1; -+ OMX_U32 nRefIdx11ActiveMinus1; -+ OMX_BOOL bEnableUEP; -+ OMX_BOOL bEnableFMO; -+ OMX_BOOL bEnableASO; -+ OMX_BOOL bEnableRS; -+ OMX_VIDEO_AVCPROFILETYPE eProfile; -+ OMX_VIDEO_AVCLEVELTYPE eLevel; -+ OMX_U32 nAllowedPictureTypes; -+ OMX_BOOL bFrameMBsOnly; -+ OMX_BOOL bMBAFF; -+ OMX_BOOL bEntropyCodingCABAC; -+ OMX_BOOL bWeightedPPrediction; -+ OMX_U32 nWeightedBipredicitonMode; -+ OMX_BOOL bconstIpred ; -+ OMX_BOOL bDirect8x8Inference; -+ OMX_BOOL bDirectSpatialTemporal; -+ OMX_U32 nCabacInitIdc; -+ OMX_VIDEO_AVCLOOPFILTERTYPE eLoopFilterMode; -+} OMX_VIDEO_PARAM_AVCTYPE; -+ -+typedef struct OMX_VIDEO_PARAM_PROFILELEVELTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 eProfile; /**< type is OMX_VIDEO_AVCPROFILETYPE, OMX_VIDEO_H263PROFILETYPE, -+ or OMX_VIDEO_MPEG4PROFILETYPE depending on context */ -+ OMX_U32 eLevel; /**< type is OMX_VIDEO_AVCLEVELTYPE, OMX_VIDEO_H263LEVELTYPE, -+ or OMX_VIDEO_MPEG4PROFILETYPE depending on context */ -+ OMX_U32 nProfileIndex; /**< Used to query for individual profile support information, -+ This parameter is valid only for -+ OMX_IndexParamVideoProfileLevelQuerySupported index, -+ For all other indices this parameter is to be ignored. */ -+} OMX_VIDEO_PARAM_PROFILELEVELTYPE; -+ -+/** -+ * Structure for dynamically configuring bitrate mode of a codec. -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the struct in bytes -+ * nVersion : OMX spec version info -+ * nPortIndex : Port that this struct applies to -+ * nEncodeBitrate : Target average bitrate to be generated in bps -+ */ -+typedef struct OMX_VIDEO_CONFIG_BITRATETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nEncodeBitrate; -+} OMX_VIDEO_CONFIG_BITRATETYPE; -+ -+/** -+ * Defines Encoder Frame Rate setting -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * xEncodeFramerate : Encoding framerate represented in Q16 format -+ */ -+typedef struct OMX_CONFIG_FRAMERATETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 xEncodeFramerate; /* Q16 format */ -+} OMX_CONFIG_FRAMERATETYPE; -+ -+typedef struct OMX_CONFIG_INTRAREFRESHVOPTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL IntraRefreshVOP; -+} OMX_CONFIG_INTRAREFRESHVOPTYPE; -+ -+typedef struct OMX_CONFIG_MACROBLOCKERRORMAPTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nErrMapSize; /* Size of the Error Map in bytes */ -+ OMX_U8 ErrMap[1]; /* Error map hint */ -+} OMX_CONFIG_MACROBLOCKERRORMAPTYPE; -+ -+typedef struct OMX_CONFIG_MBERRORREPORTINGTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bEnabled; -+} OMX_CONFIG_MBERRORREPORTINGTYPE; -+ -+typedef struct OMX_PARAM_MACROBLOCKSTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nMacroblocks; -+} OMX_PARAM_MACROBLOCKSTYPE; -+ -+ -+#ifdef AVS80 -+/** -+ * Aspects of color. -+ */ -+ -+// NOTE: this structure is expected to grow in the future if new color aspects are -+// added to codec bitstreams. OMX component should not require a specific nSize -+// though could verify that nSize is at least the size of the structure at the -+// time of implementation. All new fields will be added at the end of the structure -+// ensuring backward compatibility. -+ -+typedef enum OMX_RANGE { -+ RangeUnspecified, -+ RangeFull, -+ RangeLimited, -+ RangeOther = 0xff, -+} OMX_RANGE; -+ -+typedef enum OMX_PRIMARIES { -+ PrimariesUnspecified, -+ PrimariesBT709_5, // Rec.ITU-R BT.709-5 or equivalent -+ PrimariesBT470_6M, // Rec.ITU-R BT.470-6 System M or equivalent -+ PrimariesBT601_6_625, // Rec.ITU-R BT.601-6 625 or equivalent -+ PrimariesBT601_6_525, // Rec.ITU-R BT.601-6 525 or equivalent -+ PrimariesGenericFilm, // Generic Film -+ PrimariesBT2020, // Rec.ITU-R BT.2020 or equivalent -+ PrimariesOther = 0xff, -+} OMX_PRIMARIES; -+ -+typedef enum OMX_TRANSFER { -+ TransferUnspecified, -+ TransferLinear, // Linear transfer characteristics -+ TransferSRGB, // sRGB or equivalent -+ TransferSMPTE170M, // SMPTE 170M or equivalent (e.g. BT.601/709/2020) -+ TransferGamma22, // Assumed display gamma 2.2 -+ TransferGamma28, // Assumed display gamma 2.8 -+ TransferST2084, // SMPTE ST 2084 for 10/12/14/16 bit systems -+ TransferHLG, // ARIB STD-B67 hybrid-log-gamma -+ // transfers unlikely to be required by Android -+ TransferSMPTE240M = 0x40, // SMPTE 240M -+ TransferXvYCC, // IEC 61966-2-4 -+ TransferBT1361, // Rec.ITU-R BT.1361 extended gamut -+ TransferST428, // SMPTE ST 428-1 -+ TransferOther = 0xff, -+} OMX_TRANSFER; -+ -+typedef enum OMX_MATRIXCOEFFS { -+ MatrixUnspecified, -+ MatrixBT709_5, // Rec.ITU-R BT.709-5 or equivalent -+ MatrixBT470_6M, // KR=0.30, KB=0.11 or equivalent -+ MatrixBT601_6, // Rec.ITU-R BT.601-6 625 or equivalent -+ MatrixSMPTE240M, // SMPTE 240M or equivalent -+ MatrixBT2020, // Rec.ITU-R BT.2020 non-constant luminance -+ MatrixBT2020Constant, // Rec.ITU-R BT.2020 constant luminance -+ MatrixOther = 0xff, -+} OMX_MATRIXCOEFFS; -+ -+typedef struct OMX_COLORASPECTS { -+ OMX_RANGE mRange; // IN/OUT -+ OMX_PRIMARIES mPrimaries; // IN/OUT -+ OMX_TRANSFER mTransfer; // IN/OUT -+ OMX_MATRIXCOEFFS mMatrixCoeffs; // IN/OUT -+} OMX_COLORASPECTS; -+ -+typedef struct OMX_CONFIG_DESCRIBECOLORASPECTSPARAMS { -+ OMX_U32 nSize; // IN -+ OMX_VERSIONTYPE nVersion; // IN -+ OMX_U32 nPortIndex; // IN -+ OMX_BOOL bRequestingDataSpace; // IN -+ OMX_BOOL bDataSpaceChanged; // IN -+ OMX_U32 nPixelFormat; // IN -+ OMX_U32 nDataSpace; // OUT -+ OMX_COLORASPECTS sAspects; // IN/OUT -+} OMX_CONFIG_DESCRIBECOLORASPECTSPARAMS; -+#endif -+ -+/** -+ * AVC Slice Mode modes -+ * -+ * OMX_VIDEO_SLICEMODE_AVCDefault : Normal frame encoding, one slice per frame -+ * OMX_VIDEO_SLICEMODE_AVCMBSlice : NAL mode, number of MBs per frame -+ * OMX_VIDEO_SLICEMODE_AVCByteSlice : NAL mode, number of bytes per frame -+ */ -+typedef enum OMX_VIDEO_AVCSLICEMODETYPE { -+ OMX_VIDEO_SLICEMODE_AVCDefault = 0, -+ OMX_VIDEO_SLICEMODE_AVCMBSlice, -+ OMX_VIDEO_SLICEMODE_AVCByteSlice, -+ OMX_VIDEO_SLICEMODE_AVCKhronosExtensions = 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */ -+ OMX_VIDEO_SLICEMODE_AVCVendorStartUnused = 0x7F000000, /**< Reserved region for introducing Vendor Extensions */ -+ OMX_VIDEO_SLICEMODE_AVCLevelMax = 0x7FFFFFFF -+} OMX_VIDEO_AVCSLICEMODETYPE; -+ -+/** -+ * AVC FMO Slice Mode Params -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nNumSliceGroups : Specifies the number of slice groups -+ * nSliceGroupMapType : Specifies the type of slice groups -+ * eSliceMode : Specifies the type of slice -+ */ -+typedef struct OMX_VIDEO_PARAM_AVCSLICEFMO { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U8 nNumSliceGroups; -+ OMX_U8 nSliceGroupMapType; -+ OMX_VIDEO_AVCSLICEMODETYPE eSliceMode; -+} OMX_VIDEO_PARAM_AVCSLICEFMO; -+ -+/** -+ * AVC IDR Period Configs -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nIDRPeriod : Specifies periodicity of IDR frames -+ * nPFrames : Specifies internal of coding Intra frames -+ */ -+typedef struct OMX_VIDEO_CONFIG_AVCINTRAPERIOD { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nIDRPeriod; -+ OMX_U32 nPFrames; -+} OMX_VIDEO_CONFIG_AVCINTRAPERIOD; -+ -+/** -+ * AVC NAL Size Configs -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nNaluBytes : Specifies the NAL unit size -+ */ -+typedef struct OMX_VIDEO_CONFIG_NALSIZE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nNaluBytes; -+} OMX_VIDEO_CONFIG_NALSIZE; -+ -+/** @} */ -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif -+/* File EOF */ -+ -diff --git a/encoder/include/khronos/OMX_VideoExt.h b/encoder/include/khronos/OMX_VideoExt.h -new file mode 100755 -index 0000000..2c02431 ---- /dev/null -+++ b/encoder/include/khronos/OMX_VideoExt.h -@@ -0,0 +1,401 @@ -+/* -+ * Copyright (c) 2010 The Khronos Group Inc. -+ * -+ * Permission is hereby granted, free of charge, to any person obtaining -+ * a copy of this software and associated documentation files (the -+ * "Software"), to deal in the Software without restriction, including -+ * without limitation the rights to use, copy, modify, merge, publish, -+ * distribute, sublicense, and/or sell copies of the Software, and to -+ * permit persons to whom the Software is furnished to do so, subject -+ * to the following conditions: -+ * The above copyright notice and this permission notice shall be included -+ * in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -+ * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -+ * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -+ * -+ */ -+ -+/** OMX_VideoExt.h - OpenMax IL version 1.1.2 -+ * The OMX_VideoExt header file contains extensions to the -+ * definitions used by both the application and the component to -+ * access video items. -+ */ -+ -+#ifndef OMX_VideoExt_h -+#define OMX_VideoExt_h -+ -+#ifdef __cplusplus -+extern "C" { -+#endif /* __cplusplus */ -+ -+/* Each OMX header shall include all required header files to allow the -+ * header to compile without errors. The includes below are required -+ * for this header file to compile successfully -+ */ -+#include -+ -+/** NALU Formats */ -+typedef enum OMX_NALUFORMATSTYPE { -+ OMX_NaluFormatStartCodes = 1, -+ OMX_NaluFormatOneNaluPerBuffer = 2, -+ OMX_NaluFormatOneByteInterleaveLength = 4, -+ OMX_NaluFormatTwoByteInterleaveLength = 8, -+ OMX_NaluFormatFourByteInterleaveLength = 16, -+ OMX_NaluFormatCodingMax = 0x7FFFFFFF -+} OMX_NALUFORMATSTYPE; -+ -+/** NAL Stream Format */ -+typedef struct OMX_NALSTREAMFORMATTYPE{ -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_NALUFORMATSTYPE eNaluFormat; -+} OMX_NALSTREAMFORMATTYPE; -+ -+/** VP8 profiles */ -+typedef enum OMX_VIDEO_VP8PROFILETYPE { -+ OMX_VIDEO_VP8ProfileMain = 0x01, -+ OMX_VIDEO_VP8ProfileUnknown = 0x6EFFFFFF, -+ OMX_VIDEO_VP8ProfileMax = 0x7FFFFFFF -+} OMX_VIDEO_VP8PROFILETYPE; -+ -+/** VP8 levels */ -+typedef enum OMX_VIDEO_VP8LEVELTYPE { -+ OMX_VIDEO_VP8Level_Version0 = 0x01, -+ OMX_VIDEO_VP8Level_Version1 = 0x02, -+ OMX_VIDEO_VP8Level_Version2 = 0x04, -+ OMX_VIDEO_VP8Level_Version3 = 0x08, -+ OMX_VIDEO_VP8LevelUnknown = 0x6EFFFFFF, -+ OMX_VIDEO_VP8LevelMax = 0x7FFFFFFF -+} OMX_VIDEO_VP8LEVELTYPE; -+ -+/** VP9 profiles */ -+typedef enum OMX_VIDEO_VP9PROFILETYPE { -+ OMX_VIDEO_VP9Profile0 = 0x1, -+ OMX_VIDEO_VP9Profile1 = 0x2, -+ OMX_VIDEO_VP9Profile2 = 0x4, -+ OMX_VIDEO_VP9Profile3 = 0x8, -+ // HDR profiles also support passing HDR metadata -+ OMX_VIDEO_VP9Profile2HDR = 0x1000, -+ OMX_VIDEO_VP9Profile3HDR = 0x2000, -+ OMX_VIDEO_VP9ProfileUnknown = 0x6EFFFFFF, -+ OMX_VIDEO_VP9ProfileMax = 0x7FFFFFFF -+} OMX_VIDEO_VP9PROFILETYPE; -+ -+/** VP9 levels */ -+typedef enum OMX_VIDEO_VP9LEVELTYPE { -+ OMX_VIDEO_VP9Level1 = 0x1, -+ OMX_VIDEO_VP9Level11 = 0x2, -+ OMX_VIDEO_VP9Level2 = 0x4, -+ OMX_VIDEO_VP9Level21 = 0x8, -+ OMX_VIDEO_VP9Level3 = 0x10, -+ OMX_VIDEO_VP9Level31 = 0x20, -+ OMX_VIDEO_VP9Level4 = 0x40, -+ OMX_VIDEO_VP9Level41 = 0x80, -+ OMX_VIDEO_VP9Level5 = 0x100, -+ OMX_VIDEO_VP9Level51 = 0x200, -+ OMX_VIDEO_VP9Level52 = 0x400, -+ OMX_VIDEO_VP9Level6 = 0x800, -+ OMX_VIDEO_VP9Level61 = 0x1000, -+ OMX_VIDEO_VP9Level62 = 0x2000, -+ OMX_VIDEO_VP9LevelUnknown = 0x6EFFFFFF, -+ OMX_VIDEO_VP9LevelMax = 0x7FFFFFFF -+} OMX_VIDEO_VP9LEVELTYPE; -+ -+/** VP8 Param */ -+typedef struct OMX_VIDEO_PARAM_VP8TYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_VP8PROFILETYPE eProfile; -+ OMX_VIDEO_VP8LEVELTYPE eLevel; -+ OMX_U32 nDCTPartitions; -+ OMX_BOOL bErrorResilientMode; -+} OMX_VIDEO_PARAM_VP8TYPE; -+ -+/** Structure for configuring VP8 reference frames */ -+typedef struct OMX_VIDEO_VP8REFERENCEFRAMETYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bPreviousFrameRefresh; -+ OMX_BOOL bGoldenFrameRefresh; -+ OMX_BOOL bAlternateFrameRefresh; -+ OMX_BOOL bUsePreviousFrame; -+ OMX_BOOL bUseGoldenFrame; -+ OMX_BOOL bUseAlternateFrame; -+} OMX_VIDEO_VP8REFERENCEFRAMETYPE; -+ -+/** Structure for querying VP8 reference frame type */ -+typedef struct OMX_VIDEO_VP8REFERENCEFRAMEINFOTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bIsIntraFrame; -+ OMX_BOOL bIsGoldenOrAlternateFrame; -+} OMX_VIDEO_VP8REFERENCEFRAMEINFOTYPE; -+ -+/** Maximum number of VP8 temporal layers */ -+#define OMX_VIDEO_ANDROID_MAXVP8TEMPORALLAYERS 3 -+ -+/** VP8 temporal layer patterns */ -+typedef enum OMX_VIDEO_ANDROID_VPXTEMPORALLAYERPATTERNTYPE { -+ OMX_VIDEO_VPXTemporalLayerPatternNone = 0, -+ OMX_VIDEO_VPXTemporalLayerPatternWebRTC = 1, -+ OMX_VIDEO_VPXTemporalLayerPatternMax = 0x7FFFFFFF -+} OMX_VIDEO_ANDROID_VPXTEMPORALLAYERPATTERNTYPE; -+ -+/** -+ * Android specific VP8 encoder params -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nKeyFrameInterval : Key frame interval in frames -+ * eTemporalPattern : Type of temporal layer pattern -+ * nTemporalLayerCount : Number of temporal coding layers -+ * nTemporalLayerBitrateRatio : Bitrate ratio allocation between temporal -+ * streams in percentage -+ * nMinQuantizer : Minimum (best quality) quantizer -+ * nMaxQuantizer : Maximum (worst quality) quantizer -+ */ -+typedef struct OMX_VIDEO_PARAM_ANDROID_VP8ENCODERTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nKeyFrameInterval; // distance between consecutive key_frames (including one -+ // of the key_frames). 0 means interval is unspecified and -+ // can be freely chosen by the codec. 1 means a stream of -+ // only key_frames. -+ -+ OMX_VIDEO_ANDROID_VPXTEMPORALLAYERPATTERNTYPE eTemporalPattern; -+ OMX_U32 nTemporalLayerCount; -+ OMX_U32 nTemporalLayerBitrateRatio[OMX_VIDEO_ANDROID_MAXVP8TEMPORALLAYERS]; -+ OMX_U32 nMinQuantizer; -+ OMX_U32 nMaxQuantizer; -+} OMX_VIDEO_PARAM_ANDROID_VP8ENCODERTYPE; -+ -+/** HEVC Profile enum type */ -+typedef enum OMX_VIDEO_HEVCPROFILETYPE { -+ OMX_VIDEO_HEVCProfileUnknown = 0x0, -+ OMX_VIDEO_HEVCProfileMain = 0x1, -+ OMX_VIDEO_HEVCProfileMain10 = 0x2, -+ // Main10 profile with HDR SEI support. -+ OMX_VIDEO_HEVCProfileMain10HDR10 = 0x1000, -+ OMX_VIDEO_HEVCProfileMax = 0x7FFFFFFF -+} OMX_VIDEO_HEVCPROFILETYPE; -+ -+/** HEVC Level enum type */ -+typedef enum OMX_VIDEO_HEVCLEVELTYPE { -+ OMX_VIDEO_HEVCLevelUnknown = 0x0, -+ OMX_VIDEO_HEVCMainTierLevel1 = 0x1, -+ OMX_VIDEO_HEVCHighTierLevel1 = 0x2, -+ OMX_VIDEO_HEVCMainTierLevel2 = 0x4, -+ OMX_VIDEO_HEVCHighTierLevel2 = 0x8, -+ OMX_VIDEO_HEVCMainTierLevel21 = 0x10, -+ OMX_VIDEO_HEVCHighTierLevel21 = 0x20, -+ OMX_VIDEO_HEVCMainTierLevel3 = 0x40, -+ OMX_VIDEO_HEVCHighTierLevel3 = 0x80, -+ OMX_VIDEO_HEVCMainTierLevel31 = 0x100, -+ OMX_VIDEO_HEVCHighTierLevel31 = 0x200, -+ OMX_VIDEO_HEVCMainTierLevel4 = 0x400, -+ OMX_VIDEO_HEVCHighTierLevel4 = 0x800, -+ OMX_VIDEO_HEVCMainTierLevel41 = 0x1000, -+ OMX_VIDEO_HEVCHighTierLevel41 = 0x2000, -+ OMX_VIDEO_HEVCMainTierLevel5 = 0x4000, -+ OMX_VIDEO_HEVCHighTierLevel5 = 0x8000, -+ OMX_VIDEO_HEVCMainTierLevel51 = 0x10000, -+ OMX_VIDEO_HEVCHighTierLevel51 = 0x20000, -+ OMX_VIDEO_HEVCMainTierLevel52 = 0x40000, -+ OMX_VIDEO_HEVCHighTierLevel52 = 0x80000, -+ OMX_VIDEO_HEVCMainTierLevel6 = 0x100000, -+ OMX_VIDEO_HEVCHighTierLevel6 = 0x200000, -+ OMX_VIDEO_HEVCMainTierLevel61 = 0x400000, -+ OMX_VIDEO_HEVCHighTierLevel61 = 0x800000, -+ OMX_VIDEO_HEVCMainTierLevel62 = 0x1000000, -+ OMX_VIDEO_HEVCHighTierLevel62 = 0x2000000, -+ OMX_VIDEO_HEVCHighTiermax = 0x7FFFFFFF -+} OMX_VIDEO_HEVCLEVELTYPE; -+ -+/** Structure for controlling HEVC video encoding */ -+typedef struct OMX_VIDEO_PARAM_HEVCTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_HEVCPROFILETYPE eProfile; -+ OMX_VIDEO_HEVCLEVELTYPE eLevel; -+ OMX_U32 nKeyFrameInterval; // distance between consecutive I-frames (including one -+ // of the I frames). 0 means interval is unspecified and -+ // can be freely chosen by the codec. 1 means a stream of -+ // only I frames. -+} OMX_VIDEO_PARAM_HEVCTYPE; -+ -+/** Structure to define if dependent slice segments should be used */ -+typedef struct OMX_VIDEO_SLICESEGMENTSTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_BOOL bDepedentSegments; -+ OMX_BOOL bEnableLoopFilterAcrossSlices; -+} OMX_VIDEO_SLICESEGMENTSTYPE; -+ -+/** Structure to return timestamps of rendered output frames as well as EOS -+ * for tunneled components. -+ */ -+typedef struct OMX_VIDEO_RENDEREVENTTYPE { -+ OMX_S64 nMediaTimeUs; // timestamp of rendered video frame -+ OMX_S64 nSystemTimeNs; // system monotonic time at the time frame was rendered -+ // Use INT64_MAX for nMediaTimeUs to signal that the EOS -+ // has been reached. In this case, nSystemTimeNs MUST be -+ // the system time when the last frame was rendered. -+ // This MUST be done in addition to returning (and -+ // following) the render information for the last frame. -+} OMX_VIDEO_RENDEREVENTTYPE; -+ -+/** Dolby Vision Profile enum type */ -+typedef enum OMX_VIDEO_DOLBYVISIONPROFILETYPE { -+ OMX_VIDEO_DolbyVisionProfileUnknown = 0x0, -+ OMX_VIDEO_DolbyVisionProfileDvavPer = 0x1, -+ OMX_VIDEO_DolbyVisionProfileDvavPen = 0x2, -+ OMX_VIDEO_DolbyVisionProfileDvheDer = 0x4, -+ OMX_VIDEO_DolbyVisionProfileDvheDen = 0x8, -+ OMX_VIDEO_DolbyVisionProfileDvheDtr = 0x10, -+ OMX_VIDEO_DolbyVisionProfileDvheStn = 0x20, -+ OMX_VIDEO_DolbyVisionProfileDvheDth = 0x40, -+ OMX_VIDEO_DolbyVisionProfileDvheDtb = 0x80, -+ OMX_VIDEO_DolbyVisionProfileMax = 0x7FFFFFFF -+} OMX_VIDEO_DOLBYVISIONPROFILETYPE; -+ -+/** Dolby Vision Level enum type */ -+typedef enum OMX_VIDEO_DOLBYVISIONLEVELTYPE { -+ OMX_VIDEO_DolbyVisionLevelUnknown = 0x0, -+ OMX_VIDEO_DolbyVisionLevelHd24 = 0x1, -+ OMX_VIDEO_DolbyVisionLevelHd30 = 0x2, -+ OMX_VIDEO_DolbyVisionLevelFhd24 = 0x4, -+ OMX_VIDEO_DolbyVisionLevelFhd30 = 0x8, -+ OMX_VIDEO_DolbyVisionLevelFhd60 = 0x10, -+ OMX_VIDEO_DolbyVisionLevelUhd24 = 0x20, -+ OMX_VIDEO_DolbyVisionLevelUhd30 = 0x40, -+ OMX_VIDEO_DolbyVisionLevelUhd48 = 0x80, -+ OMX_VIDEO_DolbyVisionLevelUhd60 = 0x100, -+ OMX_VIDEO_DolbyVisionLevelmax = 0x7FFFFFFF -+} OMX_VIDEO_DOLBYVISIONLEVELTYPE; -+ -+/** -+ * Structure for configuring video compression intra refresh period -+ * -+ * STRUCT MEMBERS: -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to -+ * nRefreshPeriod : Intra refreh period in frames. Value 0 means disable intra refresh -+ */ -+typedef struct OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_U32 nRefreshPeriod; -+} OMX_VIDEO_CONFIG_ANDROID_INTRAREFRESHTYPE; -+ -+/** Maximum number of temporal layers supported by AVC/HEVC */ -+#define OMX_VIDEO_ANDROID_MAXTEMPORALLAYERS 8 -+ -+/** temporal layer patterns */ -+typedef enum OMX_VIDEO_ANDROID_TEMPORALLAYERINGPATTERNTYPE { -+ OMX_VIDEO_AndroidTemporalLayeringPatternNone = 0, -+ // pattern as defined by WebRTC -+ OMX_VIDEO_AndroidTemporalLayeringPatternWebRTC = 1 << 0, -+ // pattern where frames in any layer other than the base layer only depend on at most the very -+ // last frame from each preceding layer (other than the base layer.) -+ OMX_VIDEO_AndroidTemporalLayeringPatternAndroid = 1 << 1, -+} OMX_VIDEO_ANDROID_TEMPORALLAYERINGPATTERNTYPE; -+ -+/** -+ * Android specific param for configuration of temporal layering. -+ * Android only supports temporal layering where successive layers each double the -+ * previous layer's framerate. -+ * NOTE: Reading this parameter at run-time SHALL return actual run-time values. -+ * -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to (output port for encoders) -+ * eSupportedPatterns : A bitmask of supported layering patterns -+ * nLayerCountMax : Max number of temporal coding layers supported -+ * by the encoder (must be at least 1, 1 meaning temporal layering -+ * is NOT supported) -+ * nBLayerCountMax : Max number of layers that can contain B frames -+ * (0) to (nLayerCountMax - 1) -+ * ePattern : Layering pattern. -+ * nPLayerCountActual : Number of temporal layers to be coded with non-B frames, -+ * starting from and including the base-layer. -+ * (1 to nLayerCountMax - nBLayerCountActual) -+ * If nPLayerCountActual is 1 and nBLayerCountActual is 0, temporal -+ * layering is disabled. Otherwise, it is enabled. -+ * nBLayerCountActual : Number of temporal layers to be coded with B frames, -+ * starting after non-B layers. -+ * (0 to nBLayerCountMax) -+ * bBitrateRatiosSpecified : Flag to indicate if layer-wise bitrate -+ * distribution is specified. -+ * nBitrateRatios : Bitrate ratio (100 based) per layer (index 0 is base layer). -+ * Honored if bBitrateRatiosSpecified is set. -+ * i.e for 4 layers with desired distribution (25% 25% 25% 25%), -+ * nBitrateRatio = {25, 50, 75, 100, ... } -+ * Values in indices not less than 'the actual number of layers -+ * minus 1' MAY be ignored and assumed to be 100. -+ */ -+typedef struct OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_ANDROID_TEMPORALLAYERINGPATTERNTYPE eSupportedPatterns; -+ OMX_U32 nLayerCountMax; -+ OMX_U32 nBLayerCountMax; -+ OMX_VIDEO_ANDROID_TEMPORALLAYERINGPATTERNTYPE ePattern; -+ OMX_U32 nPLayerCountActual; -+ OMX_U32 nBLayerCountActual; -+ OMX_BOOL bBitrateRatiosSpecified; -+ OMX_U32 nBitrateRatios[OMX_VIDEO_ANDROID_MAXTEMPORALLAYERS]; -+} OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE; -+ -+/** -+ * Android specific config for changing the temporal-layer count or -+ * bitrate-distribution at run-time. -+ * -+ * nSize : Size of the structure in bytes -+ * nVersion : OMX specification version information -+ * nPortIndex : Port that this structure applies to (output port for encoders) -+ * ePattern : Layering pattern. -+ * nPLayerCountActual : Number of temporal layers to be coded with non-B frames. -+ * (same OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE limits apply.) -+ * nBLayerCountActual : Number of temporal layers to be coded with B frames. -+ * (same OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE limits apply.) -+ * bBitrateRatiosSpecified : Flag to indicate if layer-wise bitrate -+ * distribution is specified. -+ * nBitrateRatios : Bitrate ratio (100 based, Q16 values) per layer (0 is base layer). -+ * Honored if bBitrateRatiosSpecified is set. -+ * (same OMX_VIDEO_PARAM_ANDROID_TEMPORALLAYERINGTYPE limits apply.) -+ */ -+typedef struct OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE { -+ OMX_U32 nSize; -+ OMX_VERSIONTYPE nVersion; -+ OMX_U32 nPortIndex; -+ OMX_VIDEO_ANDROID_TEMPORALLAYERINGPATTERNTYPE ePattern; -+ OMX_U32 nPLayerCountActual; -+ OMX_U32 nBLayerCountActual; -+ OMX_BOOL bBitrateRatiosSpecified; -+ OMX_U32 nBitrateRatios[OMX_VIDEO_ANDROID_MAXTEMPORALLAYERS]; -+} OMX_VIDEO_CONFIG_ANDROID_TEMPORALLAYERINGTYPE; -+ -+#ifdef __cplusplus -+} -+#endif /* __cplusplus */ -+ -+#endif /* OMX_VideoExt_h */ -+/* File EOF */ -diff --git a/encoder/mjpeg_encoder.cpp b/encoder/mjpeg_encoder.cpp -index 52757ce..cf54f8f 100644 ---- a/encoder/mjpeg_encoder.cpp -+++ b/encoder/mjpeg_encoder.cpp -@@ -45,6 +45,21 @@ void MjpegEncoder::EncodeBuffer(int fd, size_t size, void *mem, StreamInfo const - encode_cond_var_.notify_all(); - } - -+void NV12ToYUV420(const uint8_t *mem, uint8_t *dst, const StreamInfo &info); -+static uint8_t *getYUV420Format(const uint8_t *mem, const StreamInfo &info) -+{ -+ uint32_t width = info.width; -+ uint32_t height = info.height; -+ int32_t buf_size = width * height + ((height * width) >> 1); -+ uint8_t *buffer = new uint8_t[buf_size]; -+ -+ if(!buffer) -+ throw std::runtime_error("fail to apply memory."); -+ NV12ToYUV420(mem, buffer, info); -+ -+ return buffer; -+} -+ - void MjpegEncoder::encodeJPEG(struct jpeg_compress_struct &cinfo, EncodeItem &item, uint8_t *&encoded_buffer, - size_t &buffer_len) - { -@@ -65,7 +80,8 @@ void MjpegEncoder::encodeJPEG(struct jpeg_compress_struct &cinfo, EncodeItem &it - jpeg_start_compress(&cinfo, TRUE); - - int stride2 = item.info.stride / 2; -- uint8_t *Y = (uint8_t *)item.mem; -+ uint8_t *yuv420 = getYUV420Format((uint8_t *)item.mem, item.info); -+ uint8_t *Y = yuv420; - uint8_t *U = (uint8_t *)Y + item.info.stride * item.info.height; - uint8_t *V = (uint8_t *)U + stride2 * (item.info.height / 2); - uint8_t *Y_max = U - item.info.stride; -@@ -89,6 +105,7 @@ void MjpegEncoder::encodeJPEG(struct jpeg_compress_struct &cinfo, EncodeItem &it - - jpeg_finish_compress(&cinfo); - buffer_len = jpeg_mem_len; -+ delete[] yuv420; - } - - void MjpegEncoder::encodeThread(int num) -diff --git a/encoder/yuv420_encoder.cpp b/encoder/yuv420_encoder.cpp -new file mode 100755 -index 0000000..cbfd276 ---- /dev/null -+++ b/encoder/yuv420_encoder.cpp -@@ -0,0 +1,80 @@ -+/* SPDX-License-Identifier: BSD-2-Clause */ -+/* -+ * Copyright (C) 2023, Starfive Technology Co., Ltd. -+ * -+ * yuv420_encoder.cpp - yuv420 video encoder. -+ */ -+ -+#include -+#include -+#include -+ -+#include "yuv420_encoder.hpp" -+ -+void NV12ToYUV420(const uint8_t *mem, uint8_t *dst, const StreamInfo &info); -+ -+YUV420Encoder::YUV420Encoder(VideoOptions const *options) : Encoder(options), abort_(false) -+{ -+ LOG(2, "Opened YUV420Encoder"); -+ output_thread_ = std::thread(&YUV420Encoder::outputThread, this); -+} -+ -+YUV420Encoder::~YUV420Encoder() -+{ -+ abort_ = true; -+ output_thread_.join(); -+ LOG(2, "YUV420Encoder closed"); -+} -+ -+// Push the buffer onto the output queue to be "encoded" and returned. -+void YUV420Encoder::EncodeBuffer(int fd, size_t size, void *mem, StreamInfo const &info, int64_t timestamp_us) -+{ -+ if(!streamInfo_.width || !streamInfo_.height || !streamInfo_.stride) -+ streamInfo_ = info; -+ std::lock_guard lock(output_mutex_); -+ OutputItem item = { mem, size, timestamp_us }; -+ output_queue_.push(item); -+ output_cond_var_.notify_one(); -+} -+ -+// Realistically we would probably want more of a queue as the caller's number -+// of buffers limits the amount of queueing possible here... -+void YUV420Encoder::outputThread() -+{ -+ OutputItem item; -+ while (true) -+ { -+ { -+ std::unique_lock lock(output_mutex_); -+ while (true) -+ { -+ using namespace std::chrono_literals; -+ if (!output_queue_.empty()) -+ { -+ item = output_queue_.front(); -+ output_queue_.pop(); -+ break; -+ } -+ else -+ output_cond_var_.wait_for(lock, 200ms); -+ if (abort_) -+ return; -+ } -+ } -+ // Ensure the input done callback happens before the output ready callback. -+ // This is needed as the metadata queue gets pushed in the former, and popped -+ // in the latter. -+ input_done_callback_(nullptr); -+ -+ if(streamInfo_.width && streamInfo_.height && streamInfo_.stride) -+ { -+ uint8_t *yuv420 = new uint8_t[streamInfo_.width * streamInfo_.height + ((streamInfo_.height * streamInfo_.width) >> 1)]; -+ if(!yuv420) -+ throw std::runtime_error("fail to apply memory."); -+ NV12ToYUV420((uint8_t *)(item.mem), yuv420, streamInfo_); -+ output_ready_callback_(yuv420, item.length, item.timestamp_us, true); -+ delete[] yuv420; -+ } else -+ output_ready_callback_(item.mem, item.length, item.timestamp_us, true); -+ } -+} -diff --git a/encoder/yuv420_encoder.hpp b/encoder/yuv420_encoder.hpp -new file mode 100755 -index 0000000..7f3c680 ---- /dev/null -+++ b/encoder/yuv420_encoder.hpp -@@ -0,0 +1,41 @@ -+/* SPDX-License-Identifier: BSD-2-Clause */ -+/* -+ * Copyright (C) 2023, Starfive Technology Co., Ltd. -+ * -+ * yuv420_encoder.hpp - yuv420 video encoder. -+ */ -+ -+#pragma once -+ -+#include -+#include -+#include -+#include -+ -+#include "core/video_options.hpp" -+#include "encoder.hpp" -+ -+class YUV420Encoder : public Encoder -+{ -+public: -+ YUV420Encoder(VideoOptions const *options); -+ ~YUV420Encoder(); -+ void EncodeBuffer(int fd, size_t size, void *mem, StreamInfo const &info, int64_t timestamp_us) override; -+ -+private: -+ StreamInfo streamInfo_; -+ void outputThread(); -+ -+ bool abort_; -+ VideoOptions options_; -+ struct OutputItem -+ { -+ void *mem; -+ size_t length; -+ int64_t timestamp_us; -+ }; -+ std::queue output_queue_; -+ std::mutex output_mutex_; -+ std::condition_variable output_cond_var_; -+ std::thread output_thread_; -+}; --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/0005-Let-the-option-width-height-work-again.patch b/package/starfive/libcamera-apps/0005-Let-the-option-width-height-work-again.patch deleted file mode 100644 index a782edfa..00000000 --- a/package/starfive/libcamera-apps/0005-Let-the-option-width-height-work-again.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 2faf0e97fa4f1fdf8a2d22407966ea8747581eff Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Mon, 30 Oct 2023 17:35:05 +0800 -Subject: [PATCH] Let the option: width, height work again. - -Signed-off-by: zejian.su ---- - core/libcamera_app.cpp | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/core/libcamera_app.cpp b/core/libcamera_app.cpp -index cc76e9b..a49e31d 100644 ---- a/core/libcamera_app.cpp -+++ b/core/libcamera_app.cpp -@@ -252,6 +252,10 @@ void LibcameraApp::ConfigureViewfinder() - //auto area = camera_->properties().get(properties::PixelArrayActiveAreas); - if (options_->viewfinder_width && options_->viewfinder_height) - size = Size(options_->viewfinder_width, options_->viewfinder_height); -+ else if (options_->width && options_->height) -+ { -+ size = Size(options_->width, options_->height); -+ } - //else if (area) - //{ - // // The idea here is that most sensors will have a 2x2 binned mode that --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/0006-Make-the-qt-preview-work-in-debian.patch b/package/starfive/libcamera-apps/0006-Make-the-qt-preview-work-in-debian.patch deleted file mode 100644 index 9aec34b4..00000000 --- a/package/starfive/libcamera-apps/0006-Make-the-qt-preview-work-in-debian.patch +++ /dev/null @@ -1,148 +0,0 @@ -From 0327a137e069e0cfbdd775f7c40f03e088b765d6 Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Wed, 8 Nov 2023 09:23:01 +0800 -Subject: [PATCH 2/2] Make the qt preview work in debian. 1. Fill the NV12 data - into the QT buffer. 2. For the low performance of QWidget, reduce the FPS to - 15. - -Signed-off-by: zejian.su ---- - preview/preview.cpp | 37 ++++++++++++++----------------------- - preview/qt_preview.cpp | 20 ++++++++++++++++---- - 2 files changed, 30 insertions(+), 27 deletions(-) - -diff --git a/preview/preview.cpp b/preview/preview.cpp -index b67edb3..d2c511a 100644 ---- a/preview/preview.cpp -+++ b/preview/preview.cpp -@@ -19,47 +19,38 @@ Preview *make_preview(Options const *options) - if (options->nopreview) - return make_null_preview(options); - #if QT_PRESENT -- else if (options->qt_preview) -+ else - { - Preview *p = make_qt_preview(options); - if (p) - LOG(1, "Made QT preview window"); - return p; - } --#endif -- else -+#else -+ try -+ { -+ throw std::runtime_error("qt5 libraries unavailable."); -+ } -+ catch(std::exception const &e) - { - try - { --#if LIBEGL_PRESENT -- Preview *p = make_egl_preview(options); -+#if LIBDRM_PRESENT -+ Preview *p = make_drm_preview(options); - if (p) -- LOG(1, "Made X/EGL preview window"); -+ LOG(1, "Made DRM preview window"); - return p; - #else -- throw std::runtime_error("egl libraries unavailable."); -+ throw std::runtime_error("drm libraries unavailable."); - #endif - } - catch (std::exception const &e) - { -- try -- { --#if LIBDRM_PRESENT -- Preview *p = make_drm_preview(options); -- if (p) -- LOG(1, "Made DRM preview window"); -- return p; --#else -- throw std::runtime_error("drm libraries unavailable."); --#endif -- } -- catch (std::exception const &e) -- { -- LOG(1, "Preview window unavailable"); -- return make_null_preview(options); -- } -+ LOG(1, "Preview window unavailable"); -+ return make_null_preview(options); - } - } -+#endif - - return nullptr; // prevents compiler warning in debug builds - } -diff --git a/preview/qt_preview.cpp b/preview/qt_preview.cpp -index f595db7..8196a8e 100644 ---- a/preview/qt_preview.cpp -+++ b/preview/qt_preview.cpp -@@ -58,7 +58,7 @@ protected: - class QtPreview : public Preview - { - public: -- QtPreview(Options const *options) : Preview(options) -+ QtPreview(Options const *options) : Preview(options), frame_counter_(0) - { - window_width_ = options->preview_width; - window_height_ = options->preview_height; -@@ -83,6 +83,12 @@ public: - void SetInfoText(const std::string &text) override { main_window_->setWindowTitle(QString::fromStdString(text)); } - virtual void Show(int fd, libcamera::Span span, StreamInfo const &info) override - { -+ if((frame_counter_++) & 1) { -+ // Return the buffer to the camera system. -+ done_callback_(fd); -+ return; -+ } -+ - // Quick and simple nearest-neighbour-ish resampling is used here. - // We further share U,V samples between adjacent output pixel pairs - // (even when downscaling) to speed up the conversion. -@@ -131,6 +137,7 @@ public: - // take a copy of each row used. This is a speedup provided memcpy() is vectorized. - tmp_stripe_.resize(2 * info.stride); - uint8_t const *Y_start = span.data(); -+ uint8_t const *UV_start = Y_start + info.height * info.stride; - uint8_t *Y_row = &tmp_stripe_[0]; - uint8_t *U_row = Y_row + info.stride; - uint8_t *V_row = U_row + (info.stride >> 1); -@@ -146,8 +153,11 @@ public: - unsigned x_pos = x_step >> 1; - - memcpy(Y_row, Y_start + row * info.stride, info.stride); -- memcpy(U_row, Y_start + ((4 * info.height + row) >> 1) * (info.stride >> 1), info.stride >> 1); -- memcpy(V_row, Y_start + ((5 * info.height + row) >> 1) * (info.stride >> 1), info.stride >> 1); -+ //memcpy(U_row, Y_start + ((4 * info.height + row) >> 1) * (info.stride >> 1), info.stride >> 1); -+ //memcpy(V_row, Y_start + ((5 * info.height + row) >> 1) * (info.stride >> 1), info.stride >> 1); -+ uint8_t const *cur_uv = UV_start + (row >> 1) * info.width; -+ for(unsigned int uv_idx = 0; uv_idx < info.width >> 1; uv_idx++, cur_uv += 2) -+ U_row[uv_idx] = cur_uv[0], V_row[uv_idx] = cur_uv[1]; - - for (unsigned int x = 0; x < window_width_; x += 2) - { -@@ -183,7 +193,7 @@ public: - } - // Reset the preview window, clearing the current buffers and being ready to - // show new ones. -- void Reset() override {} -+ void Reset() override {frame_counter_ = 0;} - // Check if preview window has been shut down. - bool Quit() override { return main_window_->quit; } - // There is no particular limit to image sizes, though large images will be very slow. -@@ -218,6 +228,8 @@ private: - std::mutex mutex_; - std::condition_variable cond_var_; - std::vector tmp_stripe_; -+ -+ unsigned int frame_counter_; - }; - - Preview *make_qt_preview(Options const *options) --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/0007-Fix-the-libcamera-still-bug-at-low-resolution-redmin.patch b/package/starfive/libcamera-apps/0007-Fix-the-libcamera-still-bug-at-low-resolution-redmin.patch deleted file mode 100644 index 8f2d60b6..00000000 --- a/package/starfive/libcamera-apps/0007-Fix-the-libcamera-still-bug-at-low-resolution-redmin.patch +++ /dev/null @@ -1,37 +0,0 @@ -From de29362501b331f640a3d1d1f18722b229044873 Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Wed, 15 Nov 2023 12:00:25 +0800 -Subject: [PATCH] Fix the libcamera-still bug at low resolution (redmine - #8306). - -Set the raw stream's resolution too. - -Signed-off-by: zejian.su ---- - core/libcamera_app.cpp | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/core/libcamera_app.cpp b/core/libcamera_app.cpp -index a49e31d..27d5c44 100644 ---- a/core/libcamera_app.cpp -+++ b/core/libcamera_app.cpp -@@ -349,10 +349,14 @@ void LibcameraApp::ConfigureStill(unsigned int flags) - configuration_->at(0).bufferCount = 3; - else if (options_->buffer_count > 0) - configuration_->at(0).bufferCount = options_->buffer_count; -- if (options_->width) -+ if (options_->width) { - configuration_->at(0).size.width = options_->width; -- if (options_->height) -+ configuration_->at(1).size.width = options_->width; -+ } -+ if (options_->height) { - configuration_->at(0).size.height = options_->height; -+ configuration_->at(1).size.height = options_->height; -+ } - configuration_->at(0).colorSpace = libcamera::ColorSpace::Sycc; - configuration_->transform = options_->transform; - --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/0008-In-DRM-preview-zoom-the-input-image-to-fit-the-scree.patch b/package/starfive/libcamera-apps/0008-In-DRM-preview-zoom-the-input-image-to-fit-the-scree.patch deleted file mode 100644 index c487d9d1..00000000 --- a/package/starfive/libcamera-apps/0008-In-DRM-preview-zoom-the-input-image-to-fit-the-scree.patch +++ /dev/null @@ -1,300 +0,0 @@ -From 526cbca855ea6310dc846cc05158d403aea456e1 Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Mon, 27 Nov 2023 18:02:17 +0800 -Subject: [PATCH 1/2] In DRM preview, zoom the input image to fit the screen. - -1. Use the atomic drm mode. -2. Find a mode in the connector with most closed area with the input image. -3. Set the plane property to scale the input image. - -Signed-off-by: zejian.su ---- - preview/drm_preview.cpp | 184 ++++++++++++++++++++++++++++++++-------- - 1 file changed, 147 insertions(+), 37 deletions(-) - -diff --git a/preview/drm_preview.cpp b/preview/drm_preview.cpp -index 38fc6a2..405bdca 100644 ---- a/preview/drm_preview.cpp -+++ b/preview/drm_preview.cpp -@@ -17,6 +17,92 @@ - - #include "preview.hpp" - -+class DRMObject -+{ -+public: -+ DRMObject(int drmfd, uint32_t id, uint32_t type) -+ : id_(id), type_(type){ -+ drmModeObjectProperties *properties = drmModeObjectGetProperties(drmfd, id, type); -+ if (!properties) -+ return; -+ -+ drmModePropertyPtr property; -+ for (uint32_t i = 0; i < properties->count_props; i++) { -+ property = drmModeGetProperty(drmfd, properties->props[i]); -+ property_[std::string(property->name)] = property->prop_id; -+ drmModeFreeProperty(property); -+ } -+ -+ drmModeFreeObjectProperties(properties); -+ } -+ -+ uint32_t getID() const {return id_;}; -+ -+public: -+ std::unordered_map property_; -+ -+private: -+ uint32_t id_; -+ uint32_t type_; -+}; -+ -+class AtomicRequest -+{ -+public: -+ enum Flags { -+ FlagAllowModeset = (1 << 0), -+ FlagAsync = (1 << 1), -+ FlagTestOnly = (1 << 2), -+ }; -+ -+ AtomicRequest() : valid_(true) { -+ request_ = drmModeAtomicAlloc(); -+ if (!request_) -+ valid_ = false; -+ } -+ -+ ~AtomicRequest() { -+ if (request_) -+ drmModeAtomicFree(request_); -+ } -+ -+ bool isValid() const { return valid_; } -+ -+ int addProperty(int drmfd, const DRMObject *object, const std::string &propertyName, -+ uint64_t value) { -+ -+ if (!valid_) -+ return -EINVAL; -+ -+ auto it = object->property_.find(propertyName); -+ if(it == object->property_.end()) -+ return -EINVAL; -+ -+ if(drmModeAtomicAddProperty(request_, object->getID(), it->second, value) < 0) { -+ std::string errMsg = "drmModeAtomicAddProperty() failed -- object: " + -+ std::to_string(object->getID()) + ", property: " + std::to_string(it->second); -+ throw std::runtime_error(errMsg); -+ } -+ -+ return 0; -+ } -+ -+ int commit(int drmfd, unsigned int flags = 0) { -+ if(drmModeAtomicCommit(drmfd, request_, flags, NULL) < 0) -+ throw std::runtime_error("drmModeAtomicCommit() failed"); -+ return 0; -+ } -+ -+private: -+ AtomicRequest(const AtomicRequest &) = delete; -+ AtomicRequest(const AtomicRequest &&) = delete; -+ AtomicRequest &operator=(const AtomicRequest &) = delete; -+ AtomicRequest &operator=(const AtomicRequest &&) = delete; -+ -+ bool valid_; -+ drmModeAtomicReq *request_; -+}; -+ - class DrmPreview : public Preview - { - public: -@@ -48,6 +134,7 @@ private: - void makeBuffer(int fd, size_t size, StreamInfo const &info, Buffer &buffer); - void findCrtc(); - void findPlane(); -+ void fitDisplaySize(); - int drmfd_; - int conId_; - drmModeConnector *con_; -@@ -61,11 +148,18 @@ private: - unsigned int height_; - unsigned int screen_width_; - unsigned int screen_height_; -+ unsigned int display_x_; -+ unsigned int display_y_; -+ unsigned int display_w_; -+ unsigned int display_h_; - std::map buffers_; // map the DMABUF's fd to the Buffer - int last_fd_; - unsigned int max_image_width_; - unsigned int max_image_height_; - bool first_time_; -+ -+ std::unique_ptr connector_; -+ std::unique_ptr crtc_; - }; - - #define ERRSTR strerror(errno) -@@ -96,10 +190,6 @@ void DrmPreview::findCrtc() - if (con->encoder_id) - { - enc = drmModeGetEncoder(drmfd_, con->encoder_id); -- //if (enc->crtc_id) -- //{ -- // crtc = drmModeGetCrtc(drmfd_, enc->crtc_id); -- //} - } else - { - enc = drmModeGetEncoder(drmfd_, con->encoders[0]); -@@ -229,6 +319,7 @@ void DrmPreview::findPlane() - drmModeFreePlane(plane); - break; - } -+ planeId_ = planes->planes[0]; - } - catch (std::exception const &e) - { -@@ -265,21 +356,16 @@ DrmPreview::DrmPreview(Options const *options) : Preview(options), last_fd_(-1), - //out_fourcc_ = DRM_FORMAT_YUV420; - out_fourcc_ = DRM_FORMAT_NV12; - findPlane(); -+ -+ drmSetClientCap(drmfd_, DRM_CLIENT_CAP_ATOMIC, 1); -+ connector_ = std::make_unique(drmfd_, conId_, DRM_MODE_OBJECT_CONNECTOR); -+ crtc_ = std::make_unique(drmfd_, crtcId_, DRM_MODE_OBJECT_CRTC); - } - catch (std::exception const &e) - { - close(drmfd_); - throw; - } -- -- // Default behaviour here is to go fullscreen. -- if (options_->fullscreen || width_ == 0 || height_ == 0 || x_ + width_ > screen_width_ || -- y_ + height_ > screen_height_) -- { -- x_ = y_ = 0; -- width_ = screen_width_; -- height_ = screen_height_; -- } - } - - DrmPreview::~DrmPreview() -@@ -365,9 +451,23 @@ static void setup_colour_space(int fd, int plane_id, std::optional (int64_t)screen_width_ * height_) { -+ display_x_ = 0, display_w_ = screen_width_; -+ display_h_ = ((int64_t)screen_width_ * height_) / (int64_t)width_; -+ display_y_ = (screen_height_ - display_h_) >> 1; -+ } else { -+ display_y_ = 0, display_h_ = screen_height_; -+ display_w_ = ((int64_t)width_ * screen_height_) / (int64_t)height_; -+ display_x_ = (screen_width_ - display_w_) >> 1; -+ } -+} -+ - void DrmPreview::makeBuffer(int fd, size_t size, StreamInfo const &info, Buffer &buffer) - { - unsigned int width = info.width, height = info.height, stride = info.stride; -+ int64_t targetArea = 0; - if (first_time_) - { - first_time_ = false; -@@ -379,6 +479,10 @@ void DrmPreview::makeBuffer(int fd, size_t size, StreamInfo const &info, Buffer - buffer.size = size; - buffer.info = info; - -+ if(!width_ || !height) -+ width_ = info.width, height_ = info.height; -+ targetArea = (int64_t)width_ * height_; -+ - if (drmPrimeFDToHandle(drmfd_, fd, &buffer.bo_handle)) - throw std::runtime_error("drmPrimeFDToHandle failed for fd " + std::to_string(fd)); - -@@ -401,33 +505,46 @@ void DrmPreview::makeBuffer(int fd, size_t size, StreamInfo const &info, Buffer - - /* find preferred mode */ - drmModeModeInfo *modeptr = NULL, *preferred = NULL; -+ int64_t minDiff = -1; - for (int m = 0; m < con_->count_modes; m++) { -+ int64_t area, areaDiff; - modeptr = &con_->modes[m]; -- if (modeptr->hdisplay == width && modeptr->vdisplay == height) { -+ -+ area = (int64_t)modeptr->hdisplay * modeptr->vdisplay; -+ areaDiff = abs(targetArea - area); -+ if(-1 == minDiff) -+ minDiff = abs(targetArea - area), preferred = modeptr; -+ else { -+ if(areaDiff < minDiff) -+ minDiff = areaDiff, preferred = modeptr; -+ } -+ -+ if (!minDiff) { - preferred = modeptr; - std::cout << "find the matched mode, modes index= " - << m << ", " << width << "x" << height << std::endl; - break; - } -- if (modeptr->type & DRM_MODE_TYPE_PREFERRED) { -- preferred = modeptr; -- std::cout << "find perferred mode, modes index= " << m << std::endl; -- } -- } -- -- if (!preferred) -- preferred = &con_->modes[0]; -- -- // set default -- if (drmModeSetCrtc(drmfd_, crtcId_, buffer.fb_handle, 0, 0, -- (uint32_t *)&conId_, 1, preferred)) { -- throw std::runtime_error("drmModeSetCrtc() failed"); - } - - screen_width_ = preferred->hdisplay; - screen_height_ = preferred->vdisplay; -- width_ = width; -- height_ = height; -+ fitDisplaySize(); -+ -+ AtomicRequest ar; -+ uint32_t blob_id; -+ -+ drmModeCreatePropertyBlob(drmfd_, preferred, sizeof(con_->modes[0]), &blob_id); -+ ar.addProperty(drmfd_, connector_.get(), "CRTC_ID", crtcId_); -+ ar.addProperty(drmfd_, crtc_.get(), "ACTIVE", 1); -+ ar.addProperty(drmfd_, crtc_.get(), "MODE_ID", blob_id); -+ ar.commit(drmfd_, DRM_MODE_PAGE_FLIP_EVENT | DRM_MODE_ATOMIC_NONBLOCK | DRM_MODE_ATOMIC_ALLOW_MODESET); -+ -+ // set default -+ //if (drmModeSetCrtc(drmfd_, crtcId_, buffer.fb_handle, 0, 0, -+ // (uint32_t *)&conId_, 1, preferred)) { -+ // throw std::runtime_error("drmModeSetCrtc() failed"); -+ //} - } - - void DrmPreview::Show(int fd, libcamera::Span span, StreamInfo const &info) -@@ -436,14 +553,7 @@ void DrmPreview::Show(int fd, libcamera::Span span, StreamInfo const &i - if (buffer.fd == -1) - makeBuffer(fd, span.size(), info, buffer); - -- unsigned int x_off = 0, y_off = 0; -- unsigned int w = width_, h = height_; -- if (info.width * height_ > width_ * info.height) -- h = width_ * info.height / info.width, y_off = (height_ - h) / 2; -- else -- w = height_ * info.width / info.height, x_off = (width_ - w) / 2; -- -- if (drmModeSetPlane(drmfd_, planeId_, crtcId_, buffer.fb_handle, 0, x_off + x_, y_off + y_, w, h, 0, 0, -+ if (drmModeSetPlane(drmfd_, planeId_, crtcId_, buffer.fb_handle, 0, display_x_, display_y_, display_w_, display_h_, 0, 0, - buffer.info.width << 16, buffer.info.height << 16)) - throw std::runtime_error("drmModeSetPlane failed: " + std::string(ERRSTR)); - if (last_fd_ >= 0) --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/0009-Fix-the-sync-issue-between-the-Preview.Show-and-the-.patch b/package/starfive/libcamera-apps/0009-Fix-the-sync-issue-between-the-Preview.Show-and-the-.patch deleted file mode 100644 index bf10b5e6..00000000 --- a/package/starfive/libcamera-apps/0009-Fix-the-sync-issue-between-the-Preview.Show-and-the-.patch +++ /dev/null @@ -1,291 +0,0 @@ -From e9e9555cac3c11c70277824d82d5b3fbd5e4afd2 Mon Sep 17 00:00:00 2001 -From: "zejian.su" -Date: Fri, 1 Dec 2023 16:30:27 +0800 -Subject: [PATCH 2/2] Fix the sync issue between the Preview.Show() and the - QWidget.update() 1. Add a mutex between the Preview.Show() and the - QWidget.update(). 2. Speed up the Preview.Show() -- change the floating point - to integer, merge some plus and multiplying operation and remove some data - copy. - -Signed-off-by: zejian.su ---- - preview/qt_preview.cpp | 183 +++++++++++++++++++++++++---------------- - 1 file changed, 113 insertions(+), 70 deletions(-) - -diff --git a/preview/qt_preview.cpp b/preview/qt_preview.cpp -index 8196a8e..ef3c8a4 100644 ---- a/preview/qt_preview.cpp -+++ b/preview/qt_preview.cpp -@@ -41,16 +41,47 @@ class MyWidget : public QWidget - public: - MyWidget(QWidget *parent, int w, int h) : QWidget(parent), size(w, h) - { -- image = QImage(size, QImage::Format_RGB888); -- image.fill(0); -+ for(int i = 0; i < 2; i++) { -+ buffers_[i].image = QImage(size, QImage::Format_RGB888); -+ buffers_[i].image.fill(0); -+ availableBuffers_.push_back(&buffers_[i]); -+ } - } - QSize size; -- QImage image; -+ -+ struct ImageBuffer { -+ QImage image; -+ uint8_t frameCounter; -+ -+ ImageBuffer() : frameCounter(0) {}; -+ } buffers_[2]; -+ -+ std::list freeBuffers_; -+ std::list availableBuffers_; -+ -+ std::mutex buffers_available_mutex_; -+ std::mutex buffers_free_mutex_; - protected: - void paintEvent(QPaintEvent *) override - { - QPainter painter(this); -- painter.drawImage(rect(), image, image.rect()); -+ { -+ ImageBuffer *buffer = nullptr; -+ { -+ std::lock_guard lock(buffers_available_mutex_); -+ if(!availableBuffers_.size()) -+ return; -+ buffer = availableBuffers_.back(); -+ availableBuffers_.pop_back(); -+ } -+ -+ painter.drawImage(rect(), buffer->image, buffer->image.rect()); -+ -+ { -+ std::lock_guard lock(buffers_free_mutex_); -+ freeBuffers_.push_back(buffer); -+ } -+ } - } - QSize sizeHint() const override { return size; } - }; -@@ -58,7 +89,7 @@ protected: - class QtPreview : public Preview - { - public: -- QtPreview(Options const *options) : Preview(options), frame_counter_(0) -+ QtPreview(Options const *options) : Preview(options) - { - window_width_ = options->preview_width; - window_height_ = options->preview_height; -@@ -67,6 +98,8 @@ public: - // This preview window is expensive, so make it small by default. - if (window_width_ == 0 || window_height_ == 0) - window_width_ = 512, window_height_ = 384; -+ -+ frameCounter_ = 0; - // As a hint, reserve twice the binned width for our widest current camera (V3) - tmp_stripe_.reserve(4608); - thread_ = std::thread(&QtPreview::threadFunc, this, options); -@@ -83,100 +116,105 @@ public: - void SetInfoText(const std::string &text) override { main_window_->setWindowTitle(QString::fromStdString(text)); } - virtual void Show(int fd, libcamera::Span span, StreamInfo const &info) override - { -- if((frame_counter_++) & 1) { -- // Return the buffer to the camera system. -- done_callback_(fd); -- return; -+ MyWidget::ImageBuffer *buffer = nullptr; -+ { -+ std::lock_guard lock(pane_->buffers_free_mutex_); -+ if(pane_->freeBuffers_.size() > 0) { -+ buffer = pane_->freeBuffers_.front(); -+ pane_->freeBuffers_.pop_front(); -+ } -+ } -+ -+ if(!buffer) { -+ std::lock_guard lock(pane_->buffers_available_mutex_); -+ if(!pane_->availableBuffers_.size()) { -+ done_callback_(fd); -+ return; -+ } -+ buffer = pane_->availableBuffers_.front(); -+ pane_->availableBuffers_.pop_front(); - } -- - // Quick and simple nearest-neighbour-ish resampling is used here. - // We further share U,V samples between adjacent output pixel pairs - // (even when downscaling) to speed up the conversion. - unsigned x_step = (info.width << 16) / window_width_; - unsigned y_step = (info.height << 16) / window_height_; - -- // Choose the right matrix to convert YUV back to RGB. -- static const float YUV2RGB[3][9] = { -- { 1.0, 0.0, 1.402, 1.0, -0.344, -0.714, 1.0, 1.772, 0.0 }, // JPEG -- { 1.164, 0.0, 1.596, 1.164, -0.392, -0.813, 1.164, 2.017, 0.0 }, // SMPTE170M -- { 1.164, 0.0, 1.793, 1.164, -0.213, -0.533, 1.164, 2.112, 0.0 }, // Rec709 -+ static const uint32_t YUV2RGB[3][9] = { -+ { 128, 0, 179, 128, 44, 91, 128, 227, 0 }, // JPEG -+ { 149, 0, 204, 149, 50, 104, 149, 258, 0 }, // SMPTE170M -+ { 149, 0, 230, 149, 27, 68, 149, 270, 0 }, // Rec709 - }; -- int offsetY; -- float coeffY, coeffVR, coeffUG, coeffVG, coeffUB; -- if (info.colour_space == libcamera::ColorSpace::Smpte170m) -+ static const int RGBOFFSET[3][3] = { -+ {24960, -15232, 31104}, {28496, -17328, 35408}, {31824, -9776, 36944} -+ }; -+ -+ uint32_t coeffY, coeffVR, coeffUG, coeffVG, coeffUB; -+ const int * rgbOffset = nullptr; -+ if(info.colour_space == libcamera::ColorSpace::Smpte170m) - { -- offsetY = 16; - coeffY = YUV2RGB[1][0]; - coeffVR = YUV2RGB[1][2]; - coeffUG = YUV2RGB[1][4]; - coeffVG = YUV2RGB[1][5]; - coeffUB = YUV2RGB[1][7]; -- } -- else if (info.colour_space == libcamera::ColorSpace::Rec709) -+ rgbOffset = RGBOFFSET[1]; -+ } else if(info.colour_space == libcamera::ColorSpace::Rec709) - { -- offsetY = 16; - coeffY = YUV2RGB[2][0]; - coeffVR = YUV2RGB[2][2]; - coeffUG = YUV2RGB[2][4]; - coeffVG = YUV2RGB[2][5]; - coeffUB = YUV2RGB[2][7]; -- } -- else -+ rgbOffset = RGBOFFSET[2]; -+ } else - { -- offsetY = 0; - coeffY = YUV2RGB[0][0]; - coeffVR = YUV2RGB[0][2]; - coeffUG = YUV2RGB[0][4]; - coeffVG = YUV2RGB[0][5]; - coeffUB = YUV2RGB[0][7]; -- if (info.colour_space != libcamera::ColorSpace::Sycc) -- LOG(1, "QtPreview: unexpected colour space " << libcamera::ColorSpace::toString(info.colour_space)); -+ rgbOffset = RGBOFFSET[0]; - } - -- // Because the source buffer is uncached, and we want to read it a byte at a time, -- // take a copy of each row used. This is a speedup provided memcpy() is vectorized. -- tmp_stripe_.resize(2 * info.stride); -- uint8_t const *Y_start = span.data(); -- uint8_t const *UV_start = Y_start + info.height * info.stride; -- uint8_t *Y_row = &tmp_stripe_[0]; -- uint8_t *U_row = Y_row + info.stride; -- uint8_t *V_row = U_row + (info.stride >> 1); -- -- // Possibly this should be locked in case a repaint is happening? In practice the risk -- // is only that there might be some tearing, so I don't think we worry. We could speed -- // it up by getting the ISP to supply RGB, but I'm not sure I want to handle that extra -- // possibility in our main application code, so we'll put up with the slow conversion. -- for (unsigned int y = 0; y < window_height_; y++) -+ uint8_t const * Y_start = span.data(); -+ uint8_t const * UV_start = Y_start + info.height * info.stride; -+ int src_ypos = y_step >> 1; -+ uint32_t Y2 = 0; -+ uint32_t U2 = coeffUG | (coeffUB << 16); -+ uint32_t V2 = coeffVR | (coeffVG << 16); -+ uint16_t * y2 = (uint16_t *)&Y2; -+ uint32_t U; -+ uint32_t V; -+ uint16_t * u2 = (uint16_t *)&U; -+ uint16_t * v2 = (uint16_t *)&V; -+ -+ for(unsigned int y = 0; y < window_height_; y++, src_ypos += y_step) - { -- unsigned row = (y * y_step) >> 16; -- uint8_t *dest = pane_->image.scanLine(y); -- unsigned x_pos = x_step >> 1; -- -- memcpy(Y_row, Y_start + row * info.stride, info.stride); -- //memcpy(U_row, Y_start + ((4 * info.height + row) >> 1) * (info.stride >> 1), info.stride >> 1); -- //memcpy(V_row, Y_start + ((5 * info.height + row) >> 1) * (info.stride >> 1), info.stride >> 1); -- uint8_t const *cur_uv = UV_start + (row >> 1) * info.width; -- for(unsigned int uv_idx = 0; uv_idx < info.width >> 1; uv_idx++, cur_uv += 2) -- U_row[uv_idx] = cur_uv[0], V_row[uv_idx] = cur_uv[1]; -- -- for (unsigned int x = 0; x < window_width_; x += 2) -+ const uint8_t * src_y = Y_start + (src_ypos >> 16) * info.width; -+ const uint8_t * src_uv = UV_start + (src_ypos >> 17) * info.width; -+ uint8_t * dest = buffer->image.scanLine(y); -+ uint32_t x_pos = x_step >> 1; -+ -+ for(unsigned int x = 0; x < window_width_; x += 2) - { -- int Y0 = Y_row[x_pos >> 16]; -+ y2[0] = src_y[x_pos >> 16]; - x_pos += x_step; -- int Y1 = Y_row[x_pos >> 16]; -- int U = U_row[x_pos >> 17]; -- int V = V_row[x_pos >> 17]; -+ y2[1] = src_y[x_pos >> 16]; -+ U = src_uv[(x_pos >> 16) & 0xfffffffe]; -+ V = src_uv[(x_pos >> 16) | 1]; - x_pos += x_step; -- Y0 -= offsetY; -- Y1 -= offsetY; -- U -= 128; -- V -= 128; -- int R0 = coeffY * Y0 + coeffVR * V; -- int G0 = coeffY * Y0 + coeffUG * U + coeffVG * V; -- int B0 = coeffY * Y0 + coeffUB * U; -- int R1 = coeffY * Y1 + coeffVR * V; -- int G1 = coeffY * Y1 + coeffUG * U + coeffVG * V; -- int B1 = coeffY * Y1 + coeffUB * U; -+ -+ Y2 *= coeffY; -+ U *= U2; -+ V *= V2; -+ -+ int R0 = ((int)y2[0] + (int)v2[0] - rgbOffset[0]) >> 7; -+ int G0 = ((int)y2[0] - (int)u2[0] - (int)v2[1] - rgbOffset[1]) >> 7; -+ int B0 = ((int)y2[0] + (int)u2[1] - rgbOffset[2]) >> 7; -+ int R1 = ((int)y2[1] + (int)v2[0] - rgbOffset[0]) >> 7; -+ int G1 = ((int)y2[1] - (int)u2[0] - (int)v2[1] - rgbOffset[1]) >> 7; -+ int B1 = ((int)y2[1] + (int)u2[1] - rgbOffset[2]) >> 7; - *(dest++) = std::clamp(R0, 0, 255); - *(dest++) = std::clamp(G0, 0, 255); - *(dest++) = std::clamp(B0, 0, 255); -@@ -186,6 +224,12 @@ public: - } - } - -+ { -+ std::lock_guard lock(pane_->buffers_available_mutex_); -+ buffer->frameCounter = ++frameCounter_; -+ pane_->availableBuffers_.push_back(buffer); -+ } -+ - pane_->update(); - - // Return the buffer to the camera system. -@@ -193,7 +237,7 @@ public: - } - // Reset the preview window, clearing the current buffers and being ready to - // show new ones. -- void Reset() override {frame_counter_ = 0;} -+ void Reset() override {} - // Check if preview window has been shut down. - bool Quit() override { return main_window_->quit; } - // There is no particular limit to image sizes, though large images will be very slow. -@@ -228,8 +272,7 @@ private: - std::mutex mutex_; - std::condition_variable cond_var_; - std::vector tmp_stripe_; -- -- unsigned int frame_counter_; -+ uint8_t frameCounter_; - }; - - Preview *make_qt_preview(Options const *options) --- -2.34.1 - diff --git a/package/starfive/libcamera-apps/libcamera-apps.hash b/package/starfive/libcamera-apps/libcamera-apps.hash index 1da66eb1..23f3db42 100644 --- a/package/starfive/libcamera-apps/libcamera-apps.hash +++ b/package/starfive/libcamera-apps/libcamera-apps.hash @@ -1 +1 @@ -sha256 add2d80450f3b61de275c6505689b0984d29c9dde94f0cf381c4209620c96263 libcamera-apps-54a781dffdd101954dcfa6acd0bd80006f67da83-br1.tar.gz +sha256 774e913f4b71ddf51a6f2adf00f4c48866018d32a0ba57569206e31ada339f59 libcamera-apps-31377be38defcfbd6bc70bd12895c6f145fc8171-br1.tar.gz diff --git a/package/starfive/libcamera-apps/libcamera-apps.mk b/package/starfive/libcamera-apps/libcamera-apps.mk index 8d47c1cc..a2b24e16 100644 --- a/package/starfive/libcamera-apps/libcamera-apps.mk +++ b/package/starfive/libcamera-apps/libcamera-apps.mk @@ -4,8 +4,8 @@ # ################################################################################ -LIBCAMERA_APPS_SITE = https://github.com/raspberrypi/libcamera-apps.git -LIBCAMERA_APPS_VERSION = 54a781dffdd101954dcfa6acd0bd80006f67da83 +LIBCAMERA_APPS_SITE = https://github.com/starfive-tech/libcamera-apps.git +LIBCAMERA_APPS_VERSION = 31377be38defcfbd6bc70bd12895c6f145fc8171 LIBCAMERA_APPS_SITE_METHOD = git LIBCAMERA_APPS_INSTALL_STAGING = YES