printf (" note: unknown chunk seen (%c%c%c%c)\n",
av_log (s, AV_LOG_ERROR, " note: unknown chunk seen (%c%c%c%c)\n",
static int wsvqa_read_header(AVFormatContext *s,                             AVFormatParameters *ap){    WsVqaDemuxContext *wsvqa = (WsVqaDemuxContext *)s->priv_data;    ByteIOContext *pb = &s->pb;    AVStream *st;    unsigned char *header;    unsigned char scratch[VQA_PREAMBLE_SIZE];    unsigned int chunk_tag;    unsigned int chunk_size;    /* set the pts reference (1 pts = 1/90000) */    s->pts_num = 1;    s->pts_den = 90000;    /* initialize the video decoder stream */    st = av_new_stream(s, 0);    if (!st)        return AVERROR_NOMEM;    wsvqa->video_stream_index = st->index;    st->codec.codec_type = CODEC_TYPE_VIDEO;    st->codec.codec_id = CODEC_ID_WS_VQA;    st->codec.codec_tag = 0;  /* no fourcc */    /* skip to the start of the VQA header */    url_fseek(pb, 20, SEEK_SET);    /* the VQA header needs to go to the decoder */    st->codec.extradata_size = VQA_HEADER_SIZE;    st->codec.extradata = av_malloc(VQA_HEADER_SIZE);    header = (unsigned char *)st->codec.extradata;    if (get_buffer(pb, st->codec.extradata, VQA_HEADER_SIZE) !=        VQA_HEADER_SIZE) {        av_free(st->codec.extradata);        return -EIO;    }    st->codec.width = LE_16(&header[6]);    st->codec.height = LE_16(&header[8]);    /* initialize the audio decoder stream is sample rate is non-zero */    if (LE_16(&header[24])) {        st = av_new_stream(s, 0);        if (!st)            return AVERROR_NOMEM;        st->codec.codec_type = CODEC_TYPE_AUDIO;        st->codec.codec_id = CODEC_ID_ADPCM_IMA_WS;        st->codec.codec_tag = 0;  /* no tag */        st->codec.sample_rate = LE_16(&header[24]);        st->codec.channels = header[26];        st->codec.bits_per_sample = 16;        st->codec.bit_rate = st->codec.channels * st->codec.sample_rate *            st->codec.bits_per_sample / 4;        st->codec.block_align = st->codec.channels * st->codec.bits_per_sample;        wsvqa->audio_stream_index = st->index;        wsvqa->audio_samplerate = st->codec.sample_rate;        wsvqa->audio_channels = st->codec.channels;        wsvqa->audio_frame_counter = 0;    }    /* there are 0 or more chunks before the FINF chunk; iterate until     * FINF has been skipped and the file will be ready to be demuxed */    do {        if (get_buffer(pb, scratch, VQA_PREAMBLE_SIZE) != VQA_PREAMBLE_SIZE) {            av_free(st->codec.extradata);            return -EIO;        }        chunk_tag = BE_32(&scratch[0]);        chunk_size = BE_32(&scratch[4]);        /* catch any unknown header tags, for curiousity */        switch (chunk_tag) {        case CINF_TAG:        case CINH_TAG:        case CIND_TAG:        case PINF_TAG:        case PINH_TAG:        case PIND_TAG:        case FINF_TAG:            break;        default:            printf (" note: unknown chunk seen (%c%c%c%c)\n",                scratch[0], scratch[1],                scratch[2], scratch[3]);            break;        }        url_fseek(pb, chunk_size, SEEK_CUR);    } while (chunk_tag != FINF_TAG);    wsvqa->video_pts = wsvqa->audio_frame_counter = 0;    return 0;}