Go to the documentation of this file.
47 int len,
int pixelstride)
49 unsigned char pixel, count;
50 unsigned char *orig = out_buf;
51 uint8_t *out_end = out_buf +
len;
53 while (out_buf < out_end) {
56 pixel = bytestream2_get_byteu(&
s->g);
57 if (!(count = (
pixel & 0x7f))) {
62 if (out_end - out_buf <= pixelstride * (count - 1)) {
69 *out_buf = bytestream2_get_byte(&
s->g);
70 out_buf += pixelstride;
73 pixel = bytestream2_get_byte(&
s->g);
77 out_buf += pixelstride;
81 return (out_buf - orig) / pixelstride;
85 int len,
int pixelstride)
89 unsigned short *orig = out_buf;
90 uint16_t *out_end = out_buf +
len;
92 while (out_buf < out_end) {
95 pixel = bytestream2_get_be16u(&
s->g);
96 if (!(count = (
pixel & 0x7f)))
100 if (out_end - out_buf <= pixelstride * (count - 1)) {
109 out_buf += pixelstride;
116 out_buf += pixelstride;
120 return (out_buf - orig) / pixelstride;
133 unsigned int len =
s->height *
s->depth * 4;
136 unsigned int start_offset;
144 for (z = 0; z <
s->depth; z++) {
146 for (y = 0; y <
s->height; y++) {
147 linesize =
s->width *
s->depth;
148 dest_row -=
s->linesize;
149 start_offset = bytestream2_get_be32(&g_table);
151 if (
s->bytes_per_channel == 1)
171 unsigned int offset =
s->height *
s->width *
s->bytes_per_channel;
180 for (z = 0; z <
s->depth; z++) {
185 for (y =
s->height - 1; y >= 0; y--) {
186 out_end = out_buf + (y *
s->linesize);
187 if (
s->bytes_per_channel == 1) {
188 for (x =
s->width; x > 0; x--)
189 for (z = 0; z <
s->depth; z++)
190 *out_end++ = bytestream2_get_byteu(&
gp[z]);
192 uint16_t *out16 = (uint16_t *)out_end;
193 for (x =
s->width; x > 0; x--)
194 for (z = 0; z <
s->depth; z++)
202 void *
data,
int *got_frame,
209 uint8_t *out_buf, *out_end;
218 if (bytestream2_get_be16u(&
s->g) !=
SGI_MAGIC) {
223 rle = bytestream2_get_byteu(&
s->g);
224 s->bytes_per_channel = bytestream2_get_byteu(&
s->g);
226 s->width = bytestream2_get_be16u(&
s->g);
227 s->height = bytestream2_get_be16u(&
s->g);
228 s->depth = bytestream2_get_be16u(&
s->g);
230 if (
s->bytes_per_channel != 1 &&
s->bytes_per_channel != 2) {
261 out_buf = p->
data[0];
263 out_end = out_buf + p->
linesize[0] *
s->height;
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
unsigned int bytes_per_channel
This structure describes decoded (raw) audio or video data.
static av_always_inline int bytestream2_seek(GetByteContext *g, int offset, int whence)
@ AV_PIX_FMT_RGBA64BE
packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is st...
static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPacket *avpkt)
static int expand_rle_row16(SgiState *s, uint16_t *out_buf, int len, int pixelstride)
static int rle(uint8_t *dst, const uint8_t *src, int compressed_size, int uncompressed_size)
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
@ AV_PIX_FMT_GRAY16BE
Y , 16bpp, big-endian.
static av_always_inline void bytestream2_skip(GetByteContext *g, unsigned int size)
int key_frame
1 -> keyframe, 0-> not
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
static void decode(AVCodecContext *dec_ctx, AVPacket *pkt, AVFrame *frame, FILE *outfile)
#define SGI_MAGIC
SGI image file signature.
@ AV_PIX_FMT_RGBA
packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
@ AV_PICTURE_TYPE_I
Intra.
const AVCodec ff_sgi_decoder
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
static av_always_inline int bytestream2_get_bytes_left(GetByteContext *g)
enum AVPictureType pict_type
Picture type of the frame.
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
#define bytestream2_get_ne16
static int read_rle_sgi(uint8_t *out_buf, SgiState *s)
Read a run length encoded SGI image.
static int read_uncompressed_sgi(unsigned char *out_buf, SgiState *s)
Read an uncompressed SGI image.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
@ AV_PIX_FMT_RGB48BE
packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big...
const char * name
Name of the codec implementation.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
static int expand_rle_row8(SgiState *s, uint8_t *out_buf, int len, int pixelstride)
Expand an RLE row into a channel.
main external API structure.
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
This structure stores compressed data.
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
The official guide to swscale for confused that consecutive non overlapping rectangles of dimension(0, slice_top) -(picture_width
#define bytestream2_get_ne16u
static av_cold int sgi_decode_init(AVCodecContext *avctx)