mirror of https://git.ffmpeg.org/ffmpeg.git
IFF stereo support
Patch by Jai Menon ( realityman gmx net ) Originally committed as revision 13097 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
c38e75fc52
commit
86b2d47fc0
|
@ -60,6 +60,19 @@ typedef struct {
|
|||
uint32_t audio_frame_count;
|
||||
} IffDemuxContext;
|
||||
|
||||
|
||||
static void interleave_stereo(const uint8_t *src, uint8_t *dest, int size)
|
||||
{
|
||||
uint8_t *end = dest + size;
|
||||
size = size>>1;
|
||||
|
||||
while(dest < end) {
|
||||
*dest++ = *src;
|
||||
*dest++ = *(src+size);
|
||||
src++;
|
||||
}
|
||||
}
|
||||
|
||||
static int iff_probe(AVProbeData *p)
|
||||
{
|
||||
const uint8_t *d = p->buf;
|
||||
|
@ -152,7 +165,20 @@ static int iff_read_packet(AVFormatContext *s,
|
|||
|
||||
if(iff->sent_bytes > iff->body_size)
|
||||
return AVERROR(EIO);
|
||||
ret = av_get_packet(pb, pkt, PACKET_SIZE);
|
||||
|
||||
if(s->streams[0]->codec->channels == 2) {
|
||||
uint8_t sample_buffer[PACKET_SIZE];
|
||||
|
||||
ret = get_buffer(pb, sample_buffer, PACKET_SIZE);
|
||||
if(av_new_packet(pkt, PACKET_SIZE) < 0) {
|
||||
av_log(s, AV_LOG_ERROR, "iff: cannot allocate packet \n");
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
interleave_stereo(sample_buffer, pkt->data, PACKET_SIZE);
|
||||
}
|
||||
else {
|
||||
ret = av_get_packet(pb, pkt, PACKET_SIZE);
|
||||
}
|
||||
|
||||
if(iff->sent_bytes == 0)
|
||||
pkt->flags |= PKT_FLAG_KEY;
|
||||
|
|
Loading…
Reference in New Issue