mirror of
https://github.com/xiph/opus.git
synced 2025-05-15 07:58:29 +00:00
trivial_example: Check the return value of fread().
Silence a gcc warning by checking the return value of the fread() call instead of the feof() guard. This prevents an infinite loop in the case of a read error. Otherwise, when end-of-file is reached fread() will certainly return a smaller number of elements read than requested, so both cases are handled now. Add a comment to clarify that we're dropping a partial frame on purpose to keep the code simple. Also add more braces around conditional bodies for less error-prone style. Signed-off-by: Mark Harris <mark.hsj@gmail.com>
This commit is contained in:
parent
1168a29ecd
commit
fefcad3797
1 changed files with 13 additions and 2 deletions
|
@ -113,14 +113,25 @@ int main(int argc, char **argv)
|
|||
int i;
|
||||
unsigned char pcm_bytes[MAX_FRAME_SIZE*CHANNELS*2];
|
||||
int frame_size;
|
||||
size_t samples;
|
||||
|
||||
/* Read a 16 bits/sample audio frame. */
|
||||
fread(pcm_bytes, sizeof(short)*CHANNELS, FRAME_SIZE, fin);
|
||||
if (feof(fin))
|
||||
samples = fread(pcm_bytes, sizeof(short)*CHANNELS, FRAME_SIZE, fin);
|
||||
|
||||
/* For simplicity, only read whole frames. In a real application,
|
||||
* we'd pad the final partial frame with zeroes, record the exact
|
||||
* duration, and trim the decoded audio to match.
|
||||
*/
|
||||
if (samples != FRAME_SIZE)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
/* Convert from little-endian ordering. */
|
||||
for (i=0;i<CHANNELS*FRAME_SIZE;i++)
|
||||
{
|
||||
in[i]=pcm_bytes[2*i+1]<<8|pcm_bytes[2*i];
|
||||
}
|
||||
|
||||
/* Encode the frame. */
|
||||
nbBytes = opus_encode(encoder, in, FRAME_SIZE, cbits, MAX_PACKET_SIZE);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue