Ticket #1873: spxn.diff

File spxn.diff, 2.6 KB (added by ami_stuff, 4 years ago)
  • libavcodec/libspeexdec.c

    diff --git a/libavcodec/libspeexdec.c b/libavcodec/libspeexdec.c
    index 51ab7ea..a51fbe2 100644
    a b static av_cold int libspeex_decode_init(AVCodecContext *avctx) 
    5050        if (!header) 
    5151            av_log(avctx, AV_LOG_WARNING, "Invalid Speex header\n"); 
    5252    } 
    53     if (header) { 
     53     
     54    if (avctx->codec_tag == MKTAG('S', 'P', 'X', 'N')) { 
     55        if (!avctx->extradata || avctx->extradata && avctx->extradata_size < 47) { 
     56            av_log(avctx, AV_LOG_ERROR, "Missing or invalid extradata.\n"); 
     57            return AVERROR_INVALIDDATA; 
     58        } 
     59        if (avctx->extradata[37] != 10) { 
     60            av_log(avctx, AV_LOG_ERROR, "Unsupported compression mode.\n"); 
     61            return AVERROR_PATCHWELCOME; 
     62        } 
     63        avctx->channels    = 1; 
     64        spx_mode           = 0; 
     65    } else if (header) { 
    5466        avctx->channels    = header->nb_channels; 
    5567        spx_mode           = header->mode; 
    5668        speex_header_free(header); 
    static av_cold int libspeex_decode_init(AVCodecContext *avctx) 
    7385        av_log(avctx, AV_LOG_ERROR, "Unknown Speex mode %d", spx_mode); 
    7486        return AVERROR_INVALIDDATA; 
    7587    } 
     88    if (avctx->codec_tag != MKTAG('S', 'P', 'X', 'N')) 
    7689    avctx->sample_rate = 8000 << spx_mode; 
    7790    s->frame_size      =  160 << spx_mode; 
    7891 
  • libavformat/isom.c

    diff --git a/libavformat/isom.c b/libavformat/isom.c
    index 3271056..813a018 100644
    a b const AVCodecTag ff_codec_movaudio_tags[] = { 
    292292    { AV_CODEC_ID_QDM2,            MKTAG('Q', 'D', 'M', '2') }, 
    293293    { AV_CODEC_ID_QDMC,            MKTAG('Q', 'D', 'M', 'C') }, 
    294294    { AV_CODEC_ID_SPEEX,           MKTAG('s', 'p', 'e', 'x') }, /* Flash Media Server */ 
     295    { AV_CODEC_ID_SPEEX,           MKTAG('S', 'P', 'X', 'N') }, 
    295296    { AV_CODEC_ID_WMAV2,           MKTAG('W', 'M', 'A', '2') }, 
    296297    { AV_CODEC_ID_NONE, 0 }, 
    297298}; 
  • libavformat/mov.c

    diff --git a/libavformat/mov.c b/libavformat/mov.c
    index d7d7f21..bcf44de 100644
    a b static int mov_read_wave(MOVContext *c, AVIOContext *pb, MOVAtom atom) 
    10101010    if ((uint64_t)atom.size > (1<<30)) 
    10111011        return AVERROR_INVALIDDATA; 
    10121012 
    1013     if (st->codec->codec_id == AV_CODEC_ID_QDM2 || st->codec->codec_id == AV_CODEC_ID_QDMC) { 
     1013    if (st->codec->codec_id == AV_CODEC_ID_QDM2 || st->codec->codec_id == AV_CODEC_ID_QDMC || st->codec->codec_id == AV_CODEC_ID_SPEEX) { 
    10141014        // pass all frma atom to codec, needed at least for QDMC and QDM2 
    10151015        av_free(st->codec->extradata); 
    10161016        st->codec->extradata_size = 0;