提交 b205313f authored 作者: Steve Underwood's avatar Steve Underwood

More fixes from Coverity scans

上级 94221563
...@@ -2100,6 +2100,12 @@ static const float sine_table[SINELEN] = ...@@ -2100,6 +2100,12 @@ static const float sine_table[SINELEN] =
-0.00306796f -0.00306796f
}; };
SPAN_DECLARE(float) dds_phase_to_radians(uint32_t phase)
{
return phase*2.0f*3.1415926f/(65536.0f*65536.0f);
}
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE(int32_t) dds_phase_ratef(float frequency) SPAN_DECLARE(int32_t) dds_phase_ratef(float frequency)
{ {
return (int32_t) (frequency*65536.0f*65536.0f/SAMPLE_RATE); return (int32_t) (frequency*65536.0f*65536.0f/SAMPLE_RATE);
...@@ -2124,44 +2130,45 @@ SPAN_DECLARE(float) dds_scaling_dbovf(float level) ...@@ -2124,44 +2130,45 @@ SPAN_DECLARE(float) dds_scaling_dbovf(float level)
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
SPAN_DECLARE(void) dds_advancef(uint32_t *phase_acc, int32_t phase_rate) static __inline__ float dds_lookupx(uint32_t phase)
{ {
*phase_acc += phase_rate; return sine_table[phase >> (32 - SLENK)];
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
SPAN_DECLARE(float) ddsf(uint32_t *phase_acc, int32_t phase_rate) SPAN_DECLARE(float) dds_lookupf(uint32_t phase)
{ {
float amp; return dds_lookupx(phase);
}
/*- End of function --------------------------------------------------------*/
amp = sine_table[*phase_acc >> (32 - SLENK)]; SPAN_DECLARE(float) dds_offsetf(uint32_t phase_acc, int32_t phase_offset)
*phase_acc += phase_rate; {
return amp; return dds_lookupx(phase_acc + phase_offset);
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
SPAN_DECLARE(float) dds_lookupf(uint32_t phase) SPAN_DECLARE(void) dds_advancef(uint32_t *phase_acc, int32_t phase_rate)
{ {
return sine_table[phase >> (32 - SLENK)]; *phase_acc += phase_rate;
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
SPAN_DECLARE(float) dds_modf(uint32_t *phase_acc, int32_t phase_rate, float scale, int32_t phase) SPAN_DECLARE(float) ddsf(uint32_t *phase_acc, int32_t phase_rate)
{ {
float amp; float amp;
amp = sine_table[*(phase_acc + phase) >> (32 - SLENK)]*scale; amp = dds_lookupx(*phase_acc);
*phase_acc += phase_rate; *phase_acc += phase_rate;
return amp; return amp;
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
SPAN_DECLARE(complexf_t) dds_complexf(uint32_t *phase_acc, int32_t phase_rate) SPAN_DECLARE(float) dds_modf(uint32_t *phase_acc, int32_t phase_rate, float scale, int32_t phase)
{ {
complexf_t amp; float amp;
amp = complex_setf(sine_table[(*phase_acc + (1 << 30)) >> (32 - SLENK)], amp = dds_lookupx(*phase_acc + phase)*scale;
sine_table[*phase_acc >> (32 - SLENK)]);
*phase_acc += phase_rate; *phase_acc += phase_rate;
return amp; return amp;
} }
...@@ -2169,8 +2176,17 @@ SPAN_DECLARE(complexf_t) dds_complexf(uint32_t *phase_acc, int32_t phase_rate) ...@@ -2169,8 +2176,17 @@ SPAN_DECLARE(complexf_t) dds_complexf(uint32_t *phase_acc, int32_t phase_rate)
SPAN_DECLARE(complexf_t) dds_lookup_complexf(uint32_t phase) SPAN_DECLARE(complexf_t) dds_lookup_complexf(uint32_t phase)
{ {
return complex_setf(sine_table[(phase + (1 << 30)) >> (32 - SLENK)], return complex_setf(dds_lookupx(phase + (1 << 30)), dds_lookupx(phase));
sine_table[phase >> (32 - SLENK)]); }
/*- End of function --------------------------------------------------------*/
SPAN_DECLARE(complexf_t) dds_complexf(uint32_t *phase_acc, int32_t phase_rate)
{
complexf_t amp;
amp = complex_setf(dds_lookupx(*phase_acc + (1 << 30)), dds_lookupx(*phase_acc));
*phase_acc += phase_rate;
return amp;
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
...@@ -2178,8 +2194,8 @@ SPAN_DECLARE(complexf_t) dds_complex_modf(uint32_t *phase_acc, int32_t phase_rat ...@@ -2178,8 +2194,8 @@ SPAN_DECLARE(complexf_t) dds_complex_modf(uint32_t *phase_acc, int32_t phase_rat
{ {
complexf_t amp; complexf_t amp;
amp = complex_setf(sine_table[(*phase_acc + phase + (1 << 30)) >> (32 - SLENK)]*scale, amp = complex_setf(dds_lookupx(*phase_acc + phase + (1 << 30))*scale,
sine_table[(*phase_acc + phase) >> (32 - SLENK)]*scale); dds_lookupx(*phase_acc + phase)*scale);
*phase_acc += phase_rate; *phase_acc += phase_rate;
return amp; return amp;
} }
......
...@@ -36,6 +36,12 @@ extern "C" ...@@ -36,6 +36,12 @@ extern "C"
{ {
#endif #endif
/*! \brief Convert a 32 bit phase angle to an angle in radians, between 0 and 2*PI
\param phase The angle to convert.
\return The angle in radians.
*/
SPAN_DECLARE(float) dds_phase_to_radians(uint32_t phase);
/*! \brief Find the phase rate value to achieve a particular frequency. /*! \brief Find the phase rate value to achieve a particular frequency.
\param frequency The desired frequency, in Hz. \param frequency The desired frequency, in Hz.
\return The phase rate which while achieve the desired frequency. \return The phase rate which while achieve the desired frequency.
...@@ -221,6 +227,13 @@ SPAN_DECLARE(float) ddsf(uint32_t *phase_acc, int32_t phase_rate); ...@@ -221,6 +227,13 @@ SPAN_DECLARE(float) ddsf(uint32_t *phase_acc, int32_t phase_rate);
*/ */
SPAN_DECLARE(float) dds_lookupf(uint32_t phase); SPAN_DECLARE(float) dds_lookupf(uint32_t phase);
/*! \brief Lookup the floating point value of a particular phase offset from an accumulated phase.
\param phase_acc The accumulated phase.
\param phase_offset The phase offset.
\return The signal amplitude.
*/
SPAN_DECLARE(float) dds_offsetf(uint32_t phase_acc, int32_t phase_offset);
/*! \brief Generate a floating point tone sample, with modulation. /*! \brief Generate a floating point tone sample, with modulation.
\param phase_acc A pointer to a phase accumulator value. \param phase_acc A pointer to a phase accumulator value.
\param phase_rate The phase increment to be applied. \param phase_rate The phase increment to be applied.
......
...@@ -137,15 +137,15 @@ static __inline__ uint8_t linear_to_ulaw(int linear) ...@@ -137,15 +137,15 @@ static __inline__ uint8_t linear_to_ulaw(int linear)
} }
seg = top_bit(linear | 0xFF) - 7; seg = top_bit(linear | 0xFF) - 7;
/*
* Combine the sign, segment, quantization bits,
* and complement the code word.
*/
if (seg >= 8) if (seg >= 8)
{
u_val = (uint8_t) (0x7F ^ mask); u_val = (uint8_t) (0x7F ^ mask);
}
else else
{
/* Combine the sign, segment, quantization bits, and complement the code word. */
u_val = (uint8_t) (((seg << 4) | ((linear >> (seg + 3)) & 0xF)) ^ mask); u_val = (uint8_t) (((seg << 4) | ((linear >> (seg + 3)) & 0xF)) ^ mask);
}
#if defined(G711_ULAW_ZEROTRAP) #if defined(G711_ULAW_ZEROTRAP)
/* Optional ITU trap */ /* Optional ITU trap */
if (u_val == 0) if (u_val == 0)
...@@ -201,13 +201,14 @@ static __inline__ int16_t ulaw_to_linear(uint8_t ulaw) ...@@ -201,13 +201,14 @@ static __inline__ int16_t ulaw_to_linear(uint8_t ulaw)
*/ */
static __inline__ uint8_t linear_to_alaw(int linear) static __inline__ uint8_t linear_to_alaw(int linear)
{ {
uint8_t a_val;
int mask; int mask;
int seg; int seg;
if (linear >= 0) if (linear >= 0)
{ {
/* Sign (bit 7) bit = 1 */ /* Sign (bit 7) bit = 1 */
mask = G711_ALAW_AMI_MASK | 0x80; mask = 0x80 | G711_ALAW_AMI_MASK;
} }
else else
{ {
...@@ -220,16 +221,14 @@ static __inline__ uint8_t linear_to_alaw(int linear) ...@@ -220,16 +221,14 @@ static __inline__ uint8_t linear_to_alaw(int linear)
seg = top_bit(linear | 0xFF) - 7; seg = top_bit(linear | 0xFF) - 7;
if (seg >= 8) if (seg >= 8)
{ {
if (linear >= 0) a_val = (uint8_t) (0x7F ^ mask);
{ }
/* Out of range. Return maximum value. */ else
return (uint8_t) (0x7F ^ mask); {
} /* Combine the sign, segment, and quantization bits. */
/* We must be just a tiny step below zero */ a_val = (uint8_t) (((seg << 4) | ((linear >> ((seg) ? (seg + 3) : 4)) & 0x0F)) ^ mask);
return (uint8_t) mask;
} }
/* Combine the sign, segment, and quantization bits. */ return a_val;
return (uint8_t) (((seg << 4) | ((linear >> ((seg) ? (seg + 3) : 4)) & 0x0F)) ^ mask);
} }
/*- End of function --------------------------------------------------------*/ /*- End of function --------------------------------------------------------*/
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论