2 #ifndef CVD_INCLUDE_DEINTERLACEBUFFER_H 3 #define CVD_INCLUDE_DEINTERLACEBUFFER_H 5 #include <cvd/deinterlaceframe.h> 6 #include <cvd/internal/pixel_operations.h> 7 #include <cvd/internal/rgb_components.h> 8 #include <cvd/videobuffer.h> 25 using CVD::Exceptions::VideoBuffer::All::All;
100 return m_vidbuf.frame_pending();
105 return m_vidbuf.seek_to(t);
113 if(m_fields == Fields::OddOnly || m_fields == Fields::EvenOnly)
114 return m_vidbuf.frame_rate();
116 return m_vidbuf.frame_rate() * 2.0;
132 template <
typename T>
137 , m_loadnewframe(true)
141 if(m_vidbuf.size().y % 2 != 0)
144 if(line_double ==
false)
145 m_size =
ImageRef(m_vidbuf.size().x, m_vidbuf.size().y / 2);
147 m_size = m_vidbuf.size();
149 m_linebytes =
sizeof(T) * m_size.
x;
155 template <
typename T>
161 my_realframe = m_vidbuf.get_frame();
166 double time = my_realframe->timestamp();
170 time += 0.5 / frame_rate();
174 if(m_fields == Fields::OddOnly || (m_fields == Fields::OddEven && m_loadnewframe) || (m_fields == Fields::EvenOdd && !m_loadnewframe))
181 for(
int y = 1; y < m_size.y; y += 2)
182 for(
int x = 0; x < m_size.x; x++)
183 (*frame)[y][x] = (*my_realframe)[y][x];
185 for(
int y = 2; y < m_size.y - 1; y += 2)
186 for(
int x = 0; x < m_size.x; x++)
187 for(
unsigned int i = 0; i < Pixel::Component<T>::count; i++)
208 for(
int y = 0; y < m_size.y; y++)
209 for(
int x = 0; x < m_size.x; x++)
210 (*frame)[y][x] = (*my_realframe)[2 * y + 1][x];
220 for(
int y = 0; y < m_size.y; y += 2)
221 for(
int x = 0; x < m_size.x; x++)
222 (*frame)[y][x] = (*my_realframe)[y][x];
224 for(
int y = 1; y < m_size.y - 1; y += 2)
225 for(
int x = 0; x < m_size.x; x++)
226 for(
unsigned int i = 0; i < Pixel::Component<T>::count; i++)
245 for(
int y = 0; y < m_size.y; y++)
246 for(
int x = 0; x < m_size.x; x++)
247 (*frame)[y][x] = (*my_realframe)[2 * y][x];
250 frame->real_frame = my_realframe;
252 if(m_fields == Fields::OddEven || m_fields == Fields::EvenOdd)
255 m_loadnewframe = !m_loadnewframe;
264 template <
typename T>
273 template <
typename T>
279 m_vidbuf.put_frame(my_realframe);
virtual double frame_rate()
What is the (expected) frame rate of this video buffer, in frames per second? If OddEven or EvenOdd a...
Definition: deinterlacebuffer.h:111
Base class which provides untyped access to video grabber objects.
Definition: videobuffer.h:39
virtual bool frame_pending()
Is there a frame waiting in the buffer? This function does not block.
Definition: deinterlacebuffer.h:98
All classes and functions are within the CVD namespace.
Definition: argb.h:6
A decorator class which wraps a VideoBuffer to return fields instead of the original frames (see also...
Definition: deinterlacebuffer.h:64
Even fields only.
Definition: deinterlacebuffer.h:69
Base class for objects which provide a typed video stream.
Definition: videobuffer.h:88
A frame from a DeinterlaceBuffer, representing one field from an interlaced frame.
Definition: deinterlaceframe.h:21
void zero()
Set image data to all zero bytes.
Definition: image.h:564
void put_frame(CVD::VideoFrame< T > *f)
Tell the buffer that you are finished with this frame.
Definition: deinterlacebuffer.h:274
CVD::VideoFrame< T > * get_frame()
Returns the next frame from the buffer. This function blocks until a frame is ready.
Definition: deinterlacebuffer.h:156
virtual RawVideoBuffer * source_buffer()
Which video grabber provides the source images for this video grabber.
Definition: deinterlacebuffer.h:91
int x
The x co-ordinate.
Definition: image_ref.h:172
The VideoBuffer that is being wrapped does not have an even number of lines (so the odd and even- fie...
Definition: deinterlacebuffer.h:30
Base class for all DeinterlaceBuffer exceptions.
Definition: deinterlacebuffer.h:23
Definition: image_ref.h:29
Odd fields only.
Definition: deinterlacebuffer.h:68
Both fields, presenting the odd lines from each frame first.
Definition: deinterlacebuffer.h:70
Base class for all VideoBuffer exceptions.
Definition: videobuffer.h:153
Definition: deinterlacebuffer.h:76
A frame from a VideoBuffer.
Definition: videoframe.h:35
virtual void seek_to(double t)
Go to a particular point in the video buffer (only implemented in buffers of recorded video) ...
Definition: deinterlacebuffer.h:103
A full image which manages its own data.
Definition: image.h:623
ImageRef size()
The size of the VideoFrames returns by this buffer.
Definition: deinterlacebuffer.h:265
DeinterlaceBuffer(CVD::VideoBuffer< T > &buf, Fields::Fields fields=Fields::OddEven, bool line_double=false)
Construct a DeinterlaceBuffer by wrapping it around another VideoBuffer.
Definition: deinterlacebuffer.h:133
Definition: builtin_components.h:38
Fields
Definition: deinterlacebuffer.h:66