unsigned start_offset, header_size, codec, coef_type, coef[2];
GENHDemuxContext *c = s->priv_data;
unsigned coef_splitted[2];
- int align, ch;
+ int align, ch, ret;
AVStream *st;
avio_skip(s->pb, 4);
case 5: st->codec->codec_id = st->codec->block_align > 0 ?
AV_CODEC_ID_PCM_S8_PLANAR :
AV_CODEC_ID_PCM_S8; break;
+ case 6: st->codec->codec_id = AV_CODEC_ID_SDX2_DPCM; break;
+ case 7: ret = ff_alloc_extradata(st->codec, 2);
+ if (ret < 0)
+ return ret;
+ AV_WL16(st->codec->extradata, 3);
+ st->codec->codec_id = AV_CODEC_ID_ADPCM_IMA_WS; break;
case 12: st->codec->codec_id = AV_CODEC_ID_ADPCM_THP; break;
case 13: st->codec->codec_id = AV_CODEC_ID_PCM_U8; break;
case 17: st->codec->codec_id = AV_CODEC_ID_ADPCM_IMA_QT; break;
if (avio_feof(s->pb))
return AVERROR_EOF;
- av_new_packet(pkt, 8 * codec->channels);
+ ret = av_new_packet(pkt, 8 * codec->channels);
+ if (ret < 0)
+ return ret;
for (i = 0; i < 8 / c->interleave_size; i++) {
for (ch = 0; ch < codec->channels; ch++) {
pkt->data[ch * 8 + i*c->interleave_size+0] = avio_r8(s->pb);
}
}
ret = 0;
+ } else if (codec->codec_id == AV_CODEC_ID_SDX2_DPCM) {
+ ret = av_get_packet(s->pb, pkt, codec->block_align * 1024);
+
} else {
ret = av_get_packet(s->pb, pkt, codec->block_align ? codec->block_align : 1024 * codec->channels);
}