root/applications/dashcast/audio_decoder.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


/*
 *                      GPAC - Multimedia Framework C SDK
 *
 *                      Authors: Arash Shafiei
 *                      Copyright (c) Telecom ParisTech 2000-2013
 *                                      All rights reserved
 *
 *  This file is part of GPAC / dashcast
 *
 *  GPAC is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as published by
 *  the Free Software Foundation; either version 2, or (at your option)
 *  any later version.
 *
 *  GPAC is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; see the file COPYING.  If not, write to
 *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

#ifndef AUDIO_DECODER_H_
#define AUDIO_DECODER_H_

#include "audio_data.h"

#include "libavformat/avformat.h"
#include "libavutil/fifo.h"
#ifdef DC_AUDIO_RESAMPLER
#include "libavutil/opt.h"
#include "libavresample/avresample.h"
#endif


/*
 * The structure which keeps the data of
 * input audio file.
 */
typedef struct {
        /* Format context structure provided by avlib to open and read from a media file. */
        AVFormatContext *av_fmt_ctx;

        /* A list of AVPackets and return value to be processed: when this parameter is non-null,
         * the video thread makes the demux and pushes the packets. */
        GF_List  *av_pkt_list;
        GF_Mutex *av_pkt_list_mutex;

        /* The index of the audio stream in the file. */
        int astream_idx;

        /* This is the output FIFO linking the decoder to the other encoder: only conveys
         * stereo 44100 (and resample if needed) */
        AVFifoBuffer *fifo;
#ifdef DC_AUDIO_RESAMPLER
        /* Optional audio resampling between the decoder and the encoder */
        AVAudioResampleContext *aresampler;
#endif

        LockMode mode;
        int no_loop;
} AudioInputFile;

/*
 * Open the input audio
 *
 * @param cmd_data [in] contains information about the file name
 * and the audio format.
 *
 * @param audio_input_file [out] pointer to the structure which we want to
 * open the file
 *
 * @return 0 on success -1 on failure.
 */
int dc_audio_decoder_open(AudioInputFile *audio_input_file, AudioDataConf *audio_data_conf, int mode, int no_loop, int video_framerate);

/*
 * Read and decode audio and put samples on circular buffer
 *
 * @param audio_input_file [in] contains info on input audio. This parameter
 * must have been opened with open_audio_input
 *
 * @param audio_input_data [out] the samples will be saved on the circular buffer
 * of this parameter.
 *
 * @return 0 on success, -1 on failure, -2 on EOF (end of the file)
 */
int dc_audio_decoder_read(AudioInputFile *audio_input_file, AudioInputData *audio_input_data);

/*
 * Close the input audio
 *
 * @param audio_input_file [in] the audio file to be closed
 */
void dc_audio_decoder_close(AudioInputFile *audio_input_file);

#endif /* AUDIO_DECODER_H_ */

/* [<][>][^][v][top][bottom][index][help] */