|
|
|
@ -216,18 +216,13 @@ static int rpl_read_header(AVFormatContext *s) |
|
|
|
|
if (ast->codecpar->bits_per_coded_sample == 16) { |
|
|
|
|
// 16-bit audio is always signed
|
|
|
|
|
ast->codecpar->codec_id = AV_CODEC_ID_PCM_S16LE; |
|
|
|
|
break; |
|
|
|
|
} else if (ast->codecpar->bits_per_coded_sample == 8) { |
|
|
|
|
if(av_stristr(audio_type, "unsigned") != NULL) { |
|
|
|
|
if (av_stristr(audio_type, "unsigned") != NULL) |
|
|
|
|
ast->codecpar->codec_id = AV_CODEC_ID_PCM_U8; |
|
|
|
|
break; |
|
|
|
|
} else if(av_stristr(audio_type, "linear") != NULL) { |
|
|
|
|
else if (av_stristr(audio_type, "linear") != NULL) |
|
|
|
|
ast->codecpar->codec_id = AV_CODEC_ID_PCM_S8; |
|
|
|
|
break; |
|
|
|
|
} else { |
|
|
|
|
else |
|
|
|
|
ast->codecpar->codec_id = AV_CODEC_ID_PCM_VIDC; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
// There are some other formats listed as legal per the spec;
|
|
|
|
|
// samples needed.
|
|
|
|
@ -237,10 +232,8 @@ static int rpl_read_header(AVFormatContext *s) |
|
|
|
|
// The samples with this kind of audio that I have
|
|
|
|
|
// are all unsigned.
|
|
|
|
|
ast->codecpar->codec_id = AV_CODEC_ID_PCM_U8; |
|
|
|
|
break; |
|
|
|
|
} else if (ast->codecpar->bits_per_coded_sample == 4) { |
|
|
|
|
ast->codecpar->codec_id = AV_CODEC_ID_ADPCM_IMA_EA_SEAD; |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
@ -297,7 +290,8 @@ static int rpl_read_header(AVFormatContext *s) |
|
|
|
|
total_audio_size += audio_size * 8; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (error) return AVERROR(EIO); |
|
|
|
|
if (error) |
|
|
|
|
return AVERROR(EIO); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
@ -322,9 +316,10 @@ static int rpl_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
|
|
|
|
|
index_entry = &stream->internal->index_entries[rpl->chunk_number]; |
|
|
|
|
|
|
|
|
|
if (rpl->frame_in_part == 0) |
|
|
|
|
if (rpl->frame_in_part == 0) { |
|
|
|
|
if (avio_seek(pb, index_entry->pos, SEEK_SET) < 0) |
|
|
|
|
return AVERROR(EIO); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO && |
|
|
|
|
stream->codecpar->codec_tag == 124) { |
|
|
|
@ -340,9 +335,9 @@ static int rpl_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
ret = av_get_packet(pb, pkt, frame_size); |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
if (ret != frame_size) { |
|
|
|
|
if (ret != frame_size) |
|
|
|
|
return AVERROR(EIO); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pkt->duration = 1; |
|
|
|
|
pkt->pts = index_entry->timestamp + rpl->frame_in_part; |
|
|
|
|
pkt->stream_index = rpl->chunk_part; |
|
|
|
@ -356,9 +351,8 @@ static int rpl_read_packet(AVFormatContext *s, AVPacket *pkt) |
|
|
|
|
ret = av_get_packet(pb, pkt, index_entry->size); |
|
|
|
|
if (ret < 0) |
|
|
|
|
return ret; |
|
|
|
|
if (ret != index_entry->size) { |
|
|
|
|
if (ret != index_entry->size) |
|
|
|
|
return AVERROR(EIO); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) { |
|
|
|
|
// frames_per_chunk should always be one here; the header
|
|
|
|
|