OSDN Git Service

add support for MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I and MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II
authorMichael Chen <omxcodec@gmail.com>
Sun, 4 Nov 2012 01:37:45 +0000 (09:37 +0800)
committerMichael Chen <omxcodec@gmail.com>
Sun, 4 Nov 2012 01:37:45 +0000 (09:37 +0800)
libstagefright/FFmpegExtractor/FFmpegExtractor.cpp
libstagefright/codecs/ffmpegdec/adec/SoftFFmpegAudio.cpp

index 69474e8..d047c89 100644 (file)
@@ -404,6 +404,8 @@ int FFmpegExtractor::check_extradata(AVCodecContext *avctx)
 
     // ignore extradata
     if (avctx->codec_id == CODEC_ID_MP3 ||
+            avctx->codec_id == CODEC_ID_MP1  ||
+            avctx->codec_id == CODEC_ID_MP2  ||
             avctx->codec_id == CODEC_ID_H263  ||
             avctx->codec_id == CODEC_ID_H263P ||
             avctx->codec_id == CODEC_ID_H263I)
@@ -421,15 +423,9 @@ int FFmpegExtractor::check_extradata(AVCodecContext *avctx)
     switch(avctx->codec_id) {
     case CODEC_ID_H264:
     case CODEC_ID_MPEG4:
-    case CODEC_ID_H263:
-    case CODEC_ID_H263P:
-    case CODEC_ID_H263I:
-        break;
     case CODEC_ID_AAC:
         name = "aac_adtstoasc";
         break;
-    case CODEC_ID_MP3:
-        break;
     default:
         break;
     }
@@ -480,6 +476,8 @@ int FFmpegExtractor::stream_component_open(int stream_index)
     case CODEC_ID_H263P:
     case CODEC_ID_H263I:
     case CODEC_ID_AAC:
+    case CODEC_ID_MP1:
+    case CODEC_ID_MP2:
     case CODEC_ID_MP3:
     case CODEC_ID_MPEG2VIDEO:
 #if 0
@@ -664,6 +662,18 @@ int FFmpegExtractor::stream_component_open(int stream_index)
         }
 
         switch(avctx->codec_id) {
+        case CODEC_ID_MP1:
+            LOGV("MP1");
+            meta = new MetaData;
+            meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_I);
+            //meta->setData(kKeyESDS, kTypeESDS, avctx->extradata, avctx->extradata_size);
+            break;
+        case CODEC_ID_MP2:
+            LOGV("MP2");
+            meta = new MetaData;
+            meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_MPEG_LAYER_II);
+            //meta->setData(kKeyESDS, kTypeESDS, avctx->extradata, avctx->extradata_size);
+            break;
         case CODEC_ID_MP3:
             LOGV("MP3");
             meta = new MetaData;
@@ -710,7 +720,9 @@ int FFmpegExtractor::stream_component_open(int stream_index)
         if (mFormatCtx->duration != AV_NOPTS_VALUE)
             meta->setInt64(kKeyDuration, mFormatCtx->duration);
 
-        if (avctx->codec_id != CODEC_ID_MP3) {
+        if (avctx->codec_id != CODEC_ID_MP3 &&
+                avctx->codec_id != CODEC_ID_MP1 &&
+                avctx->codec_id != CODEC_ID_MP2) {
             LOGV("audio meta esds:");
             CHECK(meta->findData(kKeyESDS, &type, &data, &size));
             hexdump(data, size);
index 1e77737..2bce75a 100644 (file)
@@ -70,8 +70,10 @@ SoftFFmpegAudio::SoftFFmpegAudio(
     if (!strcmp(name, "OMX.ffmpeg.mp3.decoder")) {
         mMode = MODE_MPEG;
         mIgnoreExtradata = true;
-    } else if (!strcmp(name, "OMX.ffmpeg.mp2.decoder")) {
+    } else if (!strcmp(name, "OMX.ffmpeg.mp1.decoder")) {
         mMode = MODE_MPEGL1;
+    } else if (!strcmp(name, "OMX.ffmpeg.mp2.decoder")) {
+        mMode = MODE_MPEGL2;
     } else if (!strcmp(name, "OMX.ffmpeg.aac.decoder")) {
         mMode = MODE_AAC;
     } else {
@@ -247,6 +249,8 @@ status_t SoftFFmpegAudio::initDecoder() {
         mCtx->codec_id = CODEC_ID_MP3;
         break;
     case MODE_MPEGL1:
+        mCtx->codec_id = CODEC_ID_MP1;
+        break;
     case MODE_MPEGL2:
         mCtx->codec_id = CODEC_ID_MP2;
         break;
@@ -380,6 +384,16 @@ OMX_ERRORTYPE SoftFFmpegAudio::internalSetParameter(
                         "audio_decoder.mp3", OMX_MAX_STRINGNAME_SIZE - 1))
                     supported =  false;
                 break;
+            case MODE_MPEGL1:
+                if (strncmp((const char *)roleParams->cRole,
+                        "audio_decoder.mp1", OMX_MAX_STRINGNAME_SIZE - 1))
+                    supported =  false;
+                break;
+            case MODE_MPEGL2:
+                if (strncmp((const char *)roleParams->cRole,
+                        "audio_decoder.mp2", OMX_MAX_STRINGNAME_SIZE - 1))
+                    supported =  false;
+                break;
             case MODE_AAC:
                 if (strncmp((const char *)roleParams->cRole,
                         "audio_decoder.aac", OMX_MAX_STRINGNAME_SIZE - 1))