~ubuntu-branches/ubuntu/hoary/kdemultimedia/hoary

« back to all changes in this revision

Viewing changes to mpeglib/lib/frame/frameQueue.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Martin Schulze
  • Date: 2003-01-22 15:00:51 UTC
  • Revision ID: james.westby@ubuntu.com-20030122150051-uihwkdoxf15mi1tn
Tags: upstream-2.2.2
ImportĀ upstreamĀ versionĀ 2.2.2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
  queues frames
 
3
  Copyright (C) 2001  Martin Vogt
 
4
 
 
5
  This program is free software; you can redistribute it and/or modify
 
6
  it under the terms of the GNU Library General Public License as published by
 
7
  the Free Software Foundation.
 
8
 
 
9
  For more information look at the file COPYRIGHT in this package
 
10
 
 
11
 */
 
12
 
 
13
 
 
14
#include "frameQueue.h"
 
15
 
 
16
 
 
17
FrameQueue::FrameQueue(int maxsize) {
 
18
  this->size=maxsize;
 
19
  entries = new Frame*[size];
 
20
  int i;
 
21
  for(i=0;i<size;i++) {
 
22
    entries[i]=NULL;
 
23
  }
 
24
  fillgrade=0;
 
25
  writepos=0;
 
26
  readpos=0;
 
27
}
 
28
 
 
29
 
 
30
FrameQueue::~FrameQueue() {
 
31
  int i;
 
32
  for(i=0;i<size;i++) {
 
33
    if (entries[i] != NULL) {
 
34
      delete entries[i];
 
35
    }
 
36
  }
 
37
  delete entries;
 
38
}
 
39
 
 
40
int FrameQueue::canRead() {
 
41
  return (fillgrade > 0);
 
42
}
 
43
 
 
44
 
 
45
int FrameQueue::canWrite() {
 
46
  return (fillgrade < size);
 
47
}
 
48
 
 
49
 
 
50
int FrameQueue::getFillgrade() {
 
51
  return fillgrade;
 
52
}
 
53
 
 
54
 
 
55
void FrameQueue::enqueue(Frame* frame) {
 
56
  if(canWrite() == false) {
 
57
    cout << "FrameQueue full cannot enqueue"<<endl;
 
58
    exit(0);
 
59
  }
 
60
  fillgrade++;
 
61
  entries[writepos]=frame;
 
62
  writepos++;
 
63
  if (writepos == size) {
 
64
    writepos=0;
 
65
  }
 
66
}
 
67
 
 
68
 
 
69
Frame* FrameQueue::dequeue() {
 
70
  if(canRead() == false) {
 
71
    cout << "FrameQueue empty cannot dequeue"<<endl;
 
72
    exit(0);
 
73
  }
 
74
  Frame* back=entries[readpos];
 
75
  // invalide this frame, we do not longer own it!
 
76
  entries[readpos]=NULL;
 
77
  fillgrade--;
 
78
  readpos++;
 
79
  if (readpos == size) {
 
80
    readpos=0;
 
81
  }
 
82
  return back;
 
83
}
 
84
 
 
85
Frame* FrameQueue::peekqueue(int pos) {
 
86
  if(fillgrade-pos <= 0) {
 
87
    cout << "FrameQueue : cannot peek this positon"<<endl;
 
88
    exit(0);
 
89
  }
 
90
  int getpos=(readpos+pos) % size;
 
91
 
 
92
  
 
93
  Frame* back=entries[getpos];
 
94
  return back; 
 
95
}
 
96