Implement a write_line() function.
Originally committed as revision 18646 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
fd548e5bd6
commit
9401d18fa5
@ -137,3 +137,54 @@ static inline void read_line(uint16_t *dst, const uint8_t *data[4], const int li
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Writes the values from src to the pixel format component c of an
|
||||
* image line.
|
||||
*
|
||||
* @param src array containing the values to write
|
||||
* @param data the array containing the pointers to the planes of the
|
||||
* image to write into. It is supposed to be zeroed.
|
||||
* @param linesizes the array containing the linesizes of the image
|
||||
* @param desc the pixel format descriptor for the image
|
||||
* @param x the horizontal coordinate of the first pixel to write
|
||||
* @param y the vertical coordinate of the first pixel to write
|
||||
* @param w the width of the line to write, that is the number of
|
||||
* values to write to the image line
|
||||
*/
|
||||
static inline void write_line(const uint16_t *src, uint8_t *data[4], const int linesize[4],
|
||||
const AVPixFmtDescriptor *desc, int x, int y, int c, int w)
|
||||
{
|
||||
AVComponentDescriptor comp = desc->comp[c];
|
||||
int plane = comp.plane;
|
||||
int depth = comp.depth_minus1+1;
|
||||
int step = comp.step_minus1+1;
|
||||
int flags = desc->flags;
|
||||
|
||||
if (flags & PIX_FMT_BITSTREAM) {
|
||||
int skip = x*step + comp.offset_plus1-1;
|
||||
uint8_t *p = data[plane] + y*linesize[plane] + (skip>>3);
|
||||
int shift = 8 - depth - (skip&7);
|
||||
|
||||
while (w--) {
|
||||
*p |= *src++ << shift;
|
||||
shift -= step;
|
||||
p -= shift>>3;
|
||||
shift &= 7;
|
||||
}
|
||||
} else {
|
||||
int shift = comp.shift;
|
||||
uint8_t *p = data[plane]+ y*linesize[plane] + x*step + comp.offset_plus1-1;
|
||||
|
||||
while (w--) {
|
||||
if (flags & PIX_FMT_BE) {
|
||||
uint16_t val = AV_RB16(p) | (*src++<<shift);
|
||||
AV_WB16(p, val);
|
||||
} else {
|
||||
uint16_t val = AV_RL16(p) | (*src++<<shift);
|
||||
AV_WL16(p, val);
|
||||
}
|
||||
p+= step;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user