17c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/*
27c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Copyright (C) 2011 The Android Open Source Project
37c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
47c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Licensed under the Apache License, Version 2.0 (the "License");
57c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * you may not use this file except in compliance with the License.
67c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * You may obtain a copy of the License at
77c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
87c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *      http://www.apache.org/licenses/LICENSE-2.0
97c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Unless required by applicable law or agreed to in writing, software
117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * distributed under the License is distributed on an "AS IS" BASIS,
127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * See the License for the specific language governing permissions and
147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * limitations under the License.
157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*************************************************************************
187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @file   VideoEditorMp3Reader.cpp
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi* @brief  StageFright shell MP3 Reader
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*************************************************************************
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define LOG_NDEBUG 1
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define LOG_TAG "VIDEOEDITOR_MP3READER"
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * HEADERS
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Debug.h"
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4SYS_AccessUnit.h"
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorMp3Reader.h"
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "VideoEditorUtils.h"
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "utils/Log.h"
35c4689fae1bdb8d1c94eb28af1b2a1f30d2b1a3daJames Dong#include <media/stagefright/foundation/ADebug.h>
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaBufferGroup.h>
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/DataSource.h>
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/FileSource.h>
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaBuffer.h>
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaDefs.h>
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaExtractor.h>
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MediaSource.h>
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include <media/stagefright/MetaData.h>
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * SOURCE CLASS
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundarginamespace android {
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * ENGINE INTERFACE
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi **************************************************************************
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure VideoEditorMp3Reader_Context
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    This structure defines the context of the SF MP3 reader shell.
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi **************************************************************************
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct {
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    sp<DataSource>              mDataSource;
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    sp<MediaExtractor>          mExtractor;
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    sp<MediaSource>             mMediaSource;
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_AudioStreamHandler*      mAudioStreamHandler;
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_AccessUnit            mAudioAu;
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Time                  mMaxDuration;
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8                 mStreamNumber;
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Bool                  mSeeking;
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Time                  mSeekTime;
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    uint32_t                    mExtractorFlags;
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} VideoEditorMp3Reader_Context;
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    create an instance of the MP3 reader
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note     allocates the context
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext:        (OUT)    pointer on a reader context
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR                 there is no error
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_ALLOC                a memory allocation has failed
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER            at least one parameter is not valid
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ****************************************************************************
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_create(M4OSA_Context *pContext) {
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext = M4OSA_NULL;
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_CHECK(M4OSA_NULL != pContext, M4ERR_PARAMETER);
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
912703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_create begin");
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Context allocation & initialization */
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SAFE_MALLOC(pReaderContext, VideoEditorMp3Reader_Context, 1,
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader");
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mAudioStreamHandler  = M4OSA_NULL;
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mAudioAu.dataAddress = M4OSA_NULL;
99aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    pReaderContext->mMaxDuration = 0;
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pContext = pReaderContext;
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp:
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR == err) {
1042703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_create no error");
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } else {
1062703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_create ERROR 0x%X", err);
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1082703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_create end");
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief     destroy the instance of the MP3 reader
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note      after this call the context is invalid
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     context:        (IN)    Context of the reader
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR                 there is no error
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER            The input parameter is not properly set
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_destroy(M4OSA_Context pContext) {
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)pContext;
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_CHECK(M4OSA_NULL != pReaderContext, M4ERR_PARAMETER);
1272703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_destroy begin");
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SAFE_FREE(pReaderContext);
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp:
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (M4NO_ERROR == err) {
1322703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_destroy no error");
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } else {
1342703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_destroy ERROR 0x%X", err);
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1362703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_destroy end");
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    open the reader and initializes its created instance
1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    this function opens the MP3 file
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    context:            (IN)    Context of the reader
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pFileDescriptor:    (IN)    Pointer to proprietary data identifying
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                       the media to open
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR                     there is no error
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER                the context is NULL
1491dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava * @return    M4ERR_BAD_CONTEXT              provided context is not a valid one
1501dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava * @return    M4ERR_UNSUPPORTED_MEDIA_TYPE   the media is DRM protected
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_open(M4OSA_Context context,
1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_Void* pFileDescriptor){
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (VideoEditorMp3Reader_Context*)context;
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1592703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_open begin");
1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Check function parameters*/
1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext),  M4ERR_PARAMETER,
1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_open: invalid context pointer");
1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_NULL == pFileDescriptor), M4ERR_PARAMETER,
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_open: invalid pointer pFileDescriptor");
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1662703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_open Datasource start %s",
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (char*)pFileDescriptor);
168eab39fb973444f2c03b0e92d4df263b83c31f71bDheeraj Sharma    pReaderContext->mDataSource = new FileSource ((char*)pFileDescriptor);
1692703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_open Datasource end");
1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pReaderContext->mDataSource == NULL) {
1722703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_open Datasource error");
1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return UNKNOWN_ERROR;
1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1762703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_open extractor start");
1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mExtractor = MediaExtractor::Create(
1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pReaderContext->mDataSource,MEDIA_MIMETYPE_AUDIO_MPEG);
1792703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_open extractor end");
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pReaderContext->mExtractor == NULL)    {
1822703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_open extractor error");
1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return UNKNOWN_ERROR;
1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mStreamNumber = 0;
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1871dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava    int32_t isDRMProtected = 0;
1881dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava    sp<MetaData> meta = pReaderContext->mExtractor->getMetaData();
1891dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava    meta->findInt32(kKeyIsDRM, &isDRMProtected);
1901dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava    if (isDRMProtected) {
1912703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_open error - DRM Protected");
1921dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava        return M4ERR_UNSUPPORTED_MEDIA_TYPE;
1931dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava    }
1941dd524b567ef1bb0591eb8adce10d43841376f5dSantosh Madhava
1952703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_open end");
1967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
1977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi **************************************************************************
2007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    close the reader
2017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    this function closes the MP3 reader
2027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    context:        (IN)      Context of the reader
2037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR               there is no error
2047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER          the context is NULL
2057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi **************************************************************************
2067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
2077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_close(M4OSA_Context context) {
2087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
2097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)context;
2107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
2117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2122703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_close begin");
2137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Check function parameters */
2147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext), M4ERR_PARAMETER,
2157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            "VideoEditorMp3Reader_close: invalid context pointer");
2167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pReaderContext->mAudioStreamHandler != NULL) {
2187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (M4OSA_NULL != pReaderContext->mAudioStreamHandler->\
2197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        m_basicProperties.m_pDecoderSpecificInfo) {
220694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(pReaderContext->mAudioStreamHandler->\
2217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                m_basicProperties.m_pDecoderSpecificInfo);
2227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pReaderContext->mAudioStreamHandler->m_basicProperties.\
2237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                m_decoderSpecificInfoSize = 0;
2247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pReaderContext->mAudioStreamHandler->m_basicProperties.\
2257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                m_pDecoderSpecificInfo = M4OSA_NULL;
2267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        /* Finally destroy the stream handler */
229694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu        free(pReaderContext->mAudioStreamHandler);
2307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pReaderContext->mAudioStreamHandler = M4OSA_NULL;
2317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (pReaderContext->mAudioAu.dataAddress != NULL) {
233694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            free(pReaderContext->mAudioAu.dataAddress);
2347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pReaderContext->mAudioAu.dataAddress = NULL;
2357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
2377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mMediaSource->stop();
2397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mMediaSource.clear();
240eab39fb973444f2c03b0e92d4df263b83c31f71bDheeraj Sharma    pReaderContext->mExtractor.clear();
2417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mDataSource.clear();
2427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2432703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_close end ");
2447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
2457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
2467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
2477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    get an option value from the reader
2497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
2507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          it allows the caller to retrieve a property value:
2517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
2527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    context:        (IN)    Context of the reader
2537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    optionId:       (IN)    indicates the option to get
2547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pValue:         (OUT)   pointer to structure or value (allocated
2557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                   by user) where option is stored
2567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
2577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR             there is no error
2587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER        at least one parameter is not properly set
2597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_BAD_OPTION_ID    when the option ID is not a valid one
2607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
2617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
2627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_getOption(M4OSA_Context context,
2637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi          M4OSA_OptionID optionId, M4OSA_DataOption pValue) {
2647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
2657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)context;
2667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
2677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2682703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getOption begin: optionId= %d ",(int)optionId);
2697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext), M4ERR_PARAMETER,
2717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "invalid value pointer");
2727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER,
2737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "invalid value pointer");
2747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(optionId) {
2767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4READER_kOptionID_Duration:
2777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
2782703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block            ALOGV("Mp3Reader duration=%ld",pReaderContext->mMaxDuration);
279aa382f3637a68361989d5b70e3184bddcc472d3dhongteng            *(M4OSA_Time*)pValue = pReaderContext->mMaxDuration;
2807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        break;
2827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4READER_kOptionID_Bitrate:
2847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
2857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            M4OSA_UInt32* pBitrate = (M4OSA_UInt32*)pValue;
2867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if (M4OSA_NULL != pReaderContext->mAudioStreamHandler) {
2877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                *pBitrate = pReaderContext->mAudioStreamHandler->\
2887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                    m_basicProperties.m_averageBitRate;
2897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            } else {
2907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pBitrate = 0;
2917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                err = M4ERR_PARAMETER;
2927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
2937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
2947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        break;
2957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4READER_kOptionID_Mp3Id3v1Tag:
2977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        break;
2987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
2997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4READER_kOptionID_Mp3Id3v2Tag:
3007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        break;
3017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    case M4READER_kOptionID_GetMetadata:
3037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        break;
3047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    default :
3067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
3072703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block            ALOGV("VideoEditorMp3Reader_getOption:  M4ERR_BAD_OPTION_ID");
3087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4ERR_BAD_OPTION_ID;
3097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
3107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3112703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getOption end ");
3127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
3137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
3147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
3157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
3167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   set an option value of the reader
3177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
3187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *          it allows the caller to set a property value:
3197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
3207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   context:    (IN)        Context of the reader
3217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   optionId:   (IN)        Identifier indicating the option to set
3227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pValue:     (IN)        Pointer to structure or value (allocated
3237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                  by user) where option is stored
3247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
3257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4NO_ERROR              There is no error
3267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_BAD_OPTION_ID     The option ID is not a valid one
3277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_STATE             State automaton is not applied
3287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return  M4ERR_PARAMETER         The option parameter is invalid
3297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
3307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
3317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_setOption(M4OSA_Context context,
3327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4OSA_OptionID optionId, M4OSA_DataOption pValue) {
3337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
3347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)context;
3357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
3367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3372703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_Context begin: optionId: %d Value: %d ",
3387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (int)optionId,(int)pValue);
3397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_NULL == pReaderContext), M4ERR_PARAMETER,
3417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "invalid context pointer");
3427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((M4OSA_NULL == pValue), M4ERR_PARAMETER,
3437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "invalid value pointer");
3447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    switch(optionId) {
3467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        case M4READER_kOptionID_SetOsaFileReaderFctsPtr:
3477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        default :
3487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        {
3497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            err = M4NO_ERROR;
3507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
3517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3522703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_Context end ");
3537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
3547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
3557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
3567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
3577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    jump into the stream at the specified time
3587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
3597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    context:      (IN)   Context of the reader
3607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pStreamHandler(IN)   stream description of the stream to make jump
3617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pTime         (I/O)IN:the time to jump to (in ms)
3627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                              OUT: the time to which the stream really jumped
3637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR           there is no error
3647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER      at least one parameter is not properly set
3657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ******************************************************************************
3667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
3677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_jump(M4OSA_Context context,
3687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4_StreamHandler *pStreamHandler, M4OSA_Int32* pTime) {
3697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
3707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)context;
3717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamID streamIdArray[2];
3727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
3737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_AccessUnit* pAu;
374aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    M4OSA_Time time64 = (M4OSA_Time)*pTime;
3757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3762703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_jump begin");
3777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER,
3787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_jump: invalid context");
3797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER,
3807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_jump: invalid pointer to M4_StreamHandler");
3817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pTime == 0), M4ERR_PARAMETER,
3827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_jump: invalid time pointer");
3837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if(pStreamHandler == (M4_StreamHandler*)pReaderContext->\
3857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mAudioStreamHandler){
3867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAu = &pReaderContext->mAudioAu;
3877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } else {
3882703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_jump: passed StreamHandler is not known");
3897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
3907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
3917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamIdArray[0] = pStreamHandler->m_streamId;
3937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamIdArray[1] = 0;
3947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3952703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_jump time ms %ld ", time64);
3967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
3977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->CTS = time64;
3987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->DTS = time64;
3997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    time64 = time64 * 1000; /* Convert the time into micro sec */
4012703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_jump time us %ld ", time64);
4027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mSeeking = M4OSA_TRUE;
4047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mSeekTime = time64;
4057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    time64 = time64 / 1000; /* Convert the time into milli sec */
407aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    *pTime = (M4OSA_Int32)time64;
4082703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_jump end ");
4097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
4107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
4117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
4127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
4137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Get the next stream found in the media file
4147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
4157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    context:        (IN)  Context of the reader
4167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pMediaFamily:   (OUT) pointer to a user allocated
4177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                 M4READER_MediaFamily that will be filled with
4187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                 the media family of the found stream
4197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pStreamHandler: (OUT) pointer to a stream handler that will be
4207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                 allocated and filled with stream description
4217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
4227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR             there is no error
4237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4WAR_NO_MORE_STREAM   no more available stream in the media
4247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER        at least one parameter is not properly set
4257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
4267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
4277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_getNextStream(M4OSA_Context context,
4287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4READER_MediaFamily *pMediaFamily,
4297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4_StreamHandler **pStreamHandlerParam) {
4307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
4317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)context;
4327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
4337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamID streamIdArray[2];
4347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamDescription streamDesc;
4357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_AudioStreamHandler* pAudioStreamHandler;
4367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler* pStreamHandler;
4377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8 type, temp;
4387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Bool haveAudio = M4OSA_FALSE;
4397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    sp<MetaData> meta = NULL;
4407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    int64_t Duration;
4417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4422703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getNextStream begin");
4437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pReaderContext == 0),      M4ERR_PARAMETER,
4447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_getNextStream: invalid context");
4457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pMediaFamily == 0),        M4ERR_PARAMETER,
4467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_getNextStream: invalid pointer to MediaFamily");
4477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pStreamHandlerParam == 0), M4ERR_PARAMETER,
4487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_getNextStream: invalid pointer to StreamHandler");
4497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4502703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getNextStream stream number = %d",
4517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pReaderContext->mStreamNumber);
4527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pReaderContext->mStreamNumber >= 1) {
4532703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getNextStream max number of stream reached");
4547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4WAR_NO_MORE_STREAM;
4557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mStreamNumber = pReaderContext->mStreamNumber + 1;
4572703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getNextStream number of Tracks%d",
4587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pReaderContext->mExtractor->countTracks());
4597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    for (temp = 0; temp < pReaderContext->mExtractor->countTracks(); temp++) {
4607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        meta = pReaderContext->mExtractor->getTrackMetaData(temp);
4617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        const char *mime;
4627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        CHECK(meta->findCString(kKeyMIMEType, &mime));
4637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (!haveAudio && !strncasecmp(mime, "audio/", 6)) {
4657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pReaderContext->mMediaSource =
4667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pReaderContext->mExtractor->getTrack(temp);
4677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            pReaderContext->mMediaSource->start();
4687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            haveAudio = true;
4697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if (haveAudio) {
4727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            break;
4737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
4747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (!haveAudio) {
4772703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getNextStream no more stream ");
4787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pReaderContext->mDataSource.clear();
4797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4WAR_NO_MORE_STREAM;
4807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
4817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mExtractorFlags = pReaderContext->mExtractor->flags();
4837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pMediaFamily = M4READER_kMediaFamilyAudio;
4847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamDesc.duration = meta->findInt64(kKeyDuration, &Duration);
4867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamDesc.duration = (M4OSA_Time)Duration/1000;
4877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    meta->findInt32(kKeyBitRate, (int32_t*)&streamDesc.averageBitrate);
4897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    meta->findInt32(kKeySampleRate, (int32_t*)&streamDesc.timeScale);
4902703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("Bitrate = %d, SampleRate = %d duration = %lld",
4917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        streamDesc.averageBitrate,streamDesc.timeScale,Duration/1000);
4927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
4937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamDesc.streamType = M4SYS_kMP3;
4947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamDesc.profileLevel = 0xFF ;
4957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamDesc.streamID = pReaderContext->mStreamNumber;
4967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamDesc.decoderSpecificInfo = M4OSA_NULL;
4977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamDesc.decoderSpecificInfoSize = 0;
4987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamDesc.maxBitrate = streamDesc.averageBitrate;
4997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /*    Allocate the audio stream handler and set its parameters    */
501694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu    pAudioStreamHandler = (M4_AudioStreamHandler*)M4OSA_32bitAlignedMalloc(
5027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        sizeof(M4_AudioStreamHandler), M4READER_MP3,
5037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_Char*)"M4_AudioStreamHandler");
5047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pAudioStreamHandler == M4OSA_NULL) {
5062703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getNextStream malloc failed");
5077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pReaderContext->mMediaSource->stop();
5087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pReaderContext->mMediaSource.clear();
5097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pReaderContext->mDataSource.clear();
5107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_ALLOC;
5127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler =(M4_StreamHandler*)(pAudioStreamHandler);
5147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pStreamHandlerParam = pStreamHandler;
5157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mAudioStreamHandler = pAudioStreamHandler;
5167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAudioStreamHandler->m_structSize = sizeof(M4_AudioStreamHandler);
5187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (meta == NULL) {
5202703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getNextStream meta is NULL");
5217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAudioStreamHandler->m_samplingFrequency = streamDesc.timeScale;
5247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler->m_pDecoderSpecificInfo =
5257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (M4OSA_UInt8*)(streamDesc.decoderSpecificInfo);
5267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler->m_decoderSpecificInfoSize =
5277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        streamDesc.decoderSpecificInfoSize;
5287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    meta->findInt32(kKeyChannelCount,
5307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (int32_t*)&pAudioStreamHandler->m_nbChannels);
5317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAudioStreamHandler->m_byteFrameLength = 1152;
5327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAudioStreamHandler->m_byteSampleSize = 2;
5337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler->m_pUserData = NULL;
5357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler->m_streamId = streamDesc.streamID;
5367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler->m_duration = streamDesc.duration;
5377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mMaxDuration = streamDesc.duration;
5387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler->m_averageBitRate = streamDesc.averageBitrate;
5397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler->m_maxAUSize = 0;
5417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pStreamHandler->m_streamType = M4DA_StreamTypeAudioMp3;
5427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5432703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getNextStream end ");
5447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
5457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
5467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
5487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
5497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    fill the access unit structure with initialization values
5507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    context:        (IN)     Context of the reader
5517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pStreamHandler: (IN)     pointer to the stream handler to which
5527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                    the access unit will be associated
5537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pAccessUnit:    (IN/OUT) pointer to the access unit (allocated by
5547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                    the caller) to initialize
5557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return   M4NO_ERROR               there is no error
5567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return   M4ERR_PARAMETER          at least one parameter is not properly set
5577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
5587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
5597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_fillAuStruct(M4OSA_Context context,
5607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4_StreamHandler *pStreamHandler, M4_AccessUnit *pAccessUnit) {
5617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
5627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)context;
5637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_AccessUnit *pAu;
5647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER,
5667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_fillAuStruct: invalid context");
5677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER,
5687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_fillAuStruct invalid pointer to StreamHandler");
5697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pAccessUnit == 0),    M4ERR_PARAMETER,
5707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_fillAuStruct: invalid pointer to M4_AccessUnit");
5717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5722703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_fillAuStruct start ");
5737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if(pStreamHandler == (M4_StreamHandler*)pReaderContext->\
5747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mAudioStreamHandler){
5757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAu = &pReaderContext->mAudioAu;
5767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } else {
5772703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_fillAuStruct StreamHandler is not known");
5787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
5797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
5807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Initialize pAu structure */
5827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->dataAddress = M4OSA_NULL;
5837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->size        = 0;
5847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->CTS         = 0;
5857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->DTS         = 0;
5867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->attribute   = 0;
5877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->nbFrag      = 0;
5887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Initialize pAccessUnit structure */
5907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAccessUnit->m_size         = 0;
5917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAccessUnit->m_CTS          = 0;
5927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAccessUnit->m_DTS          = 0;
5937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAccessUnit->m_attribute    = 0;
5947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAccessUnit->m_dataAddress  = M4OSA_NULL;
5957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAccessUnit->m_maxsize      = pStreamHandler->m_maxAUSize;
5967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAccessUnit->m_streamID     = pStreamHandler->m_streamId;
5977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAccessUnit->m_structSize   = sizeof(M4_AccessUnit);
5987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
5992703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_fillAuStruct end");
6007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return M4NO_ERROR;
6017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
6027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
6047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
6057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    reset the stream, i.e seek it to the beginning
6067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
6077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     context:          (IN)  Context of the reader
6087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param     pStreamHandler    (IN)  The stream handler of the stream to reset
6097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR              there is no error
6107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER         at least one parameter is not properly set
6117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
6127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
6137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_reset(M4OSA_Context context,
6147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4_StreamHandler *pStreamHandler) {
6157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
6167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)context;
6177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
6197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_StreamID streamIdArray[2];
6207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_AccessUnit* pAu;
621aa382f3637a68361989d5b70e3184bddcc472d3dhongteng    M4OSA_Time time64 = 0;
6227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6232703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_reset start");
6247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER,
6257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_reset: invalid context");
6267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER,
6277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_reset: invalid pointer to M4_StreamHandler");
6287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pStreamHandler == (M4_StreamHandler*)pReaderContext->\
6307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mAudioStreamHandler) {
6317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAu = &pReaderContext->mAudioAu;
6327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } else {
6332703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_reset StreamHandler is not known");
6347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
6357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamIdArray[0] = pStreamHandler->m_streamId;
6377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    streamIdArray[1] = 0;
6387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->CTS = time64;
6397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->DTS = time64;
6407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mSeeking = M4OSA_TRUE;
6427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mSeekTime = time64;
6437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6442703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_reset end");
6457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
6467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
6477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
6487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
6497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief   Gets an access unit (AU) from the stream handler source.
6507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    AU is the smallest possible amount of data to be decoded by decoder
6517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *
6527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   context:       (IN) Context of the reader
6537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pStreamHandler (IN) The stream handler of the stream to make jump
6547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param   pAccessUnit    (I/O)Pointer to an access unit to fill with read data
6557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR        there is no error
6567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER   at least one parameter is not properly set
6577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @returns   M4ERR_ALLOC       memory allocation failed
6587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @returns   M4WAR_NO_MORE_AU  there are no more access unit in the stream
6597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *******************************************************************************
6607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
6617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_getNextAu(M4OSA_Context context,
6627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4_StreamHandler *pStreamHandler, M4_AccessUnit *pAccessUnit) {
6637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VideoEditorMp3Reader_Context *pReaderContext =
6647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        (VideoEditorMp3Reader_Context*)context;
6657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
6667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4SYS_AccessUnit* pAu;
6677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    MediaBuffer *mAudioBuffer;
6687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    MediaSource::ReadOptions options;
6697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6702703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getNextAu start");
6717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pReaderContext == 0), M4ERR_PARAMETER,
6727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_getNextAu: invalid context");
6737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pStreamHandler == 0), M4ERR_PARAMETER,
6747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_getNextAu: invalid pointer to M4_StreamHandler");
6757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_DEBUG_IF1((pAccessUnit == 0),    M4ERR_PARAMETER,
6767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_getNextAu: invalid pointer to M4_AccessUnit");
6777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pStreamHandler == (M4_StreamHandler*)pReaderContext->\
6797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mAudioStreamHandler) {
6807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAu = &pReaderContext->mAudioAu;
6817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } else {
6822703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getNextAu: StreamHandler is not known\n");
6837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        return M4ERR_PARAMETER;
6847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (pReaderContext->mSeeking) {
6877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        options.setSeekTo(pReaderContext->mSeekTime);
6887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
6897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mMediaSource->read(&mAudioBuffer, &options);
6917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
6927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if (mAudioBuffer != NULL) {
6937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        if ((pAu->dataAddress == NULL) ||
6947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (pAu->size < mAudioBuffer->range_length())) {
6957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if (pAu->dataAddress != NULL) {
696694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu                free((M4OSA_Int32*)pAu->dataAddress);
6977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pAu->dataAddress = NULL;
6987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
699694816d7291f17364502ac5d3319684a0b180860Shyam Pallapothu            pAu->dataAddress = (M4OSA_Int32*)M4OSA_32bitAlignedMalloc(
7007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                (mAudioBuffer->range_length() + 3) & ~0x3,
7017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                M4READER_MP3, (M4OSA_Char*)"pAccessUnit->m_dataAddress" );
7027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            if (pAu->dataAddress == NULL) {
7042703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block                ALOGV("VideoEditorMp3Reader_getNextAu malloc failed");
7057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pReaderContext->mMediaSource->stop();
7067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pReaderContext->mMediaSource.clear();
7077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                pReaderContext->mDataSource.clear();
7087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                return M4ERR_ALLOC;
7107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            }
7117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        }
7127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAu->size = mAudioBuffer->range_length();
7137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        memcpy((M4OSA_MemAddr8)pAu->dataAddress,
7147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            (const char *)mAudioBuffer->data() + mAudioBuffer->range_offset(),
7157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi            mAudioBuffer->range_length());
7167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mAudioBuffer->meta_data()->findInt64(kKeyTime, (int64_t*)&pAu->CTS);
7187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAu->CTS = pAu->CTS / 1000; /*converting the microsec to millisec */
7217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAu->DTS  = pAu->CTS;
7227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAu->attribute = M4SYS_kFragAttrOk;
7237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        mAudioBuffer->release();
7247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7252703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getNextAu AU CTS = %ld",pAu->CTS);
7267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAccessUnit->m_dataAddress = (M4OSA_Int8*) pAu->dataAddress;
7287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAccessUnit->m_size = pAu->size;
7297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAccessUnit->m_CTS = pAu->CTS;
7307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAccessUnit->m_DTS = pAu->DTS;
7317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAccessUnit->m_attribute = pAu->attribute;
7327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    } else {
7332703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getNextAu EOS reached.");
7347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        pAccessUnit->m_size=0;
7357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        err = M4WAR_NO_MORE_AU;
7367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pAu->nbFrag = 0;
7387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    options.clearSeekTo();
7407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    pReaderContext->mSeeking = M4OSA_FALSE;
7417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    mAudioBuffer = NULL;
7422703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getNextAu end");
7437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
7457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
7467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern "C" {
7487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR VideoEditorMp3Reader_getInterface(
7507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4READER_MediaType *pMediaType,
7517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4READER_GlobalInterface **pRdrGlobalInterface,
7527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        M4READER_DataInterface **pRdrDataInterface) {
7537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_ERR err = M4NO_ERROR;
7547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7552703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getInterface: begin");
7567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /* Input parameters check */
7577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_CHECK(M4OSA_NULL != pMediaType,      M4ERR_PARAMETER);
7587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_CHECK(M4OSA_NULL != pRdrGlobalInterface, M4ERR_PARAMETER);
7597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    VIDEOEDITOR_CHECK(M4OSA_NULL != pRdrDataInterface, M4ERR_PARAMETER);
7607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SAFE_MALLOC(*pRdrGlobalInterface, M4READER_GlobalInterface, 1,
7627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_getInterface");
7637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    SAFE_MALLOC(*pRdrDataInterface, M4READER_DataInterface, 1,
7647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        "VideoEditorMp3Reader_getInterface");
7657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    *pMediaType = M4READER_kMediaTypeMP3;
7677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctCreate       = VideoEditorMp3Reader_create;
7697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctDestroy      = VideoEditorMp3Reader_destroy;
7707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctOpen         = VideoEditorMp3Reader_open;
7717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctClose        = VideoEditorMp3Reader_close;
7727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctGetOption    = VideoEditorMp3Reader_getOption;
7737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctSetOption    = VideoEditorMp3Reader_setOption;
7747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctGetNextStream =
7757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        VideoEditorMp3Reader_getNextStream;
7767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctFillAuStruct =
7777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        VideoEditorMp3Reader_fillAuStruct;
7787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctStart        = M4OSA_NULL;
7797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctStop         = M4OSA_NULL;
7807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctJump         = VideoEditorMp3Reader_jump;
7817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctReset        = VideoEditorMp3Reader_reset;
7827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrGlobalInterface)->m_pFctGetPrevRapTime = M4OSA_NULL;
7837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrDataInterface)->m_pFctGetNextAu      = VideoEditorMp3Reader_getNextAu;
7857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    (*pRdrDataInterface)->m_readerContext      = M4OSA_NULL;
7867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargicleanUp:
7887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    if( M4NO_ERROR == err )
7897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7902703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getInterface no error");
7917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    else
7937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    {
7947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        SAFE_FREE(*pRdrGlobalInterface);
7957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi        SAFE_FREE(*pRdrDataInterface);
7967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
7972703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block        ALOGV("VideoEditorMp3Reader_getInterface ERROR 0x%X", err);
7987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    }
7992703f23af496c13cfa39cc7e157fa12d1cb4c169Steve Block    ALOGV("VideoEditorMp3Reader_getInterface: end");
8007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    return err;
8017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
8027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}  /* extern "C" */
8037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}  /* namespace android */
804