mirror of
https://github.com/OpenMW/openmw.git
synced 2025-03-03 19:39:41 +00:00
Consolidate some code
This commit is contained in:
parent
d66d8a3118
commit
f97eaec7ab
1 changed files with 7 additions and 18 deletions
|
@ -199,20 +199,15 @@ class MovieAudioDecoder : public MWSound::Sound_Decoder
|
||||||
int audio_decode_frame(AVFrame *frame, double *pts_ptr)
|
int audio_decode_frame(AVFrame *frame, double *pts_ptr)
|
||||||
{
|
{
|
||||||
AVPacket *pkt = &is->audio_pkt;
|
AVPacket *pkt = &is->audio_pkt;
|
||||||
int len1, data_size;
|
|
||||||
|
|
||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
while(pkt->size > 0)
|
while(pkt->size > 0)
|
||||||
{
|
{
|
||||||
int got_frame;
|
int len1, got_frame;
|
||||||
|
|
||||||
len1 = avcodec_decode_audio4(is->audio_st->codec, frame, &got_frame, pkt);
|
len1 = avcodec_decode_audio4(is->audio_st->codec, frame, &got_frame, pkt);
|
||||||
if(len1 < 0 || len1 > pkt->size)
|
if(len1 < 0) break;
|
||||||
{
|
|
||||||
/* if error, skip packet */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(len1 <= pkt->size)
|
if(len1 <= pkt->size)
|
||||||
{
|
{
|
||||||
|
@ -222,24 +217,18 @@ class MovieAudioDecoder : public MWSound::Sound_Decoder
|
||||||
memset(&pkt->data[remaining], 0, pkt->size - remaining);
|
memset(&pkt->data[remaining], 0, pkt->size - remaining);
|
||||||
pkt->size -= len1;
|
pkt->size -= len1;
|
||||||
}
|
}
|
||||||
if(!got_frame)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
int smp_size = av_get_bytes_per_sample(is->audio_st->codec->sample_fmt) *
|
/* No data yet? Look for more frames */
|
||||||
is->audio_st->codec->channels;
|
if(!got_frame || frame->nb_samples <= 0)
|
||||||
data_size = frame->nb_samples * smp_size;
|
|
||||||
if(data_size <= 0)
|
|
||||||
{
|
|
||||||
/* No data yet, get more frames */
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
*pts_ptr = is->audio_clock;
|
*pts_ptr = is->audio_clock;
|
||||||
is->audio_clock += (double)(data_size/smp_size) /
|
is->audio_clock += (double)frame->nb_samples /
|
||||||
(double)is->audio_st->codec->sample_rate;
|
(double)is->audio_st->codec->sample_rate;
|
||||||
|
|
||||||
/* We have data, return it and come back for more later */
|
/* We have data, return it and come back for more later */
|
||||||
return data_size;
|
return frame->nb_samples * av_get_bytes_per_sample(is->audio_st->codec->sample_fmt) *
|
||||||
|
is->audio_st->codec->channels;
|
||||||
}
|
}
|
||||||
if(pkt->data)
|
if(pkt->data)
|
||||||
av_free_packet(pkt);
|
av_free_packet(pkt);
|
||||||
|
|
Loading…
Reference in a new issue