diff options
author | Iliyan Malchev <malchev@google.com> | 2011-07-12 17:40:25 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-07-12 17:40:25 -0700 |
commit | 350d9162155e1f3eab1821f5eeed762faa01f0cc (patch) | |
tree | 01efeefb8eff6b7077eb14e163d62878d48a3d88 /media/libstagefright | |
parent | 8deb152167af1dbf39d532737f105368ee8973f5 (diff) | |
parent | 1374eddc4455b26d1dffdca10fc70534b3f08c1d (diff) | |
download | frameworks_av-350d9162155e1f3eab1821f5eeed762faa01f0cc.zip frameworks_av-350d9162155e1f3eab1821f5eeed762faa01f0cc.tar.gz frameworks_av-350d9162155e1f3eab1821f5eeed762faa01f0cc.tar.bz2 |
Merge "Add support for TI H264 encoder"
Diffstat (limited to 'media/libstagefright')
-rwxr-xr-x[-rw-r--r--] | media/libstagefright/CameraSource.cpp | 4 | ||||
-rwxr-xr-x[-rw-r--r--] | media/libstagefright/MPEG4Writer.cpp | 7 | ||||
-rwxr-xr-x[-rw-r--r--] | media/libstagefright/OMXCodec.cpp | 28 |
3 files changed, 36 insertions, 3 deletions
diff --git a/media/libstagefright/CameraSource.cpp b/media/libstagefright/CameraSource.cpp index c7e7ced..1bc2fb9 100644..100755 --- a/media/libstagefright/CameraSource.cpp +++ b/media/libstagefright/CameraSource.cpp @@ -103,6 +103,10 @@ static int32_t getColorFormat(const char* colorFormat) { return OMX_COLOR_Format16bitRGB565; } + if (!strcmp(colorFormat, "OMX_TI_COLOR_FormatYUV420PackedSemiPlanar")) { + return OMX_TI_COLOR_FormatYUV420PackedSemiPlanar; + } + LOGE("Uknown color format (%s), please add it to " "CameraSource::getColorFormat", colorFormat); diff --git a/media/libstagefright/MPEG4Writer.cpp b/media/libstagefright/MPEG4Writer.cpp index eaad2c3..8c9ff87 100644..100755 --- a/media/libstagefright/MPEG4Writer.cpp +++ b/media/libstagefright/MPEG4Writer.cpp @@ -1715,7 +1715,10 @@ status_t MPEG4Writer::Track::parseAVCCodecSpecificData( return ERROR_MALFORMED; } } - +// FIXME: +// Add chromat_format_idc, bit depth values, etc for AVC/h264 high profile and above +// and remove #if 0 +#if 0 { // Check on the profiles // These profiles requires additional parameter set extensions @@ -1725,7 +1728,7 @@ status_t MPEG4Writer::Track::parseAVCCodecSpecificData( return BAD_VALUE; } } - +#endif return OK; } diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp index 06363ee..3b05752 100644..100755 --- a/media/libstagefright/OMXCodec.cpp +++ b/media/libstagefright/OMXCodec.cpp @@ -218,18 +218,21 @@ static const CodecInfo kEncoderInfo[] = { { MEDIA_MIMETYPE_AUDIO_AMR_WB, "AMRWBEncoder" }, { MEDIA_MIMETYPE_AUDIO_AAC, "OMX.TI.AAC.encode" }, { MEDIA_MIMETYPE_AUDIO_AAC, "AACEncoder" }, + { MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.TI.DUCATI1.VIDEO.MPEG4E" }, { MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.qcom.7x30.video.encoder.mpeg4" }, { MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.qcom.video.encoder.mpeg4" }, { MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.TI.Video.encoder" }, { MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.Nvidia.mp4.encoder" }, { MEDIA_MIMETYPE_VIDEO_MPEG4, "OMX.SEC.MPEG4.Encoder" }, { MEDIA_MIMETYPE_VIDEO_MPEG4, "M4vH263Encoder" }, + { MEDIA_MIMETYPE_VIDEO_H263, "OMX.TI.DUCATI1.VIDEO.MPEG4E" }, { MEDIA_MIMETYPE_VIDEO_H263, "OMX.qcom.7x30.video.encoder.h263" }, { MEDIA_MIMETYPE_VIDEO_H263, "OMX.qcom.video.encoder.h263" }, { MEDIA_MIMETYPE_VIDEO_H263, "OMX.TI.Video.encoder" }, { MEDIA_MIMETYPE_VIDEO_H263, "OMX.Nvidia.h263.encoder" }, { MEDIA_MIMETYPE_VIDEO_H263, "OMX.SEC.H263.Encoder" }, { MEDIA_MIMETYPE_VIDEO_H263, "M4vH263Encoder" }, + { MEDIA_MIMETYPE_VIDEO_AVC, "OMX.TI.DUCATI1.VIDEO.H264E" }, { MEDIA_MIMETYPE_VIDEO_AVC, "OMX.qcom.7x30.video.encoder.avc" }, { MEDIA_MIMETYPE_VIDEO_AVC, "OMX.qcom.video.encoder.avc" }, { MEDIA_MIMETYPE_VIDEO_AVC, "OMX.TI.Video.encoder" }, @@ -393,7 +396,17 @@ uint32_t OMXCodec::getComponentQuirks( if (!strcmp(componentName, "OMX.TI.DUCATI1.VIDEO.DECODER")) { quirks |= kRequiresAllocateBufferOnInputPorts; quirks |= kRequiresAllocateBufferOnOutputPorts; - } else if (!strncmp(componentName, "OMX.TI.", 7)) { + } + + // FIXME: + // Remove the quirks after the work is done. + else if (!strcmp(componentName, "OMX.TI.DUCATI1.VIDEO.MPEG4E") || + !strcmp(componentName, "OMX.TI.DUCATI1.VIDEO.H264E")) { + + quirks |= kRequiresAllocateBufferOnInputPorts; + quirks |= kRequiresAllocateBufferOnOutputPorts; + } + else if (!strncmp(componentName, "OMX.TI.", 7)) { // Apparently I must not use OMX_UseBuffer on either input or // output ports on any of the TI components or quote: // "(I) may have unexpected problem (sic) which can be timing related @@ -887,6 +900,7 @@ static size_t getFrameSize( case OMX_COLOR_FormatYUV420Planar: case OMX_COLOR_FormatYUV420SemiPlanar: + case OMX_TI_COLOR_FormatYUV420PackedSemiPlanar: return (width * height * 3) / 2; default: @@ -910,6 +924,7 @@ status_t OMXCodec::findTargetColorFormat( } } + // Check whether the target color format is supported. return isColorFormatSupported(*colorFormat, kPortIndexInput); } @@ -1032,6 +1047,11 @@ void OMXCodec::setVideoInputFormat( video_def->nFrameWidth = width; video_def->nFrameHeight = height; video_def->xFramerate = 0; // No need for output port + // FIXME: + // Revmoe this workaround after work is done. + if (!strncmp(mComponentName, "OMX.TI.DUCATI1", 14)) { + video_def->xFramerate = (frameRate << 16); + } video_def->nBitrate = bitRate; // Q16 format video_def->eCompressionFormat = compressionFormat; video_def->eColorFormat = OMX_COLOR_FormatUnused; @@ -1304,6 +1324,12 @@ status_t OMXCodec::setupAVCEncoderParameters(const sp<MetaData>& meta) { h264type.eProfile = static_cast<OMX_VIDEO_AVCPROFILETYPE>(profileLevel.mProfile); h264type.eLevel = static_cast<OMX_VIDEO_AVCLEVELTYPE>(profileLevel.mLevel); + // FIXME: + // Remove the workaround after the work in done. + if (!strncmp(mComponentName, "OMX.TI.DUCATI1", 14)) { + h264type.eProfile = OMX_VIDEO_AVCProfileBaseline; + } + if (h264type.eProfile == OMX_VIDEO_AVCProfileBaseline) { h264type.nSliceHeaderSpacing = 0; h264type.bUseHadamard = OMX_TRUE; |