From b069fc9de8fbf412297fd7ddbb9664371d63ef7d Mon Sep 17 00:00:00 2001 From: Michael Chen Date: Tue, 13 Nov 2012 22:52:29 +0800 Subject: [PATCH] add support for wmv1 --- libstagefright/FFmpegExtractor/FFmpegExtractor.cpp | 16 +++++++++++-- .../codecs/ffmpegdec/adec/SoftFFmpegAudio.cpp | 8 +++++++ .../codecs/ffmpegdec/adec/SoftFFmpegAudio.h | 4 ++++ .../codecs/ffmpegdec/vdec/SoftFFmpegVideo.cpp | 26 +++++++++++++++++++++- .../codecs/ffmpegdec/vdec/SoftFFmpegVideo.h | 7 +++++- 5 files changed, 57 insertions(+), 4 deletions(-) diff --git a/libstagefright/FFmpegExtractor/FFmpegExtractor.cpp b/libstagefright/FFmpegExtractor/FFmpegExtractor.cpp index 1031d12..7a060ca 100644 --- a/libstagefright/FFmpegExtractor/FFmpegExtractor.cpp +++ b/libstagefright/FFmpegExtractor/FFmpegExtractor.cpp @@ -420,7 +420,8 @@ int FFmpegExtractor::check_extradata(AVCodecContext *avctx) avctx->codec_id == CODEC_ID_AC3 || avctx->codec_id == CODEC_ID_H263 || avctx->codec_id == CODEC_ID_H263P || - avctx->codec_id == CODEC_ID_H263I) + avctx->codec_id == CODEC_ID_H263I || + avctx->codec_id == CODEC_ID_WMV1) return 1; // is extradata compatible with android? @@ -491,6 +492,7 @@ int FFmpegExtractor::stream_component_open(int stream_index) case CODEC_ID_MP2: case CODEC_ID_MP3: case CODEC_ID_MPEG2VIDEO: + case CODEC_ID_WMV1: #if 0 case CODEC_ID_VC1: #endif @@ -622,6 +624,15 @@ int FFmpegExtractor::stream_component_open(int stream_index) meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_WMV12); meta->setData(kKeyESDS, kTypeESDS, avctx->extradata, avctx->extradata_size); break; + case CODEC_ID_WMV1: + LOGV("WMV1"); + meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_WMV12); + break; + case CODEC_ID_WMV2: + LOGV("WMV2"); + meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_VIDEO_WMV12); + meta->setData(kKeyESDS, kTypeESDS, avctx->extradata, avctx->extradata_size); + break; default: CHECK(!"Should not be here. Unsupported codec."); break; @@ -1541,8 +1552,8 @@ static extmap FILE_EXTS[] = { {".mkv", MEDIA_MIMETYPE_CONTAINER_MATROSKA}, {".ts", MEDIA_MIMETYPE_CONTAINER_TS}, {".avi", MEDIA_MIMETYPE_CONTAINER_AVI}, -#if 0 {".asf", MEDIA_MIMETYPE_CONTAINER_ASF}, +#if 0 {".wmv", MEDIA_MIMETYPE_CONTAINER_WMV}, {".wma", MEDIA_MIMETYPE_CONTAINER_WMA}, {".mpg", MEDIA_MIMETYPE_CONTAINER_MPG}, @@ -1591,6 +1602,7 @@ typedef struct { static formatmap FILE_FORMATS[] = { {"mpegts", MEDIA_MIMETYPE_CONTAINER_TS}, {"mov,mp4,m4a,3gp,3g2,mj2", MEDIA_MIMETYPE_CONTAINER_MOV}, + {"asf", MEDIA_MIMETYPE_CONTAINER_ASF}, }; const char *BetterSniffFFMPEG(const char * uri) diff --git a/libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.cpp b/libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.cpp index 04620db..6d2423d 100644 --- a/libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.cpp +++ b/libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.cpp @@ -77,6 +77,14 @@ SoftFFmpegAudio::SoftFFmpegAudio( mMode = MODE_MPEGL2; } else if (!strcmp(name, "OMX.ffmpeg.aac.decoder")) { mMode = MODE_AAC; + } else if (!strcmp(name, "OMX.ffmpeg.ape.decoder")) { + mMode = MODE_APE; + } else if (!strcmp(name, "OMX.ffmpeg.wma.decoder")) { + mMode = MODE_WMA; + } else if (!strcmp(name, "OMX.ffmpeg.dts.decoder")) { + mMode = MODE_DTS; + } else if (!strcmp(name, "OMX.ffmpeg.ra.decoder")) { + mMode = MODE_RA; } else { CHECK(!strcmp(name, "OMX.ffmpeg.ac3.decoder")); mMode = MODE_AC3; diff --git a/libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.h b/libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.h index 620677a..f4aeab0 100644 --- a/libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.h +++ b/libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.h @@ -91,6 +91,10 @@ private: MODE_MPEGL2, MODE_AAC, MODE_AC3, + MODE_APE, + MODE_WMA, + MODE_DTS, + MODE_RA } mMode; enum { diff --git a/libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.cpp b/libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.cpp index c7ba136..84ad5c0 100644 --- a/libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.cpp +++ b/libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.cpp @@ -68,11 +68,20 @@ SoftFFmpegVideo::SoftFFmpegVideo( mMode = MODE_MPEG2; } else if (!strcmp(name, "OMX.ffmpeg.h263.decoder")) { mMode = MODE_H263; + } else if (!strcmp(name, "OMX.ffmpeg.vpx.decoder")) { + mMode = MODE_VPX; } else if (!strcmp(name, "OMX.ffmpeg.vc1.decoder")) { mMode = MODE_VC1; + } else if (!strcmp(name, "OMX.ffmpeg.divx.decoder")) { + mMode = MODE_DIVX; + } else if (!strcmp(name, "OMX.ffmpeg.wmv12.decoder")) { + mMode = MODE_WMV12; + } else if (!strcmp(name, "OMX.ffmpeg.flv.decoder")) { + mMode = MODE_FLV; + } else if (!strcmp(name, "OMX.ffmpeg.rv.decoder")) { + mMode = MODE_RV; } else { CHECK(!strcmp(name, "OMX.ffmpeg.h264.decoder")); - //mIgnoreExtradata = true; } LOGV("SoftFFmpegVideo component: %s", name); @@ -123,6 +132,10 @@ void SoftFFmpegVideo::initPorts() { def.format.video.cMIMEType = const_cast(MEDIA_MIMETYPE_VIDEO_VC1); def.format.video.eCompressionFormat = OMX_VIDEO_CodingWMV; break; + case MODE_WMV12: + def.format.video.cMIMEType = const_cast(MEDIA_MIMETYPE_VIDEO_WMV12); + def.format.video.eCompressionFormat = OMX_VIDEO_CodingWMV; + break; default: CHECK(!"Should not be here. Unsupported mime type and compression format"); break; @@ -244,6 +257,9 @@ status_t SoftFFmpegVideo::initDecoder() { case MODE_VC1: mCtx->codec_id = CODEC_ID_VC1; break; + case MODE_WMV12: + mCtx->codec_id = CODEC_ID_WMV1; // CODEC_ID_WMV1 or CODEC_ID_WMV2? + break; default: CHECK(!"Should not be here. Unsupported codec"); break; @@ -354,6 +370,9 @@ OMX_ERRORTYPE SoftFFmpegVideo::internalGetParameter( case MODE_VC1: formatParams->eCompressionFormat = OMX_VIDEO_CodingWMV; break; + case MODE_WMV12: + formatParams->eCompressionFormat = OMX_VIDEO_CodingWMV; + break; default: CHECK(!"Should not be here. Unsupported compression format."); break; @@ -411,6 +430,11 @@ OMX_ERRORTYPE SoftFFmpegVideo::internalSetParameter( "video_decoder.vc1", OMX_MAX_STRINGNAME_SIZE - 1)) supported = false; break; + case MODE_WMV12: + if (strncmp((const char *)roleParams->cRole, + "video_decoder.wmv12", OMX_MAX_STRINGNAME_SIZE - 1)) + supported = false; + break; default: CHECK(!"Should not be here. Unsupported role."); break; diff --git a/libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.h b/libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.h index 8e2215d..030f0f6 100644 --- a/libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.h +++ b/libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.h @@ -91,7 +91,12 @@ private: MODE_MPEG4, MODE_MPEG2, MODE_H263, - MODE_VC1 + MODE_VPX, + MODE_VC1, + MODE_DIVX, + MODE_WMV12, + MODE_FLV, + MODE_RV } mMode; enum { -- 2.11.0