~ubuntu-branches/ubuntu/karmic/muse/karmic-proposed

« back to all changes in this revision

Viewing changes to audioprefetch.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Kobras
  • Date: 2002-04-23 17:28:23 UTC
  • Revision ID: james.westby@ubuntu.com-20020423172823-w8yplzr81a759xa3
Tags: upstream-0.5.2
ImportĀ upstreamĀ versionĀ 0.5.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//=========================================================
 
2
//  MusE
 
3
//  Linux Music Editor
 
4
//  $Id: audioprefetch.cpp,v 1.2 2002/02/27 11:52:58 muse Exp $
 
5
//
 
6
//  (C) Copyright 2001 Werner Schweer (ws@seh.de)
 
7
//=========================================================
 
8
 
 
9
#include <poll.h>
 
10
#include <stdio.h>
 
11
#include <unistd.h>
 
12
 
 
13
#include "audioprefetch.h"
 
14
#include "globals.h"
 
15
#include "track.h"
 
16
#include "song.h"
 
17
 
 
18
//---------------------------------------------------------
 
19
//   AudioPrefetch
 
20
//---------------------------------------------------------
 
21
 
 
22
AudioPrefetch::AudioPrefetch(bool rt=true, int prio=50, bool ml = true)
 
23
   : Thread(rt, prio, ml)
 
24
      {
 
25
      currentFrameSize = 0;
 
26
      }
 
27
 
 
28
//---------------------------------------------------------
 
29
//   readMsg
 
30
//---------------------------------------------------------
 
31
 
 
32
static void readMsgP(void* p, void*)
 
33
      {
 
34
      AudioPrefetch* at = (AudioPrefetch*)p;
 
35
      at->readMsg1(sizeof(PrefetchMsg));
 
36
      }
 
37
 
 
38
//---------------------------------------------------------
 
39
//   start
 
40
//---------------------------------------------------------
 
41
 
 
42
void AudioPrefetch::start()
 
43
      {
 
44
      clearPollFd();
 
45
      addPollFd(toThreadFdr, POLLIN, ::readMsgP, this, 0);
 
46
      Thread::start();
 
47
      }
 
48
 
 
49
//---------------------------------------------------------
 
50
//   ~AudioPrefetch
 
51
//---------------------------------------------------------
 
52
 
 
53
AudioPrefetch::~AudioPrefetch()
 
54
      {
 
55
      }
 
56
 
 
57
//---------------------------------------------------------
 
58
//   processMsg
 
59
//---------------------------------------------------------
 
60
 
 
61
void AudioPrefetch::processMsg1(const void* m)
 
62
      {
 
63
      const PrefetchMsg* msg = (PrefetchMsg*)m;
 
64
      switch(msg->id) {
 
65
            case PREFETCH_TICK:
 
66
                  prefetch(msg->pos, msg->bufferNo);
 
67
                  break;
 
68
            }
 
69
      }
 
70
 
 
71
//---------------------------------------------------------
 
72
//   msgTick
 
73
//---------------------------------------------------------
 
74
 
 
75
void AudioPrefetch::msgTick(int samplePos, int bufferNo)
 
76
      {
 
77
      if (noAudio)
 
78
            return;
 
79
      PrefetchMsg msg;
 
80
      msg.id = PREFETCH_TICK;
 
81
      msg.pos = samplePos;
 
82
      msg.bufferNo = bufferNo;
 
83
      while (sendMsg1(&msg, sizeof(msg)))
 
84
            sleep(1);
 
85
      }
 
86
 
 
87
//---------------------------------------------------------
 
88
//   prefetch
 
89
//---------------------------------------------------------
 
90
 
 
91
void AudioPrefetch::prefetch(int pos, int bufferNo)
 
92
      {
 
93
      bool realloc = currentFrameSize != segmentSize;
 
94
      TrackList* tl = song->tracks();
 
95
      for (iTrack it = tl->begin(); it != tl->end(); ++it) {
 
96
            if ((*it)->type() != Track::WAVE)
 
97
                  continue;
 
98
            WaveTrack* track = (WaveTrack*)(*it);
 
99
            track->fetchData(bufferNo, pos, realloc);
 
100
            }
 
101
      currentFrameSize = segmentSize;
 
102
      }
 
103