亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sgi.c

?? arm平臺下的H264編碼和解碼源代碼
?? C
字號:
/* * SGI image format * Todd Kirby <doubleshot@pacbell.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */#include "avformat.h"#include "avio.h"/* #define DEBUG *//* sgi image file signature */#define SGI_MAGIC 474#define SGI_HEADER_SIZE 512#define SGI_GRAYSCALE 1#define SGI_RGB 3#define SGI_RGBA 4#define SGI_SINGLE_CHAN 2#define SGI_MULTI_CHAN 3typedef struct SGIInfo{    short magic;    char rle;    char bytes_per_channel;    unsigned short dimension;    unsigned short xsize;    unsigned short ysize;    unsigned short zsize;} SGIInfo;static int sgi_probe(AVProbeData *pd){    /* test for sgi magic */    if (pd->buf_size >= 2 && BE_16(&pd->buf[0]) == SGI_MAGIC) {        return AVPROBE_SCORE_MAX;    } else {        return 0;    }}/* read sgi header fields */static void read_sgi_header(ByteIOContext *f, SGIInfo *info){    info->magic = (unsigned short) get_be16(f);    info->rle = get_byte(f);    info->bytes_per_channel = get_byte(f);    info->dimension = (unsigned short)get_be16(f);    info->xsize = (unsigned short) get_be16(f);    info->ysize = (unsigned short) get_be16(f);    info->zsize = (unsigned short) get_be16(f);#ifdef DEBUG    printf("sgi header fields:\n");    printf("  magic: %d\n", info->magic);    printf("    rle: %d\n", info->rle);    printf("    bpc: %d\n", info->bytes_per_channel);    printf("    dim: %d\n", info->dimension);    printf("  xsize: %d\n", info->xsize);    printf("  ysize: %d\n", info->ysize);    printf("  zsize: %d\n", info->zsize);#endif    return;}/* read an uncompressed sgi image */static int read_uncompressed_sgi(const SGIInfo *si,         AVPicture *pict, ByteIOContext *f){    int x, y, z, chan_offset, ret = 0;    uint8_t *dest_row;    /* skip header */     url_fseek(f, SGI_HEADER_SIZE, SEEK_SET);    pict->linesize[0] = si->xsize;    for (z = 0; z < si->zsize; z++) {#ifndef WORDS_BIGENDIAN        /* rgba -> bgra for rgba32 on little endian cpus */        if (si->zsize == 4 && z != 3)             chan_offset = 2 - z;        else#endif            chan_offset = z;                    for (y = si->ysize - 1; y >= 0; y--) {            dest_row = pict->data[0] + (y * si->xsize * si->zsize);            for (x = 0; x < si->xsize; x++) {                dest_row[chan_offset] = get_byte(f);                 dest_row += si->zsize;            }        }    }    return ret;}/* expand an rle row into a channel */static int expand_rle_row(ByteIOContext *f, unsigned char *optr,        int chan_offset, int pixelstride){    unsigned char pixel, count;    int length = 0; #ifndef WORDS_BIGENDIAN    /* rgba -> bgra for rgba32 on little endian cpus */    if (pixelstride == 4 && chan_offset != 3) {       chan_offset = 2 - chan_offset;    }#endif            optr += chan_offset;    while (1) {        pixel = get_byte(f);        if (!(count = (pixel & 0x7f))) {            return length;        }        if (pixel & 0x80) {            while (count--) {                *optr = get_byte(f);                length++;                optr += pixelstride;            }        } else {            pixel = get_byte(f);            while (count--) {                *optr = pixel;                length++;                optr += pixelstride;            }        }    }}/* read a run length encoded sgi image */static int read_rle_sgi(const SGIInfo *sgi_info,         AVPicture *pict, ByteIOContext *f){    uint8_t *dest_row;    unsigned long *start_table;    int y, z, xsize, ysize, zsize, tablen;     long start_offset;    int ret = 0;    xsize = sgi_info->xsize;    ysize = sgi_info->ysize;    zsize = sgi_info->zsize;    /* skip header */     url_fseek(f, SGI_HEADER_SIZE, SEEK_SET);    /* size of rle offset and length tables */    tablen = ysize * zsize * sizeof(long);    start_table = (unsigned long *)av_malloc(tablen);    if (!get_buffer(f, (uint8_t *)start_table, tablen)) {        ret = AVERROR_IO;        goto fail;    }    /* skip run length table */     url_fseek(f, tablen, SEEK_CUR);    for (z = 0; z < zsize; z++) {        for (y = 0; y < ysize; y++) {            dest_row = pict->data[0] + (ysize - 1 - y) * (xsize * zsize);            start_offset = BE_32(&start_table[y + z * ysize]);            /* don't seek if already at the next rle start offset */            if (url_ftell(f) != start_offset) {                url_fseek(f, start_offset, SEEK_SET);            }            if (expand_rle_row(f, dest_row, z, zsize) != xsize) {              ret =  AVERROR_INVALIDDATA;              goto fail;            }        }    }fail:    av_free(start_table);    return ret;}static int sgi_read(ByteIOContext *f,         int (*alloc_cb)(void *opaque, AVImageInfo *info), void *opaque){    SGIInfo sgi_info, *s = &sgi_info;    AVImageInfo info1, *info = &info1;    int ret;    read_sgi_header(f, s);    if (s->bytes_per_channel != 1) {        return AVERROR_INVALIDDATA;    }    /* check for supported image dimensions */    if (s->dimension != 2 && s->dimension != 3) {        return AVERROR_INVALIDDATA;    }    if (s->zsize == SGI_GRAYSCALE) {        info->pix_fmt = PIX_FMT_GRAY8;    } else if (s->zsize == SGI_RGB) {        info->pix_fmt = PIX_FMT_RGB24;    } else if (s->zsize == SGI_RGBA) {        info->pix_fmt = PIX_FMT_RGBA32;    } else {        return AVERROR_INVALIDDATA;    }    info->width = s->xsize;    info->height = s->ysize;    ret = alloc_cb(opaque, info);    if (ret)        return ret;    if (s->rle) {        return read_rle_sgi(s, &info->pict, f);    } else {        return read_uncompressed_sgi(s, &info->pict, f);    }    return 0; /* not reached */}#ifdef CONFIG_ENCODERSstatic void write_sgi_header(ByteIOContext *f, const SGIInfo *info){    int i;    put_be16(f, SGI_MAGIC);    put_byte(f, info->rle);    put_byte(f, info->bytes_per_channel);     put_be16(f, info->dimension);    put_be16(f, info->xsize);    put_be16(f, info->ysize);    put_be16(f, info->zsize);    /* The rest are constant in this implementation */    put_be32(f, 0L); /* pixmin */     put_be32(f, 255L); /* pixmax */     put_be32(f, 0L); /* dummy */     /* name */    for (i = 0; i < 80; i++) {        put_byte(f, 0);    }    put_be32(f, 0L); /* colormap */     /* The rest of the 512 byte header is unused. */    for (i = 0; i < 404; i++) {        put_byte(f, 0);    }}static int rle_row(ByteIOContext *f, char *row, int stride, int rowsize){    int length, count, i, x;    char *start, repeat = 0;    for (x = rowsize, length = 0; x > 0;) {        start = row;        row += (2 * stride);        x -= 2;        while (x > 0 && (row[-2 * stride] != row[-1 * stride] ||                     row[-1 * stride] != row[0])) {            row += stride;            x--;        };        row -= (2 * stride);        x += 2;        count = (row - start) / stride;        while (count > 0) {            i = count > 126 ? 126 : count;            count -= i;            put_byte(f, 0x80 | i);             length++;            while (i > 0) {                put_byte(f, *start);                start += stride;                i--;                length++;            };        };        if (x <= 0) {            break;        }        start = row;        repeat = row[0];        row += stride;        x--;        while (x > 0 && *row == repeat) {            row += stride;            x--;        };        count = (row - start) / stride;        while (count > 0) {            i = count > 126 ? 126 : count;            count -= i;            put_byte(f, i);            length++;            put_byte(f, repeat);             length++;        };    };    length++;    put_byte(f, 0);     return (length);}static int sgi_write(ByteIOContext *pb, AVImageInfo *info){    SGIInfo sgi_info, *si = &sgi_info;    long *offsettab, *lengthtab;    int i, y, z;    int tablesize, chan_offset;    uint8_t *srcrow;    si->xsize = info->width;    si->ysize = info->height;    si->rle = 1;    si->bytes_per_channel = 1;        switch(info->pix_fmt) {        case PIX_FMT_GRAY8:            si->dimension = SGI_SINGLE_CHAN;            si->zsize = SGI_GRAYSCALE;            break;        case PIX_FMT_RGB24:            si->dimension = SGI_MULTI_CHAN;            si->zsize = SGI_RGB;            break;         case PIX_FMT_RGBA32:            si->dimension = SGI_MULTI_CHAN;            si->zsize = SGI_RGBA;            break;        default:            return AVERROR_INVALIDDATA;    }    write_sgi_header(pb, si);     tablesize = si->zsize * si->ysize * sizeof(long);        /* skip rle offset and length tables, write them at the end. */    url_fseek(pb, tablesize * 2, SEEK_CUR);    put_flush_packet(pb);        lengthtab = av_malloc(tablesize);    offsettab = av_malloc(tablesize);    for (z = 0; z < si->zsize; z++) {#ifndef WORDS_BIGENDIAN        /* rgba -> bgra for rgba32 on little endian cpus */        if (si->zsize == 4 && z != 3)             chan_offset = 2 - z;        else#endif            chan_offset = z;                srcrow = info->pict.data[0] + chan_offset;                for (y = si->ysize -1; y >= 0; y--) {            offsettab[(z * si->ysize) + y] = url_ftell(pb);            lengthtab[(z * si->ysize) + y] = rle_row(pb, srcrow,                    si->zsize, si->xsize);            srcrow += info->pict.linesize[0];         }    }    url_fseek(pb, 512, SEEK_SET);        /* write offset table */    for (i = 0; i < (si->ysize * si->zsize); i++) {        put_be32(pb, offsettab[i]);    }     /* write length table */    for (i = 0; i < (si->ysize * si->zsize); i++) {        put_be32(pb, lengthtab[i]);    }    put_flush_packet(pb);        av_free(lengthtab);    av_free(offsettab);    return 0;}#endif // CONFIG_ENCODERSAVImageFormat sgi_image_format = {    "sgi",    "sgi,rgb,rgba,bw",    sgi_probe,    sgi_read,    (1 << PIX_FMT_GRAY8) | (1 << PIX_FMT_RGB24) | (1 << PIX_FMT_RGBA32), #ifdef CONFIG_ENCODERS    sgi_write,#else    NULL,#endif // CONFIG_ENCODERS};

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩一区二区三区在线 | 91天堂素人约啪| 在线视频中文字幕一区二区| 欧美白人最猛性xxxxx69交| 椎名由奈av一区二区三区| 蜜桃av噜噜一区| 欧美视频一区二区在线观看| 国产欧美日韩精品一区| 日韩精品成人一区二区在线| 99久久99久久精品免费看蜜桃| 精品国产sm最大网站免费看| 亚洲一级电影视频| 99久久99久久久精品齐齐| 国产性色一区二区| 激情综合五月婷婷| 在线电影院国产精品| 一区二区三区国产豹纹内裤在线| 国内成人精品2018免费看| 91精品国产欧美日韩| 亚洲一区日韩精品中文字幕| 99久久精品99国产精品| 日本一区二区三区免费乱视频 | 日韩免费观看2025年上映的电影| 有坂深雪av一区二区精品| 99久久综合99久久综合网站| 久久久精品国产免费观看同学| 老司机免费视频一区二区三区| 欧美高清一级片在线| 亚洲国产日韩a在线播放 | 国产成人精品综合在线观看| wwwwxxxxx欧美| 国产精品66部| 国产女主播一区| 国产精品1区2区| 国产日韩影视精品| 国产91综合一区在线观看| 久久免费电影网| 丁香激情综合国产| 中文字幕乱码日本亚洲一区二区| 国产91在线观看丝袜| 中文字幕中文字幕中文字幕亚洲无线| 不卡av在线网| 一区二区三区在线看| 欧美日精品一区视频| 天堂va蜜桃一区二区三区漫画版| 欧美日韩亚洲综合一区二区三区| 日韩影视精彩在线| 26uuu国产一区二区三区| 国产成人免费视频一区| 亚洲婷婷在线视频| 欧美主播一区二区三区美女| 日本三级亚洲精品| 国产亚洲一本大道中文在线| av电影天堂一区二区在线观看| 亚洲三级久久久| 欧美一区二区三区婷婷月色| 国产在线精品不卡| 中文字幕在线一区免费| 欧美视频精品在线观看| 精品亚洲免费视频| 国产精品久久久久一区| 欧美日韩精品一区视频| 国产一区在线精品| 亚洲欧美日韩中文字幕一区二区三区 | 欧美亚洲一区二区在线| 男女视频一区二区| 国产精品日韩成人| 欧美日韩一区二区欧美激情| 国内精品不卡在线| 一二三四社区欧美黄| 久久婷婷色综合| 色老汉一区二区三区| 激情五月激情综合网| 亚洲欧美经典视频| 久久久久亚洲蜜桃| 欧美少妇一区二区| 成人aaaa免费全部观看| 奇米一区二区三区| 国产精品久久看| 欧美一级日韩免费不卡| 99re视频精品| 久久99精品国产麻豆婷婷洗澡| 一区二区三区国产精华| 国产日韩欧美一区二区三区综合| 欧美三级蜜桃2在线观看| 成年人午夜久久久| 狠狠网亚洲精品| 偷窥少妇高潮呻吟av久久免费 | 久久久高清一区二区三区| 欧美三级资源在线| 99精品一区二区三区| 国产美女主播视频一区| 日韩av一级电影| 一区二区三区小说| 中文字幕久久午夜不卡| 欧美精品一区二区蜜臀亚洲| 欧美精品1区2区3区| 在线日韩av片| 成人污视频在线观看| 国产美女精品人人做人人爽| 美女www一区二区| 天堂成人免费av电影一区| 一区二区三区欧美日| 亚洲欧美另类久久久精品2019| 国产欧美精品一区二区色综合朱莉 | 中文无字幕一区二区三区| 日韩你懂的在线观看| 91精品国产一区二区三区香蕉| 欧美在线一区二区| 欧美体内she精高潮| 在线免费观看日本一区| 在线观看视频一区二区| 91精品1区2区| 色婷婷精品大视频在线蜜桃视频| 99国产精品99久久久久久| 9色porny自拍视频一区二区| 国产999精品久久| 成人黄色a**站在线观看| 成人黄页毛片网站| 成人av网在线| 97久久精品人人做人人爽50路| 成a人片亚洲日本久久| 91丨九色porny丨蝌蚪| 白白色亚洲国产精品| 91视频.com| 91国产精品成人| 欧美日韩第一区日日骚| 91麻豆精品国产| 精品国产自在久精品国产| 久久精品欧美一区二区三区不卡| 欧美国产精品一区二区三区| 中日韩免费视频中文字幕| 亚洲卡通动漫在线| 天天影视色香欲综合网老头| 美女网站在线免费欧美精品| 国产一区二区不卡| 成人精品视频.| 欧美日韩国产天堂| 日韩免费电影网站| 国产精品国模大尺度视频| 亚洲男同性视频| 日本美女一区二区三区| 国产成人av一区二区三区在线 | 亚洲一区二区三区不卡国产欧美| 天天综合色天天综合| 精彩视频一区二区| 91在线免费视频观看| 91麻豆精品国产综合久久久久久| 久久美女高清视频| 亚洲一区二区视频在线观看| 狠狠v欧美v日韩v亚洲ⅴ| 99久久99久久综合| 日韩一区二区视频在线观看| 国产日韩欧美制服另类| 婷婷中文字幕综合| 国产盗摄一区二区| 欧美精品日韩一本| 欧美激情综合在线| 三级在线观看一区二区| 成人国产精品免费观看动漫| 3d动漫精品啪啪1区2区免费| 国产精品无人区| 蜜臀av在线播放一区二区三区| 白白色 亚洲乱淫| 欧美白人最猛性xxxxx69交| 亚洲婷婷综合色高清在线| 狠狠狠色丁香婷婷综合激情| 欧美影视一区二区三区| 日本一区二区成人| 日韩国产欧美一区二区三区| av毛片久久久久**hd| 日韩色在线观看| 亚洲综合免费观看高清完整版| 国产精品亚洲专一区二区三区| 欧美丰满美乳xxx高潮www| 国产精品成人免费| 国产麻豆精品视频| 日韩色视频在线观看| 亚洲一二三四区不卡| 99久久精品一区二区| 国产欧美日韩在线看| 久久精品国产精品亚洲红杏| 欧美精品777| 亚洲一区二区欧美| 欧美综合天天夜夜久久| 综合网在线视频| www.日韩av| 国产日产亚洲精品系列| 国产麻豆精品久久一二三| 日韩欧美成人一区| 麻豆精品一区二区三区| 欧美日韩一级二级| 图片区小说区国产精品视频| 欧美色图在线观看| 一区二区三区日韩在线观看| 色综合中文字幕国产 | 蜜臀国产一区二区三区在线播放| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产精品色哟哟网站| 99久久久久久|