Fork us on GitHub Follow us on Facebook Follow us on Twitter

Ignore:
Timestamp:
2012-07-15T15:25:43Z (10 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial
Children:
5cd5079
Parents:
2cc5c835
Message:

Add frame count to event report.

This enables applications to detect underruns.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/audio/hound/audio_device.c

    r2cc5c835 r57e8b3b  
    4646#include "log.h"
    4747
    48 #define BUFFER_BLOCKS 2
     48#define BUFFER_PARTS 2
    4949
    5050static int device_sink_connection_callback(audio_sink_t *sink, bool new);
     
    107107                    dev->buffer.base, dev->buffer.size);
    108108
    109                 ret = audio_pcm_start_playback(dev->sess, BUFFER_BLOCKS,
     109                const unsigned frames = dev->buffer.size /
     110                    (BUFFER_PARTS * audio_format_frame_size(&dev->sink.format));
     111                ret = audio_pcm_start_playback(dev->sess, frames,
    110112                    dev->sink.format.channels, dev->sink.format.sampling_rate,
    111113                    dev->sink.format.sample_format);
     
    148150                        return ret;
    149151                }
    150                 ret = audio_pcm_start_record(dev->sess, BUFFER_BLOCKS,
     152                const unsigned frames = dev->buffer.size /
     153                    (BUFFER_PARTS * audio_format_frame_size(&dev->sink.format));
     154                ret = audio_pcm_start_record(dev->sess, frames,
    151155                    dev->sink.format.channels, dev->sink.format.sampling_rate,
    152156                    dev->sink.format.sample_format);
     
    187191                async_answer_0(callid, EOK);
    188192                switch(IPC_GET_IMETHOD(call)) {
    189                 case PCM_EVENT_PLAYBACK_DONE: {
     193                case PCM_EVENT_FRAMES_PLAYED: {
     194                        //TODO add underrun protection.
    190195                        if (dev->buffer.position) {
    191196                                dev->buffer.position +=
    192                                     (dev->buffer.size / BUFFER_BLOCKS);
     197                                    (dev->buffer.size / BUFFER_PARTS);
    193198                        }
    194199                        if ((!dev->buffer.position) ||
     
    199204                        }
    200205                        audio_sink_mix_inputs(&dev->sink, dev->buffer.position,
    201                             dev->buffer.size / BUFFER_BLOCKS);
     206                            dev->buffer.size / BUFFER_PARTS);
    202207                        break;
    203208                }
     
    206211                        return;
    207212                }
    208                 case PCM_EVENT_RECORDING_DONE: {
     213                case PCM_EVENT_FRAMES_RECORDED: {
    209214                        //TODO implement
    210215                        break;
Note: See TracChangeset for help on using the changeset viewer.