Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81fa9c88 authored by vivek mehta's avatar vivek mehta Committed by Ricardo Cerqueira
Browse files

frameworks/base: Enabling mmparser for AVI, ASF, QCP, AAC formats



- Add support in MediaScanner for AVI, DIVX
- Add new mime definitions for AVI, DIVX, WMA, WMV, AAC, QCP, AC3, DIVX311
- Add Extended Extractor, register new sniffers
- Enable DIVX, VC1, WMA, QCELP components in OMXCodec

Patchset 1: Add QCOM_HARDWARE ifdefs.
Patchset 2: Fix AVIExtractor include
Patchset 3: Whitespace.

Conflicts:

	include/media/stagefright/OMXCodec.h
	media/libstagefright/DataSource.cpp
	media/libstagefright/Android.mk
	media/libstagefright/OMXCodec.cpp
	media/libstagefright/StagefrightMediaScanner.cpp

Change-Id: Ie92c8a95f513bc9b915a46144adb603d03d1fa18
Signed-off-by: default avatarEvan McClain <aeroevan@gmail.com>
parent 18e4fa61
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
/*
 * Copyright (C) 2009 The Android Open Source Project
 *
 * Copyright (c) 2010-2011, Code Aurora Forum. All rights reserved.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
@@ -13,6 +13,9 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
/*--------------------------------------------------------------------------
Copyright (c) 2011, Code Aurora Forum. All rights reserved.
--------------------------------------------------------------------------*/

#ifndef OMX_CODEC_H_

@@ -117,6 +120,9 @@ private:
    };

    enum {
#ifdef QCOM_HARDWARE
        kPortIndexBoth   = -1,
#endif
        kPortIndexInput  = 0,
        kPortIndexOutput = 1
    };
@@ -146,6 +152,8 @@ private:
        kOutputBuffersAreUnreadable           = 8192,
#ifdef QCOM_HARDWARE
        kStoreMetaDataInInputVideoBuffers     = 16384,
        kRequiresGlobalFlush                  = 0x20000000, // 2^29
        kRequiresWMAProComponent              = 0x40000000, //2^30
#endif
    };

@@ -245,7 +253,13 @@ private:

    void setAMRFormat(bool isWAMR, int32_t bitRate);
    status_t setAACFormat(int32_t numChannels, int32_t sampleRate, int32_t bitRate);
#ifdef QCOM_HARDWARE
    void setEVRCFormat( int32_t sampleRate, int32_t numChannels, int32_t bitRate);
#endif
    void setG711Format(int32_t numChannels);
#ifdef QCOM_HARDWARE
    void setQCELPFormat( int32_t sampleRate, int32_t numChannels, int32_t bitRate);
#endif

    status_t setVideoPortFormatType(
            OMX_U32 portIndex,
@@ -361,6 +375,10 @@ private:

    OMXCodec(const OMXCodec &);
    OMXCodec &operator=(const OMXCodec &);
#ifdef QCOM_HARDWARE
    status_t setWMAFormat(const sp<MetaData> &inputFormat);
    void setAC3Format(int32_t numChannels, int32_t sampleRate);
#endif
};

