Fix a stupid bug with ffmpeg audio playback that was resulting in (practically) no sound.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5526 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
9202c3f015
commit
560235c57b
2 changed files with 27 additions and 2 deletions
|
@ -127,6 +127,7 @@ static void S_AV_ReadFrame(struct avaudioctx *ctx)
|
||||||
auddatasize/=2;
|
auddatasize/=2;
|
||||||
width = 2;
|
width = 2;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case AV_SAMPLE_FMT_DBLP:
|
case AV_SAMPLE_FMT_DBLP:
|
||||||
auddatasize /= channels;
|
auddatasize /= channels;
|
||||||
|
|
|
@ -374,8 +374,31 @@ static qboolean VARGS AVDec_DisplayFrame(void *vctx, qboolean nosound, qboolean
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case AV_SAMPLE_FMT_FLTP:
|
case AV_SAMPLE_FMT_FLTP:
|
||||||
auddatasize /= channels;
|
//FIXME: support float audio internally.
|
||||||
channels = 1;
|
{
|
||||||
|
float *in[2] = {(float*)ctx->pAFrame->data[0],(float*)ctx->pAFrame->data[1]};
|
||||||
|
signed short *out = (void*)auddata;
|
||||||
|
int v;
|
||||||
|
unsigned int i, c;
|
||||||
|
unsigned int frames = ctx->pAFrame->nb_samples;
|
||||||
|
if (channels > 2)
|
||||||
|
channels = 2;
|
||||||
|
for (i = 0; i < frames; i++)
|
||||||
|
{
|
||||||
|
for (c = 0; c < channels; c++)
|
||||||
|
{
|
||||||
|
v = (short)(in[c][i]*32767);
|
||||||
|
if (v < -32767)
|
||||||
|
v = -32767;
|
||||||
|
else if (v > 32767)
|
||||||
|
v = 32767;
|
||||||
|
*out++ = v;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
width = sizeof(*out);
|
||||||
|
auddatasize = frames*width*channels;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case AV_SAMPLE_FMT_FLT:
|
case AV_SAMPLE_FMT_FLT:
|
||||||
//FIXME: support float audio internally.
|
//FIXME: support float audio internally.
|
||||||
{
|
{
|
||||||
|
@ -395,6 +418,7 @@ static qboolean VARGS AVDec_DisplayFrame(void *vctx, qboolean nosound, qboolean
|
||||||
auddatasize/=2;
|
auddatasize/=2;
|
||||||
width = 2;
|
width = 2;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case AV_SAMPLE_FMT_DBLP:
|
case AV_SAMPLE_FMT_DBLP:
|
||||||
auddatasize /= channels;
|
auddatasize /= channels;
|
||||||
|
|
Loading…
Reference in a new issue