diff --git a/camera/cameraserver/cameraserver.rc b/camera/cameraserver/cameraserver.rc old mode 100644 new mode 100755 index fea5a1d5c6e..0824c0d82f4 --- a/camera/cameraserver/cameraserver.rc +++ b/camera/cameraserver/cameraserver.rc @@ -1,6 +1,6 @@ service cameraserver /system/bin/cameraserver class main user cameraserver - group audio camera input drmrpc + group audio camera input drmrpc inet media mediadrm net_bt net_bt_admin net_bw_acct system sdcard_rw ioprio rt 4 writepid /dev/cpuset/camera-daemon/tasks /dev/stune/top-app/tasks diff --git a/include/media/stagefright/MediaCodecSource.h b/include/media/stagefright/MediaCodecSource.h index 1044ee4d68e..68d41e9d49d 100644 --- a/include/media/stagefright/MediaCodecSource.h +++ b/include/media/stagefright/MediaCodecSource.h @@ -145,6 +145,10 @@ struct MediaCodecSource : public MediaSource, int32_t mGeneration; + int64_t mPrevBufferTimestampUs; + bool mIsHFR; + int32_t mBatchSize; + DISALLOW_EVIL_CONSTRUCTORS(MediaCodecSource); }; diff --git a/media/libavextensions/stagefright/AVExtensions.h b/media/libavextensions/stagefright/AVExtensions.h index e528a2ed4ca..6221756cb12 100644 --- a/media/libavextensions/stagefright/AVExtensions.h +++ b/media/libavextensions/stagefright/AVExtensions.h @@ -35,6 +35,7 @@ #include #include #include +#include #include "ESQueue.h" namespace android { @@ -152,6 +153,8 @@ struct AVUtils { virtual bool isAudioMuxFormatSupported(const char *mime); virtual void cacheCaptureBuffers(sp camera, video_encoder encoder); + virtual void getHFRParams(bool*, int32_t*, sp); + virtual int64_t overwriteTimeOffset(bool, int64_t, int64_t *, int64_t, int32_t); virtual const char *getCustomCodecsLocation(); virtual const char *getCustomCodecsPerformanceLocation(); diff --git a/media/libavextensions/stagefright/AVUtils.cpp b/media/libavextensions/stagefright/AVUtils.cpp index e02657869dc..b936e0435b3 100644 --- a/media/libavextensions/stagefright/AVUtils.cpp +++ b/media/libavextensions/stagefright/AVUtils.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2013 - 2016, The Linux Foundation. All rights reserved. + * Copyright (c) 2013 - 2017, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -135,6 +135,15 @@ void AVUtils::cacheCaptureBuffers(sp, video_encoder) { return; } +void AVUtils::getHFRParams(bool*, int32_t*, sp) { + return; +} + +int64_t AVUtils::overwriteTimeOffset(bool, int64_t inputBufferTimeOffsetUs, int64_t*, + int64_t, int32_t) { + return inputBufferTimeOffsetUs; +} + const char *AVUtils::getCustomCodecsLocation() { return "/etc/media_codecs.xml"; } diff --git a/media/libmediaplayerservice/StagefrightRecorder.cpp b/media/libmediaplayerservice/StagefrightRecorder.cpp index bb9a26fe17a..3655d87f5aa 100644 --- a/media/libmediaplayerservice/StagefrightRecorder.cpp +++ b/media/libmediaplayerservice/StagefrightRecorder.cpp @@ -1609,6 +1609,7 @@ status_t StagefrightRecorder::setupVideoEncoder( preferBFrames = false; tsLayers = 2; // use at least two layers as resulting video will likely be sped up } else if (mCaptureFps > maxPlaybackFps) { // slow-mo + format->setInt32("high-frame-rate", 1); maxPlaybackFps = mCaptureFps; // assume video will be played back at full capture speed preferBFrames = false; } diff --git a/media/libstagefright/MediaCodecSource.cpp b/media/libstagefright/MediaCodecSource.cpp index fda48014f04..c9f158e1792 100755 --- a/media/libstagefright/MediaCodecSource.cpp +++ b/media/libstagefright/MediaCodecSource.cpp @@ -329,7 +329,7 @@ sp MediaCodecSource::Create( uint32_t flags) { sp mediaSource = new MediaCodecSource(looper, format, source, consumer, flags); - + AVUtils::get()->getHFRParams(&mediaSource->mIsHFR, &mediaSource->mBatchSize, format); if (mediaSource->init() == OK) { return mediaSource; } @@ -422,7 +422,10 @@ MediaCodecSource::MediaCodecSource( mFirstSampleSystemTimeUs(-1ll), mPausePending(false), mFirstSampleTimeUs(-1ll), - mGeneration(0) { + mGeneration(0), + mPrevBufferTimestampUs(0), + mIsHFR(false), + mBatchSize(0) { CHECK(mLooper != NULL); AString mime; @@ -685,7 +688,8 @@ status_t MediaCodecSource::feedEncoderInputBuffers() { return OK; } } - + mInputBufferTimeOffsetUs = AVUtils::get()->overwriteTimeOffset(mIsHFR, + mInputBufferTimeOffsetUs, &mPrevBufferTimestampUs, timeUs, mBatchSize); timeUs += mInputBufferTimeOffsetUs; // push decoding time for video, or drift time for audio diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp old mode 100644 new mode 100755 index ac2c8335492..54b124f2f2b --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -76,6 +76,7 @@ using namespace hardware; volatile int32_t gLogLevel = 0; char gAppPackageName[50] = {'0'}; +char gClientPackageName[50] = {'0'}; #define LOG1(...) ALOGD_IF(gLogLevel >= 1, __VA_ARGS__); #define LOG2(...) ALOGD_IF(gLogLevel >= 2, __VA_ARGS__); @@ -1270,6 +1271,7 @@ Status CameraService::connect( String8 id = String8::format("%d", cameraId); strncpy(gAppPackageName, String8(clientPackageName).string(), sizeof(gAppPackageName)); sp client = nullptr; + strncpy(gClientPackageName, String8(clientPackageName).string(), sizeof(gClientPackageName)); ret = connectHelper(cameraClient, id, CAMERA_HAL_API_VERSION_UNSPECIFIED, clientPackageName, clientUid, clientPid, API_1, /*legacyMode*/ false, /*shimUpdateOnly*/ false, @@ -1315,7 +1317,7 @@ Status CameraService::connectLegacy( Status ret = Status::ok(); sp client = nullptr; - strncpy(gAppPackageName, String8(clientPackageName).string(), sizeof(gAppPackageName)); + strncpy(gClientPackageName, String8(clientPackageName).string(), sizeof(gClientPackageName)); ret = connectHelper(cameraClient, id, halVersion, clientPackageName, clientUid, USE_CALLING_PID, API_1, /*legacyMode*/ true, /*shimUpdateOnly*/ false, @@ -1343,8 +1345,7 @@ Status CameraService::connectDevice( Status ret = Status::ok(); String8 id = String8::format("%d", cameraId); sp client = nullptr; - - strncpy(gAppPackageName, String8(clientPackageName).string(), sizeof(gAppPackageName)); + strncpy(gClientPackageName, String8(clientPackageName).string(), sizeof(gClientPackageName)); ret = connectHelper(cameraCb, id, CAMERA_HAL_API_VERSION_UNSPECIFIED, clientPackageName, clientUid, USE_CALLING_PID, API_2, diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h old mode 100644 new mode 100755 index 97187429ad7..f2c21b51300 --- a/services/camera/libcameraservice/CameraService.h +++ b/services/camera/libcameraservice/CameraService.h @@ -48,6 +48,7 @@ namespace android { +extern char gClientPackageName[50]; extern volatile int32_t gLogLevel; extern char gAppPackageName[50];