18f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani/*
28f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * Copyright 2015 The Android Open Source Project
38f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani *
48f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * Licensed under the Apache License, Version 2.0 (the "License");
58f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * you may not use this file except in compliance with the License.
68f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * You may obtain a copy of the License at
78f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani *
88f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani *      http://www.apache.org/licenses/LICENSE-2.0
98f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani *
108f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * Unless required by applicable law or agreed to in writing, software
118f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * distributed under the License is distributed on an "AS IS" BASIS,
128f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * See the License for the specific language governing permissions and
148f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani * limitations under the License.
158f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani */
168f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
178f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#ifndef SOFT_MPEG2_H_
188f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
198f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define SOFT_MPEG2_H_
208f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
218f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#include "SoftVideoDecoderOMXComponent.h"
228f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#include <sys/time.h>
238f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
248f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhaninamespace android {
258f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
268f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define ivd_aligned_malloc(alignment, size) memalign(alignment, size)
278f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define ivd_aligned_free(buf) free(buf)
288f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
298f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani/** Number of entries in the time-stamp array */
308f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define MAX_TIME_STAMPS 64
318f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
328f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani/** Maximum number of cores supported by the codec */
338f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define CODEC_MAX_NUM_CORES 4
348f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
358f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define CODEC_MAX_WIDTH     1920
368f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
378f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define CODEC_MAX_HEIGHT    1088
388f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
398f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani/** Input buffer size */
408f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define INPUT_BUF_SIZE (1024 * 1024)
418f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
428f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define MIN(a, b) ((a) < (b)) ? (a) : (b)
438f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
448f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani/** Used to remove warnings about unused parameters */
458f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define UNUSED(x) ((void)(x))
468f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
478f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani/** Get time */
488f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define GETTIME(a, b) gettimeofday(a, b);
498f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
508f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani/** Compute difference between start and end */
518f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define TIME_DIFF(start, end, diff) \
528f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    diff = ((end.tv_sec - start.tv_sec) * 1000000) + \
538f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            (end.tv_usec - start.tv_usec);
548f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
558f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhanistruct SoftMPEG2 : public SoftVideoDecoderOMXComponent {
568f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    SoftMPEG2(
578f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            const char *name, const OMX_CALLBACKTYPE *callbacks,
588f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            OMX_PTR appData, OMX_COMPONENTTYPE **component);
598f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
608f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhaniprotected:
618f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    virtual ~SoftMPEG2();
628f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
638f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    virtual void onQueueFilled(OMX_U32 portIndex);
648f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    virtual void onPortFlushCompleted(OMX_U32 portIndex);
658f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    virtual void onReset();
668f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    virtual OMX_ERRORTYPE internalSetParameter(OMX_INDEXTYPE index, const OMX_PTR params);
678f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhaniprivate:
688f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    // Number of input and output buffers
698f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    enum {
708f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        kNumBuffers = 8
718f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    };
728f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
738f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    iv_obj_t *mCodecCtx;         // Codec context
748f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    iv_mem_rec_t *mMemRecords;   // Memory records requested by the codec
758f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    size_t mNumMemRecords;       // Number of memory records requested by the codec
768f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
778f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    size_t mNumCores;            // Number of cores to be uesd by the codec
788f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
798f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    struct timeval mTimeStart;   // Time at the start of decode()
808f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    struct timeval mTimeEnd;     // Time at the end of decode()
818f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
828f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    // Internal buffer to be used to flush out the buffers from decoder
838f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    uint8_t *mFlushOutBuffer;
848f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
858f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    // Status of entries in the timestamp array
868f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    bool mTimeStampsValid[MAX_TIME_STAMPS];
878f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
888f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    // Timestamp array - Since codec does not take 64 bit timestamps,
898f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    // they are maintained in the plugin
908f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    OMX_S64 mTimeStamps[MAX_TIME_STAMPS];
918f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
928f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#ifdef FILE_DUMP_ENABLE
938f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    char mInFile[200];
948f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#endif /* FILE_DUMP_ENABLE */
958f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
968f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    OMX_COLOR_FORMATTYPE mOmxColorFormat;    // OMX Color format
978f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    IV_COLOR_FORMAT_T mIvColorFormat;        // Ittiam Color format
988f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
998f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    bool mIsInFlush;        // codec is flush mode
1008f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    bool mReceivedEOS;      // EOS is receieved on input port
1018f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    bool mInitNeeded;
1028f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    uint32_t mNewWidth;
1038f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    uint32_t mNewHeight;
1048f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    // The input stream has changed to a different resolution, which is still supported by the
1058f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    // codec. So the codec is switching to decode the new resolution.
1068f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    bool mChangingResolution;
1078f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    bool mFlushNeeded;
1088f81045b9219cada36c7be7e6f0541cfa7bd94c8Venkatarama Avadhani    bool mWaitForI;
1091ef423ccd884679893b3622c86aae9792b345088Harish Mahendrakar    size_t mStride;
1108f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
1118f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    status_t initDecoder();
1128f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    status_t deInitDecoder();
1138f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    status_t setFlushMode();
1148f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    status_t setParams(size_t stride);
1158f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    void logVersion();
1168f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    status_t setNumCores();
1178f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    status_t resetDecoder();
1188f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    status_t resetPlugin();
1198f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    status_t reInitDecoder();
1208f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
12187fdee0bc9e3ac4d2a88ef0a8e150cfdf08c161dWonsik Kim    bool setDecodeArgs(
1228f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            ivd_video_decode_ip_t *ps_dec_ip,
1238f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            ivd_video_decode_op_t *ps_dec_op,
1248f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            OMX_BUFFERHEADERTYPE *inHeader,
1258f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            OMX_BUFFERHEADERTYPE *outHeader,
1268f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            size_t timeStampIx);
1278f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
1288f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    DISALLOW_EVIL_CONSTRUCTORS(SoftMPEG2);
1298f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani};
1308f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
1318f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#ifdef FILE_DUMP_ENABLE
1328f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
1338f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define INPUT_DUMP_PATH     "/sdcard/media/mpeg2d_input"
1348f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define INPUT_DUMP_EXT      "m2v"
1358f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
1368f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define GENERATE_FILE_NAMES() {                         \
1378f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    GETTIME(&mTimeStart, NULL);                         \
1388f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    strcpy(mInFile, "");                                \
1398f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    sprintf(mInFile, "%s_%ld.%ld.%s", INPUT_DUMP_PATH,  \
1408f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            mTimeStart.tv_sec, mTimeStart.tv_usec,      \
1418f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            INPUT_DUMP_EXT);                            \
1428f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani}
1438f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
1448f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define CREATE_DUMP_FILE(m_filename) {                  \
1458f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    FILE *fp = fopen(m_filename, "wb");                 \
1468f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    if (fp != NULL) {                                   \
1478f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        fclose(fp);                                     \
1488f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    } else {                                            \
1498f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        ALOGD("Could not open file %s", m_filename);    \
1508f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    }                                                   \
1518f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani}
1528f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define DUMP_TO_FILE(m_filename, m_buf, m_size)         \
1538f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani{                                                       \
1548f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    FILE *fp = fopen(m_filename, "ab");                 \
1558f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    if (fp != NULL && m_buf != NULL) {                  \
1568f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        int i;                                          \
1578f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        i = fwrite(m_buf, 1, m_size, fp);               \
1588f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        ALOGD("fwrite ret %d to write %d", i, m_size);  \
1598f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        if (i != (int)m_size) {                         \
1608f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            ALOGD("Error in fwrite, returned %d", i);   \
1618f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani            perror("Error in write to file");           \
1628f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        }                                               \
1638f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        fclose(fp);                                     \
1648f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    } else {                                            \
1658f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani        ALOGD("Could not write to file %s", m_filename);\
1668f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani    }                                                   \
1678f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani}
1688f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#else /* FILE_DUMP_ENABLE */
1698f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define INPUT_DUMP_PATH
1708f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define INPUT_DUMP_EXT
1718f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define OUTPUT_DUMP_PATH
1728f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define OUTPUT_DUMP_EXT
1738f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define GENERATE_FILE_NAMES()
1748f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define CREATE_DUMP_FILE(m_filename)
1758f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#define DUMP_TO_FILE(m_filename, m_buf, m_size)
1768f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#endif /* FILE_DUMP_ENABLE */
1778f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
1788f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani} // namespace android
1798f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani
1808f9d9d06ed6c8447c7fd02745b2a22dd4bba8e7eVenkatarama Avadhani#endif  // SOFT_MPEG2_H_
181