struct CodecCapabilities {
+21 −11
Original line number Diff line number Diff line
@@ -47,13 +47,18 @@ public class MediaFile {
    public static final int FILE_TYPE_AAC     = 8;
    public static final int FILE_TYPE_MKA     = 9;
    public static final int FILE_TYPE_FLAC    = 10;
    public static final int FILE_TYPE_3GPA    = 11;
    public static final int FILE_TYPE_AC3     = 12;
    public static final int FILE_TYPE_QCP     = 13;
    public static final int FILE_TYPE_WEBMA   = 14;
    public static final int FILE_TYPE_PCM     = 15;
    private static final int FIRST_AUDIO_FILE_TYPE = FILE_TYPE_MP3;
    private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_FLAC;
    private static final int LAST_AUDIO_FILE_TYPE = FILE_TYPE_PCM;

    // MIDI file types
    public static final int FILE_TYPE_MID     = 11;
    public static final int FILE_TYPE_SMF     = 12;
    public static final int FILE_TYPE_IMY     = 13;
    public static final int FILE_TYPE_MID     = 16;
    public static final int FILE_TYPE_SMF     = 17;
    public static final int FILE_TYPE_IMY     = 18;
    private static final int FIRST_MIDI_FILE_TYPE = FILE_TYPE_MID;
    private static final int LAST_MIDI_FILE_TYPE = FILE_TYPE_IMY;
   
@@ -68,8 +73,9 @@ public class MediaFile {
    public static final int FILE_TYPE_MP2TS   = 28;
    public static final int FILE_TYPE_AVI     = 29;
    public static final int FILE_TYPE_WEBM    = 30;
    public static final int FILE_TYPE_DIVX    = 31;
    private static final int FIRST_VIDEO_FILE_TYPE = FILE_TYPE_MP4;
    private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_WEBM;
    private static final int LAST_VIDEO_FILE_TYPE = FILE_TYPE_DIVX;
    
    // More video file types
    public static final int FILE_TYPE_MP2PS   = 200;
@@ -77,12 +83,12 @@ public class MediaFile {
    private static final int LAST_VIDEO_FILE_TYPE2 = FILE_TYPE_MP2PS;

    // Image file types
    public static final int FILE_TYPE_JPEG    = 31;
    public static final int FILE_TYPE_GIF     = 32;
    public static final int FILE_TYPE_PNG     = 33;
    public static final int FILE_TYPE_BMP     = 34;
    public static final int FILE_TYPE_WBMP    = 35;
    public static final int FILE_TYPE_WEBP    = 36;
    public static final int FILE_TYPE_JPEG    = 32;
    public static final int FILE_TYPE_GIF     = 33;
    public static final int FILE_TYPE_PNG     = 34;
    public static final int FILE_TYPE_BMP     = 35;
    public static final int FILE_TYPE_WBMP    = 36;
    public static final int FILE_TYPE_WEBP    = 37;
    private static final int FIRST_IMAGE_FILE_TYPE = FILE_TYPE_JPEG;
    private static final int LAST_IMAGE_FILE_TYPE = FILE_TYPE_WEBP;
   
@@ -174,13 +180,17 @@ public class MediaFile {
        addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg", MtpConstants.FORMAT_MP3);
        addFileType("M4A", FILE_TYPE_M4A, "audio/mp4", MtpConstants.FORMAT_MPEG);
        addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav", MtpConstants.FORMAT_WAV);
        addFileType("WAV", FILE_TYPE_PCM, "audio/wav");
        addFileType("AMR", FILE_TYPE_AMR, "audio/amr");
        addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb");
        addFileType("DIVX", FILE_TYPE_DIVX, "video/divx");
        if (isWMAEnabled()) {
            addFileType("WMA", FILE_TYPE_WMA, "audio/x-ms-wma", MtpConstants.FORMAT_WMA);
        }
        addFileType("QCP", FILE_TYPE_QCP, "audio/qcp");
        addFileType("OGG", FILE_TYPE_OGG, "application/ogg", MtpConstants.FORMAT_OGG);
        addFileType("OGA", FILE_TYPE_OGG, "application/ogg", MtpConstants.FORMAT_OGG);
        addFileType("WEBM", FILE_TYPE_WEBMA, "audio/webm");
        addFileType("AAC", FILE_TYPE_AAC, "audio/aac", MtpConstants.FORMAT_AAC);
        addFileType("AAC", FILE_TYPE_AAC, "audio/aac-adts", MtpConstants.FORMAT_AAC);
        addFileType("MKA", FILE_TYPE_MKA, "audio/x-matroska");
+0 −0

File mode changed from 100644 to 100755.

+15 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2009 The Android Open Source Project
 * Copyright (C) 2010-2011 Code Aurora Forum
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
@@ -26,6 +27,11 @@
#include "include/DRMExtractor.h"
#include "include/FLACExtractor.h"
#include "include/AACExtractor.h"
#ifdef QCOM_HARDWARE
#include "include/ExtendedExtractor.h"
#else
#include "include/AVIExtractor.h"
#endif

#include "matroska/MatroskaExtractor.h"

@@ -80,6 +86,12 @@ bool DataSource::sniff(
                *mimeType = newMimeType;
                *confidence = newConfidence;
                *meta = newMeta;
#ifdef QCOM_HARDWARE
                if(*confidence >= 0.6f) {
                    LOGV("Ignore other Sniffers - confidence = %f , mimeType = %s",*confidence,mimeType->string());
                    break;
                }
#endif
            }
        }
    }
@@ -113,6 +125,9 @@ void DataSource::RegisterDefaultSniffers() {
    RegisterSniffer(SniffMP3);
    RegisterSniffer(SniffAAC);
    RegisterSniffer(SniffMPEG2PS);
#ifdef QCOM_HARDWARE
    ExtendedExtractor::RegisterSniffers();
#endif

    char value[PROPERTY_VALUE_MAX];
    if (property_get("drm.service.enabled", value, NULL)
+41 −0
Original line number Diff line number Diff line
@@ -256,6 +256,12 @@ static const char *FourCC2MIME(uint32_t fourcc) {
        case FOURCC('a', 'v', 'c', '1'):
            return MEDIA_MIMETYPE_VIDEO_AVC;

#ifdef QCOM_HARDWARE
        case FOURCC('s', 'q', 'c', 'p'):
            return MEDIA_MIMETYPE_AUDIO_QCELP;
        case FOURCC('s', 'e', 'v', 'c'):
            return MEDIA_MIMETYPE_AUDIO_EVRC;
#endif
        default:
            CHECK(!"should not be here.");
            return NULL;
@@ -917,6 +923,10 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
        case FOURCC('m', 'p', '4', 'a'):
        case FOURCC('s', 'a', 'm', 'r'):
        case FOURCC('s', 'a', 'w', 'b'):
#ifdef QCOM_HARDWARE
        case FOURCC('s', 'e', 'v', 'c'):
        case FOURCC('s', 'q', 'c', 'p'):
#endif
        {
            uint8_t buffer[8 + 20];
            if (chunk_data_size < (ssize_t)sizeof(buffer)) {
@@ -1348,6 +1358,25 @@ status_t MPEG4Extractor::parseChunk(off64_t *offset, int depth) {
            break;
        }

#ifdef QCOM_HARDWARE
         case FOURCC('d', 'q', 'c', 'p'):
         case FOURCC('d', 'e', 'v', 'c'):
         {
            uint8_t buffer[20];

            if (mDataSource->readAt(
                 data_offset, buffer, sizeof(buffer)) < (ssize_t)sizeof(buffer)) {
                 LOGE("Buffered returned error \n");
                 return ERROR_IO;
            }

            uint32_t vendor = U32_AT(&buffer[0]);
            uint8_t decoder_version = ((U16_AT(&buffer[4])) & 0xff00) >>8;
            uint8_t frames_per_sample = (U16_AT(&buffer[4])) & 0x00ff;
            *offset += chunk_size;
            break;
        }
#endif
        case FOURCC('m', 'd', 'a', 't'):
        {
            if (!mIsDrm) {
@@ -1740,6 +1769,13 @@ status_t MPEG4Extractor::updateAudioTrackInfoFromESDS_MPEG4Audio(
        return ERROR_MALFORMED;
    }

#ifdef QCOM_HARDWARE
    if (objectTypeIndication == 0xA0) {
        // This isn't MPEG4 audio at all, it's EVRC
       mLastTrack->meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_EVRC);
       return OK;
    }
#endif
    if (objectTypeIndication == 0xe1) {
        // This isn't MPEG4 audio at all, it's QCELP 14k...
        mLastTrack->meta->setCString(kKeyMIMEType, MEDIA_MIMETYPE_AUDIO_QCELP);
@@ -2256,7 +2292,12 @@ static bool LegacySniffMPEG4(
        return false;
    }

#ifdef QCOM_HARDWARE
    if (!memcmp(header, "ftyp3g2a", 8) || !memcmp(header, "ftyp3g2b", 8) || !memcmp(header, "ftyp3g2c", 8)
        || !memcmp(header, "ftyp3gp", 7) || !memcmp(header, "ftypmp42", 8)
#else
    if (!memcmp(header, "ftyp3gp", 7) || !memcmp(header, "ftypmp42", 8)
#endif
        || !memcmp(header, "ftyp3gr6", 8) || !memcmp(header, "ftyp3gs6", 8)
        || !memcmp(header, "ftyp3ge6", 8) || !memcmp(header, "ftyp3gg6", 8)
        || !memcmp(header, "ftypisom", 8) || !memcmp(header, "ftypM4V ", 8)
Loading