music_pipe: moved code to music_chunk_append()

This commit is contained in:
Max Kellermann 2008-11-02 16:56:49 +01:00
parent e9e9d2bc2d
commit cd61f6570f
1 changed files with 28 additions and 13 deletions

View File

@ -185,13 +185,34 @@ tail_chunk(float data_time, uint16_t bitRate, size_t frame_size)
return chunk;
}
static size_t
music_chunk_append(struct music_chunk *chunk, const void *data, size_t length,
size_t frame_size)
{
size_t rest = sizeof(chunk->data) - chunk->chunkSize;
assert(rest >= frame_size);
if (length > rest)
length = rest;
/* don't split frames */
length /= frame_size;
length *= frame_size;
memcpy(chunk->data + chunk->chunkSize, data, length);
chunk->chunkSize += length;
return length;
}
size_t music_pipe_append(const void *data0, size_t datalen,
const struct audio_format *audio_format,
float data_time, uint16_t bitRate)
{
const unsigned char *data = data0;
const size_t frame_size = audio_format_frame_size(audio_format);
size_t ret = 0, dataToSend;
size_t ret = 0, nbytes;
struct music_chunk *chunk = NULL;
/* no partial frames allowed */
@ -202,19 +223,13 @@ size_t music_pipe_append(const void *data0, size_t datalen,
if (chunk == NULL)
return ret;
dataToSend = sizeof(chunk->data) - chunk->chunkSize;
if (dataToSend > datalen)
dataToSend = datalen;
nbytes = music_chunk_append(chunk, data, datalen,
frame_size);
assert(nbytes > 0);
/* don't split frames */
dataToSend /= frame_size;
dataToSend *= frame_size;
memcpy(chunk->data + chunk->chunkSize, data, dataToSend);
chunk->chunkSize += dataToSend;
datalen -= dataToSend;
data += dataToSend;
ret += dataToSend;
datalen -= nbytes;
data += nbytes;
ret += nbytes;
}
if (chunk != NULL && chunk->chunkSize == sizeof(chunk->data))