OSDN Git Service

add support for wmv1
authorMichael Chen <omxcodec@gmail.com>
Tue, 13 Nov 2012 14:52:29 +0000 (22:52 +0800)
committerMichael Chen <omxcodec@gmail.com>
Tue, 13 Nov 2012 14:52:29 +0000 (22:52 +0800)
libstagefright/FFmpegExtractor/FFmpegExtractor.cpp
libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.cpp
libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.h
libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.cpp
libstagefright/codecs/ffmpegdec/vdec/SoftFFmpegVideo.h

index 1031d12..7a060ca 100644 (file)
@@ -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)
index 04620db..6d2423d 100644 (file)
@@ -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;
index 620677a..f4aeab0 100644 (file)
@@ -91,6 +91,10 @@ private:
        MODE_MPEGL2,
         MODE_AAC,
         MODE_AC3,
+        MODE_APE,
+        MODE_WMA,
+        MODE_DTS,
+        MODE_RA
     } mMode;
 
     enum {
index c7ba136..84ad5c0 100644 (file)
@@ -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<char *>(MEDIA_MIMETYPE_VIDEO_VC1);
         def.format.video.eCompressionFormat = OMX_VIDEO_CodingWMV;
         break;
+    case MODE_WMV12:
+        def.format.video.cMIMEType = const_cast<char *>(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;
index 8e2215d..030f0f6 100644 (file)
@@ -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 {