diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-03-15 01:28:34 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-03-15 01:28:34 +0000 |
commit | 12b725af0fe70f346f442749facfa66124b16abc (patch) | |
tree | 61c4212540f5badbb8c194c6910b315a8debe618 | |
parent | e900332d6589dd5b25a0d5eb354ee402c55b2376 (diff) | |
parent | e7adbac231cd80541ba9e66c971e2a425fd4f443 (diff) |
Snap for 9744603 from e7adbac231cd80541ba9e66c971e2a425fd4f443 to udc-release
Change-Id: I16803a29e5d8a0a8400e81c472425963d6e2b0aa
-rw-r--r-- | libhwc2.1/libdevice/ExynosLayer.cpp | 3 | ||||
-rw-r--r-- | libhwjpeg/Android.bp | 1 | ||||
-rw-r--r-- | libhwjpeg/AppMarkerWriter.cpp | 2 | ||||
-rw-r--r-- | libhwjpeg/AppMarkerWriter.h | 2 | ||||
-rw-r--r-- | libhwjpeg/ExynosJpegEncoder.cpp | 9 | ||||
-rw-r--r-- | libhwjpeg/FileLock.cpp | 13 | ||||
-rw-r--r-- | libhwjpeg/hwjpeg-v4l2.cpp | 11 | ||||
-rw-r--r-- | libhwjpeg/include/ExynosJpegApi.h | 5 | ||||
-rw-r--r-- | libhwjpeg/include/FileLock.h | 16 | ||||
-rw-r--r-- | libhwjpeg/include/exynos-hwjpeg.h | 11 |
10 files changed, 69 insertions, 4 deletions
diff --git a/libhwc2.1/libdevice/ExynosLayer.cpp b/libhwc2.1/libdevice/ExynosLayer.cpp index 2c6feaf..79a9ca1 100644 --- a/libhwc2.1/libdevice/ExynosLayer.cpp +++ b/libhwc2.1/libdevice/ExynosLayer.cpp @@ -719,7 +719,8 @@ int32_t ExynosLayer::setLayerPerFrameMetadataBlobs(uint32_t numElements, const i mMetaParcel->eType = static_cast<ExynosVideoInfoType>(mMetaParcel->eType | VIDEO_INFO_TYPE_HDR_DYNAMIC); ExynosHdrDynamicInfo *info = &(mMetaParcel->sHdrDynamicInfo); - Exynos_parsing_user_data_registered_itu_t_t35(info, (void *)metadata_start); + Exynos_parsing_user_data_registered_itu_t_t35(info, (void*)metadata_start, + sizes[i]); } else { ALOGE("Layer has no metaParcel!"); return HWC2_ERROR_UNSUPPORTED; diff --git a/libhwjpeg/Android.bp b/libhwjpeg/Android.bp index b7dd526..86dc84d 100644 --- a/libhwjpeg/Android.bp +++ b/libhwjpeg/Android.bp @@ -10,6 +10,7 @@ cc_library_shared { "AppMarkerWriter.cpp", "ExynosJpegEncoder.cpp", "ExynosJpegEncoderForCamera.cpp", + "FileLock.cpp", "hwjpeg-base.cpp", "hwjpeg-v4l2.cpp", "libhwjpeg-exynos.cpp", diff --git a/libhwjpeg/AppMarkerWriter.cpp b/libhwjpeg/AppMarkerWriter.cpp index b764025..f9eb12b 100644 --- a/libhwjpeg/AppMarkerWriter.cpp +++ b/libhwjpeg/AppMarkerWriter.cpp @@ -260,7 +260,7 @@ void CAppMarkerWriter::PrepareAppWriter(char *base, exif_attribute_t *exif, m_pExtra = extra; // |<- m_szApp1 ->|<- m_szMaxThumbSize ->|<-m_szAppX->| - // |<----- size of total APP1 and APP4 segments ----->|<-APP11->|<-- main image + // |<----- size of total APP1 and APPX segments ----->|<-APP11->|<-- main image // m_pAppBase m_pThumbBase | | return // | | | | || // v v | | v| diff --git a/libhwjpeg/AppMarkerWriter.h b/libhwjpeg/AppMarkerWriter.h index 9531339..a25d9c0 100644 --- a/libhwjpeg/AppMarkerWriter.h +++ b/libhwjpeg/AppMarkerWriter.h @@ -37,7 +37,7 @@ #define IFD_FIELD_SIZE (IFD_TAG_SIZE + IFD_TYPE_SIZE + IFD_COUNT_SIZE + IFD_VALOFF_SIZE) -#define EXTRA_APPMARKER_MIN 4 +#define EXTRA_APPMARKER_MIN 2 #define EXTRA_APPMARKER_LIMIT 10 #define MAX_GPS_PROCESSINGMETHOD_SIZE 108 diff --git a/libhwjpeg/ExynosJpegEncoder.cpp b/libhwjpeg/ExynosJpegEncoder.cpp index f25d9b4..d833ca7 100644 --- a/libhwjpeg/ExynosJpegEncoder.cpp +++ b/libhwjpeg/ExynosJpegEncoder.cpp @@ -19,6 +19,15 @@ #include <linux/videodev2.h> #include "hwjpeg-internal.h" + +int ExynosJpegEncoder::lock() { + return m_hwjpeg.lock(); +} + +int ExynosJpegEncoder::unlock() { + return m_hwjpeg.unlock(); +} + int ExynosJpegEncoder::setJpegConfig(void *pConfig) { ExynosJpegEncoder *that = reinterpret_cast<ExynosJpegEncoder *>(pConfig); diff --git a/libhwjpeg/FileLock.cpp b/libhwjpeg/FileLock.cpp new file mode 100644 index 0000000..6e8ecbd --- /dev/null +++ b/libhwjpeg/FileLock.cpp @@ -0,0 +1,13 @@ +#include "FileLock.h" + +#include <bits/lockf.h> + +FileLock::FileLock(int fd) : fd_(fd) {} + +int FileLock::lock() { + return lockf(fd_, F_LOCK, 0); +} + +int FileLock::unlock() { + return lockf(fd_, F_ULOCK, 0); +} diff --git a/libhwjpeg/hwjpeg-v4l2.cpp b/libhwjpeg/hwjpeg-v4l2.cpp index b822e24..c364554 100644 --- a/libhwjpeg/hwjpeg-v4l2.cpp +++ b/libhwjpeg/hwjpeg-v4l2.cpp @@ -22,7 +22,8 @@ #include "hwjpeg-internal.h" #include "log/log_main.h" -CHWJpegV4L2Compressor::CHWJpegV4L2Compressor() : CHWJpegCompressor("/dev/video12") { +CHWJpegV4L2Compressor::CHWJpegV4L2Compressor() + : CHWJpegCompressor("/dev/video12"), file_lock_(FileLock(GetDeviceFD())) { memset(&m_v4l2Format, 0, sizeof(m_v4l2Format)); memset(&m_v4l2SrcBuffer, 0, sizeof(m_v4l2SrcBuffer)); memset(&m_v4l2DstBuffer, 0, sizeof(m_v4l2DstBuffer)); @@ -69,6 +70,14 @@ CHWJpegV4L2Compressor::~CHWJpegV4L2Compressor() { ALOGD("CHWJpegV4L2Compressor Destroyed: %p, FD %d", this, GetDeviceFD()); } +int CHWJpegV4L2Compressor::lock() { + return file_lock_.lock(); +} + +int CHWJpegV4L2Compressor::unlock() { + return file_lock_.unlock(); +} + bool CHWJpegV4L2Compressor::SetChromaSampFactor(unsigned int horizontal, unsigned int vertical) { __s32 value; switch ((horizontal << 4) | vertical) { diff --git a/libhwjpeg/include/ExynosJpegApi.h b/libhwjpeg/include/ExynosJpegApi.h index 6addf51..dcf06b3 100644 --- a/libhwjpeg/include/ExynosJpegApi.h +++ b/libhwjpeg/include/ExynosJpegApi.h @@ -114,6 +114,11 @@ public: } virtual ~ExynosJpegEncoder() { destroy(); } + // Acquire exclusive lock to V4L2 device. This is a blocking call. + int lock(); + // Release exclusive lock to V4L2 device. + int unlock(); + // Return 0 on success, -1 on error int flagCreate() { return m_hwjpeg.Okay() ? 0 : -1; } virtual int create(void) { return flagCreate(); } diff --git a/libhwjpeg/include/FileLock.h b/libhwjpeg/include/FileLock.h new file mode 100644 index 0000000..b308aa7 --- /dev/null +++ b/libhwjpeg/include/FileLock.h @@ -0,0 +1,16 @@ +#include "android-base/thread_annotations.h" + +// Encapsulates advisory file lock for a given field descriptor +class CAPABILITY("mutex") FileLock { +public: + FileLock(int fd); + ~FileLock() = default; + + // Acquires advisory file lock. This will block. + int lock() ACQUIRE(); + // Releases advisory file lock. + int unlock() RELEASE(); + +private: + int fd_; +};
\ No newline at end of file diff --git a/libhwjpeg/include/exynos-hwjpeg.h b/libhwjpeg/include/exynos-hwjpeg.h index 3d3d7e5..45114b5 100644 --- a/libhwjpeg/include/exynos-hwjpeg.h +++ b/libhwjpeg/include/exynos-hwjpeg.h @@ -26,6 +26,9 @@ #error VIDEO_MAX_PLANES should not be smaller than 6 #endif +#include "FileLock.h" +#include "android-base/thread_annotations.h" + // Exynos JPEG specific device capabilities // Defined in the driver. Not in videodev2.h #define V4L2_CAP_EXYNOS_JPEG_DECOMPRESSION 0x0100 @@ -581,6 +584,8 @@ class CHWJpegV4L2Compressor : public CHWJpegCompressor, private CHWJpegFlagManag bool m_bEnableHWFC; + FileLock file_lock_; + bool IsB2BCompression() { return (TO_SEC_IMG_SIZE(m_v4l2Format.fmt.pix_mp.width) + TO_SEC_IMG_SIZE(m_v4l2Format.fmt.pix_mp.height)) != 0; @@ -601,6 +606,12 @@ public: CHWJpegV4L2Compressor(); virtual ~CHWJpegV4L2Compressor(); + // Acquires exclusive lock to V4L2 device. This must be called before starting image + // configuration. This is a blocking call. + int lock(); + // Releases exclusive lock to V4L2 device. This should be called after encoding is complete. + int unlock(); + unsigned int GetHWDelay() { return m_uiHWDelay; } // SetChromaSampFactor can be called during streaming |