/*
 * CAF common code
 * Copyright (c) 2007  Justin Ruggles
 *
 * This file is part of FFmpeg.
 *
 * FFmpeg 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.1 of the License, or (at your option) any later version.
 *
 * FFmpeg 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 FFmpeg; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 */

/**
 * @file
 * CAF common code
 */

#include "avformat.h"
#include "internal.h"
#include "caf.h"

/**
 * Known codec tags for CAF
 */
const AVCodecTag ff_codec_caf_tags[] = {
    { AV_CODEC_ID_AAC,             MKTAG('a','a','c',' ') },
    { AV_CODEC_ID_AAC,             MKTAG('a','a','c','l') },
    { AV_CODEC_ID_AC3,             MKTAG('a','c','-','3') },
    { AV_CODEC_ID_ADPCM_IMA_QT,    MKTAG('i','m','a','4') },
    { AV_CODEC_ID_ADPCM_IMA_WAV,   MKTAG('m','s', 0, 17 ) },
    { AV_CODEC_ID_ADPCM_MS,        MKTAG('m','s', 0,  2 ) },
    { AV_CODEC_ID_ALAC,            MKTAG('a','l','a','c') },
    { AV_CODEC_ID_AMR_NB,          MKTAG('s','a','m','r') },
  /* FIXME: use DV demuxer, as done in MOV */
  /*{ AV_CODEC_ID_DVAUDIO,         MKTAG('v','d','v','a') },*/
  /*{ AV_CODEC_ID_DVAUDIO,         MKTAG('d','v','c','a') },*/
    { AV_CODEC_ID_GSM,             MKTAG('a','g','s','m') },
    { AV_CODEC_ID_GSM_MS,          MKTAG('m','s', 0, '1') },
    { AV_CODEC_ID_ILBC,            MKTAG('i','l','b','c') },
    { AV_CODEC_ID_MACE3,           MKTAG('M','A','C','3') },
    { AV_CODEC_ID_MACE6,           MKTAG('M','A','C','6') },
    { AV_CODEC_ID_MP1,             MKTAG('.','m','p','1') },
    { AV_CODEC_ID_MP2,             MKTAG('.','m','p','2') },
    { AV_CODEC_ID_MP3,             MKTAG('.','m','p','3') },
    { AV_CODEC_ID_MP3,             MKTAG('m','s', 0 ,'U') },
    { AV_CODEC_ID_PCM_ALAW,        MKTAG('a','l','a','w') },
    { AV_CODEC_ID_PCM_MULAW,       MKTAG('u','l','a','w') },
    { AV_CODEC_ID_QCELP,           MKTAG('Q','c','l','p') },
    { AV_CODEC_ID_QDM2,            MKTAG('Q','D','M','2') },
    { AV_CODEC_ID_QDMC,            MKTAG('Q','D','M','C') },
  /* currently unsupported codecs */
  /*{ AC-3 over S/PDIF          MKTAG('c','a','c','3') },*/
  /*{ MPEG4CELP                 MKTAG('c','e','l','p') },*/
  /*{ MPEG4HVXC                 MKTAG('h','v','x','c') },*/
  /*{ MPEG4TwinVQ               MKTAG('t','w','v','q') },*/

    { AV_CODEC_ID_PCM_S8,       MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_S16LE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_S16BE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_S24LE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_S24BE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_S32LE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_S32BE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_F32LE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_F32BE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_F64LE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_PCM_F64BE,    MKTAG('l','p','c','m') },
    { AV_CODEC_ID_NONE,            0 },
};

