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    M4READER_3gpCom.h
197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Generic encapsulation of the core 3gp reader
207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    This file declares the generic shell interface retrieving function
217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *            of the 3GP reader
227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifndef __M4READER_3GPCOM_H__
267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define __M4READER_3GPCOM_H__
277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "NXPSW_CompilerSwitches.h"
297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Types.h"
317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4OSA_Error.h"
327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#include "M4READER_Common.h"
337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef __cplusplus
357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargiextern "C" {
367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif
377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Error: Function M4READER_Com3GP_getNextStreamHandler must be called before.
407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_NO_VIDEO_STREAM_RETRIEVED_YET        M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000001)
427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * Error: No video stream H263 in file.
457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi */
467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_VIDEO_NOT_H263                    M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000002)
477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * There has been a problem with the decoder configuration information, seems to be invalid */
507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4ERR_READER3GP_DECODER_CONFIG_ERROR    M4OSA_ERR_CREATE(M4_ERR, M4READER_3GP, 0x000003)
517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4READER_COM3GP_MAXVIDEOSTREAM  5
537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4READER_COM3GP_MAXAUDIOSTREAM  5
547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#define M4READER_COM3GP_MAXTEXTSTREAM   5
557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_Context                m_pFFContext;    /**< core file format context */
597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler*            m_AudioStreams[M4READER_COM3GP_MAXAUDIOSTREAM];
617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler*            m_pAudioStream;    /**< pointer to the current allocated audio
627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            stream handler */
637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler*            m_VideoStreams[M4READER_COM3GP_MAXVIDEOSTREAM];
657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler*            m_pVideoStream;    /**< pointer to the current allocated video
667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            stream handler */
677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef M4VPS_SUPPORT_TTEXT
697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler*            m_TextStreams[M4READER_COM3GP_MAXTEXTSTREAM];
707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4_StreamHandler*            m_pTextStream;    /**< pointer to the current allocated text
717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                            stream handler */
727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /*M4VPS_SUPPORT_TTEXT*/
737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_Com3GP_Context;
757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * structure M4READER_3GP_Buffer (but nothing specific to 3GP, nor to a reader !)
797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief     This structure defines a buffer that can be used to exchange data (should be in OSAL)
807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt32    size;            /**< the size in bytes of the buffer */
857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_MemAddr8    dataAddress;    /**< the pointer to the buffer */
867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_3GP_Buffer;
877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * enum     M4READER_3GP_OptionID
917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    This enum defines the reader options specific to the 3GP format.
927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    These options can be read from or written to a 3GP reader via M4READER_3GP_getOption.
937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
947c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
957c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef enum
967c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
977c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
987c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Get the DecoderConfigInfo for H263,
997c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * option value must be a pointer to M4READER_3GP_H263Properties allocated by caller */
1007c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_3GP_kOptionID_H263Properties = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x01),
1017c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1027c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1037c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Get the Purple Labs drm information */
1047c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_3GP_kOptionID_PurpleLabsDrm = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x02),
1057c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1067c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1077c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Set the Fast open mode (Only the first AU of each stream will be parsed -> less CPU,
1087c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                 less RAM). */
1097c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_3GP_kOptionID_FastOpenMode = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x03),
1107c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1117c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1127c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Set the Audio only mode (the video stream won't be opened) */
1137c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_3GP_kOptionID_AudioOnly = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x04),
1147c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1157c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1167c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Set the Video only mode (the audio stream won't be opened) */
1177c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_3GP_kOptionID_VideoOnly = M4OSA_OPTION_ID_CREATE(M4_WRITE, M4READER_3GP, 0x05),
1187c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1197c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**
1207c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi     * Get the next video CTS */
1217c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4READER_3GP_kOptionID_getNextVideoCTS = M4OSA_OPTION_ID_CREATE(M4_READ, M4READER_3GP, 0x06)
1227c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1237c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_3GP_OptionID;
1247c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1257c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1267c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1277c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1287c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * struct    M4READER_3GP_H263Properties
1297c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Contains info about H263 stream read from the 3GP file.
1307c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1317c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1327c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargitypedef struct
1337c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi{
1347c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< the profile as defined in the Visual Object Sequence header, if present */
1357c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8        uiProfile;
1367c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    /**< the level as defined in the Visual Object Sequence header, if present */
1377c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi    M4OSA_UInt8        uiLevel;
1387c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1397c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi} M4READER_3GP_H263Properties;
1407c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1417c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1427c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1437c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Get the next stream found in the 3gp file
1447c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note
1457c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext:        (IN)    Context of the reader
1467c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pMediaFamily:    (OUT)    Pointer to a user allocated M4READER_MediaFamily that will
1477c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                      be filled with the media family of the found stream
1487c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pStreamHandler:    (OUT)    Pointer to a stream handler that will be allocated and
1497c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                          filled with the found stream description
1507c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR                 There is no error
1517c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER            At least one parameter is not properly set
1527c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4WAR_NO_MORE_STREAM    No more available stream in the media (all streams found)
1537c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1547c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1557c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_Com3GP_getNextStreamHandler(M4OSA_Context context,
1567c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                 M4READER_MediaFamily *pMediaFamily,
1577c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                                 M4_StreamHandler **pStreamHandler);
1587c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1597c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1607c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1617c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Prepare the  access unit (AU)
1627c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @note    An AU is the smallest possible amount of data to be decoded by a decoder.
1637c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext:        (IN)        Context of the reader
1647c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pStreamHandler    (IN)        The stream handler of the stream to make jump
1657c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pAccessUnit        (IN/OUT)    Pointer to an access unit to fill with read data
1667c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                          (the au structure is allocated by the user, and must
1677c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                          be initialized by calling M4READER_fillAuStruct_fct
1687c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi *                                          after creation)
1697c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR                     There is no error
1707c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER                At least one parameter is not properly set
1717c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @returns    M4ERR_ALLOC                    Memory allocation failed
1727c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1737c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1747c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_Com3GP_fillAuStruct(M4OSA_Context context, M4_StreamHandler *pStreamHandler,
1757c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi                                         M4_AccessUnit *pAccessUnit);
1767c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1777c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi/**
1787c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1797c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @brief    Cleans up the stream handler
1807c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pContext: (IN/OUT) Context of the reader shell
1817c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @param    pStreamHandler: (IN/OUT) Stream handler
1827c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4ERR_PARAMETER:    The context is null
1837c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi * @return    M4NO_ERROR:            No error
1847c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi ************************************************************************
1857c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi*/
1867c9d8018755adf1857571125ba1b3598c96ea506Dharmaray KundargiM4OSA_ERR M4READER_Com3GP_cleanUpHandler(M4_StreamHandler* pStreamHandler);
1877c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1887c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#ifdef __cplusplus
1897c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi}
1907c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* __cplusplus */
1917c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
1927c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi#endif /* __M4READER_3GPCOM_H__ */
1937c9d8018755adf1857571125ba1b3598c96ea506Dharmaray Kundargi
194