DD::Image::IopInfo Class Reference

Inherits DD::Image::Info2D.

Public Types

enum  AccessPreference { eAccessPreferNone, eAccessPreferLinear }
- Public Types inherited from DD::Image::Box
typedef iterator const_iterator

Public Member Functions

ChannelSetchannels ()
ChannelMask channels () const
void channels (ChannelSetInit v)
void channels (ChannelMask v)
void channels (Channel v)
void setAccessPreference (AccessPreference ap)
const AccessPreference & accessPreference () const
int ydirection () const
void ydirection (int v)
bool black_outside () const
void black_outside (bool v)
void turn_on (ChannelSetInit m)
void turn_on (ChannelMask m)
void turn_on (Channel c)
void turn_off (ChannelSetInit m)
void turn_off (ChannelMask m)
void turn_off (Channel c)
bool is_constant () const
void clipmove (int dx, int dy, int dr, int dt)
void operator= (const DeepInfo &deepInfo)
 copy over the subset of DeepInfo and IopInfo onto this
- Public Member Functions inherited from DD::Image::Info2D
 Info2D ()
void setFormats (const FormatPair &formats)
FormatPair formats () const
const Formatformat () const
void format (const Format &v)
const Formatfull_size_format () const
void full_size_format (const Format &v)
const DD::Image::Boxbox () const
DD::Image::Boxbox ()
void setBox (const DD::Image::Box &box)
- Public Member Functions inherited from DD::Image::GeneralInfo
int firstFrame () const
 get the first frame in the range
int first_frame () const
 get the first frame in the range More...
int lastFrame () const
 get the last frame in the range
int last_frame () const
 get the last frame in the range More...
void setFirstFrame (int v)
 set the first frame in the range
void setLastFrame (int v)
 set the last frame in the range
void first_frame (int v)
 set the first frame in the range
void last_frame (int v)
 set the last frame in the range
void setFrameRange (FrameRange frameRange)
- Public Member Functions inherited from DD::Image::Box
iterator begin () const
iterator end () const
 Box (int x, int y, int r, int t)
 Box (const Box &b)
int x () const
void x (int v)
int y () const
void y (int v)
int r () const
void r (int v)
int t () const
void t (int v)
int w () const
void w (int v)
int h () const
void h (int v)
float center_x () const
float center_y () const
void set (int x, int y, int r, int t)
void set (const Box &b)
bool is_constant () const
void clear ()
void move (int dx, int dy)
void pad (int dx, int dy, int dr, int dt)
void pad (int dx, int dy)
void pad (int d)
int clampx (int x) const
int clampy (int y) const
void merge (const Box &)
void merge (int x, int y)
void merge (int x, int y, int r, int t)
void expand (int amount)
void expand (int widthAmount, int heightAmount)
void scale (float scaleAmount)
void intersect (const Box &)
void intersect (int x, int y, int r, int t)
bool intersects (const Box &other) const
bool intersects (int x, int y, int r, int t) const
bool contains (const Box &other) const
int area () const

Detailed Description

This structure contains information that Iop::_validate() must calculate. Because this information is often copied unchanged or with tiny variations from the input operator, it is put into this structure so that it can be copied with a single assignment.

This is a subclass of Box and that provides x,y,r,t values that describe the bounding box around all the interesting pixels (that is, the region of definition). It also provides a merge and intersect operators that are useful when _validate is combining the info from two inputs.

Member Function Documentation

ChannelMask DD::Image::IopInfo::channels ( ) const

Which channels exist in the output of this Iop.

AccessPreference & DD::Image::IopInfo::accessPreference ( ) const

Indicates a preferred access pattern to ask for the lines in. Some operators operate full frame and prefer to be asked for lines from the very top of the request area rather than in the middle.

Operators can call IopInfo::setAccessPreference to set their access preference. eAccessPreferLinear will cause the viewer to ask for lines always from the top or bottom of the request area first, ignoring any user mouse click.

The default is eAccessPreferNone, indicating this operator has no access preference.

Referenced by DD::Image::Iop::merge_info().

int DD::Image::IopInfo::ydirection ( ) const

Indicates a preferred direction to ask for the lines in. Some operators (ie file readers) can produce the lines in one direction much faster, usually because reading line N requires reading all lines from 0..N-1 first. Thus if you go by increasing N the first line is returned immediately, but if you go backwards there is a long delay before the first line is produced. Notice that positive means "up" as line 0 is at the bottom.

Larger numbers indicate how "bad" it is. For sgi files it uses +/- 1 because reading in the wrong direction just means it will do seek() between each line. For jpeg it is -100 because it has to decode all lines above line N.

If your operator flips the picture upsidedown it should negate the y direction, otherwise leave it unchanged. If it reads from several inputs it should add all the ydirections together.

Referenced by DD::Image::Transform::_validate(), DD::Image::Iop::copy_info(), DD::Image::Iop::merge_info(), and DD::Image::Reader::Reader().

bool DD::Image::IopInfo::black_outside ( ) const

True indicates that a 1-pixel border all around the edge of the bounding box is zero in all channels. Operators are expected to set this correctly to match their output.

Many operators can take advantage of this to avoid adding their own black edge and thus avoid increasing the bounding box size.

Referenced by DD::Image::RenderScene::_validate(), DD::Image::DrawIop::_validate(), DD::Image::Transform::_validate(), DD::Image::Black::Black(), DD::Image::Iop::copy_info(), DD::Image::Transform::degenerate(), DD::Image::Iop::merge_info(), DD::Image::Reader::Reader(), and DD::Image::Reader::set_info().

void DD::Image::IopInfo::turn_on ( ChannelMask  m)

Same as channels(turn_on(channels(), m)).

void DD::Image::IopInfo::turn_on ( Channel  c)

Same as channels(turn_on(channels(), c)).

void DD::Image::IopInfo::turn_off ( ChannelMask  m)

Same as channels(turn_off(channels(), m)).

void DD::Image::IopInfo::turn_off ( Channel  c)

Same as channels(turn_off(channels(), c)).

void DD::Image::IopInfo::clipmove ( int  dx,
int  dy,
int  dr,
int  dt 

Expand the bounding box by dx,dy,dr,dt but do not expand it outside the box determined by 0,0,format().width(),format().height() if it is at or inside this. This is used by filter operations, and stops them from expanding their data outside the current format. This clipping is usually what is expected and avoids keeping unnecessary data in the cache buffers, and avoids random-sized caches which fragment memory.

If bounding box is 1 pixel wide in either direction it leaves it unchanged, since this indicates a constant value.

©2022 The Foundry Visionmongers, Ltd. All Rights Reserved.