summaryrefslogtreecommitdiffstats
path: root/media/libavextensions
diff options
context:
space:
mode:
authorLubin Yin <lubiny@codeaurora.org>2015-07-29 12:31:09 +0800
committerSatish Kamuju <skamuj@codeaurora.org>2015-10-06 17:33:49 +0530
commitae614d22fd87feb1857e8041978ab2c38cfaa16e (patch)
treeb6fe7142b7c1dbfcba5250f3fa36991da61a0f33 /media/libavextensions
parent9079a349be70e7c7a5fa8e5bf98be22eeb054db7 (diff)
downloadframeworks_av-ae614d22fd87feb1857e8041978ab2c38cfaa16e.zip
frameworks_av-ae614d22fd87feb1857e8041978ab2c38cfaa16e.tar.gz
frameworks_av-ae614d22fd87feb1857e8041978ab2c38cfaa16e.tar.bz2
libstagefright: MPEG4Writer: Add support for HEVC muxing
Changes done to enable HEVC muxing - writing HVCC atom - configure HEVC encoder Fix HEVC flag initialization Check for HEVC for single track usecase Change-Id: I1757d0c442e7cc3ef251431f220395131a1eb4ec
Diffstat (limited to 'media/libavextensions')
-rw-r--r--media/libavextensions/stagefright/AVExtensions.h38
-rw-r--r--media/libavextensions/stagefright/AVUtils.cpp34
2 files changed, 72 insertions, 0 deletions
diff --git a/media/libavextensions/stagefright/AVExtensions.h b/media/libavextensions/stagefright/AVExtensions.h
index ab0f180..3e51463 100644
--- a/media/libavextensions/stagefright/AVExtensions.h
+++ b/media/libavextensions/stagefright/AVExtensions.h
@@ -38,6 +38,8 @@ namespace android {
class AudioParameter;
class MetaData;
class MediaExtractor;
+class MPEG4Writer;
+struct ABuffer;
struct ACodec;
struct ALooper;
struct IMediaHTTPConnection;
@@ -106,6 +108,42 @@ struct AVUtils {
List<int64_t> &/*decodeTimeQueue*/) {}
virtual bool useQCHWEncoder(const sp<AMessage> &, AString &) { return false; }
+
+ struct HEVCMuxer {
+
+ virtual bool reassembleHEVCCSD(const AString &mime, sp<ABuffer> csd0, sp<MetaData> &meta);
+
+ virtual void writeHEVCFtypBox(MPEG4Writer *writer);
+
+ virtual status_t makeHEVCCodecSpecificData(const uint8_t *data,
+ size_t size, void** codecSpecificData,
+ size_t *codecSpecificDataSize);
+
+ virtual const char *getFourCCForMime(const char *mime);
+
+ virtual void writeHvccBox(MPEG4Writer *writer,
+ void* codecSpecificData, size_t codecSpecificDataSize,
+ bool useNalLengthFour);
+
+ virtual bool isVideoHEVC(const char* mime);
+
+ virtual void getHEVCCodecSpecificDataFromInputFormatIfPossible(
+ sp<MetaData> meta, void **codecSpecificData,
+ size_t *codecSpecificDataSize, bool *gotAllCodecSpecificData);
+
+ protected:
+ HEVCMuxer() {};
+ virtual ~HEVCMuxer() {};
+ friend struct AVUtils;
+ };
+
+ virtual inline HEVCMuxer& HEVCMuxerUtils() {
+ return mHEVCMuxer;
+ }
+
+private:
+ HEVCMuxer mHEVCMuxer;
+
// ----- NO TRESSPASSING BEYOND THIS LINE ------
DECLARE_LOADABLE_SINGLETON(AVUtils);
};
diff --git a/media/libavextensions/stagefright/AVUtils.cpp b/media/libavextensions/stagefright/AVUtils.cpp
index a683f48..8e7c39d 100644
--- a/media/libavextensions/stagefright/AVUtils.cpp
+++ b/media/libavextensions/stagefright/AVUtils.cpp
@@ -109,6 +109,40 @@ bool AVUtils::isEnhancedExtension(const char *) {
return false;
}
+bool AVUtils::HEVCMuxer::reassembleHEVCCSD(const AString &/*mime*/, sp<ABuffer> /*csd0*/, sp<MetaData> &/*meta*/) {
+ return false;
+}
+
+void AVUtils::HEVCMuxer::writeHEVCFtypBox(MPEG4Writer * /*writer*/) {
+ return;
+}
+
+status_t AVUtils::HEVCMuxer::makeHEVCCodecSpecificData(const uint8_t * /*data*/,
+ size_t /*size*/, void ** /*codecSpecificData*/,
+ size_t * /*codecSpecificDataSize*/) {
+ return UNKNOWN_ERROR;
+}
+
+const char *AVUtils::HEVCMuxer::getFourCCForMime(const char * /*mime*/) {
+ return NULL;
+}
+
+void AVUtils::HEVCMuxer::writeHvccBox(MPEG4Writer * /*writer*/,
+ void * /*codecSpecificData*/, size_t /*codecSpecificDataSize*/,
+ bool /*useNalLengthFour*/) {
+ return;
+}
+
+bool AVUtils::HEVCMuxer::isVideoHEVC(const char * /*mime*/) {
+ return false;
+}
+
+void AVUtils::HEVCMuxer::getHEVCCodecSpecificDataFromInputFormatIfPossible(
+ sp<MetaData> /*meta*/, void ** /*codecSpecificData*/,
+ size_t * /*codecSpecificDataSize*/, bool * /*gotAllCodecSpecificData*/) {
+ return;
+}
+
// ----- NO TRESSPASSING BEYOND THIS LINE ------
AVUtils::AVUtils() {}