mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-12-23 12:43:46 +02:00
Remove duplicate bytestream functions
Originally committed as revision 9108 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
cb1a74cf8c
commit
67a5daf07f
@ -86,8 +86,7 @@ static void adx_encode(unsigned char *adx,const short *wav,PREV *prev)
|
|||||||
|
|
||||||
if (scale==0) scale=1;
|
if (scale==0) scale=1;
|
||||||
|
|
||||||
adx[0] = scale>>8;
|
AV_WB16(adx, scale);
|
||||||
adx[1] = scale;
|
|
||||||
|
|
||||||
for(i=0;i<16;i++) {
|
for(i=0;i<16;i++) {
|
||||||
adx[i+2] = ((data[i*2]/scale)<<4) | ((data[i*2+1]/scale)&0xf);
|
adx[i+2] = ((data[i*2]/scale)<<4) | ((data[i*2+1]/scale)&0xf);
|
||||||
@ -97,7 +96,7 @@ static void adx_encode(unsigned char *adx,const short *wav,PREV *prev)
|
|||||||
|
|
||||||
static void adx_decode(short *out,const unsigned char *in,PREV *prev)
|
static void adx_decode(short *out,const unsigned char *in,PREV *prev)
|
||||||
{
|
{
|
||||||
int scale = ((in[0]<<8)|(in[1]));
|
int scale = AV_RB16(in);
|
||||||
int i;
|
int i;
|
||||||
int s0,s1,s2,d;
|
int s0,s1,s2,d;
|
||||||
|
|
||||||
@ -145,14 +144,6 @@ static void adx_decode_stereo(short *out,const unsigned char *in,PREV *prev)
|
|||||||
|
|
||||||
#ifdef CONFIG_ENCODERS
|
#ifdef CONFIG_ENCODERS
|
||||||
|
|
||||||
static void write_long(unsigned char *p,uint32_t v)
|
|
||||||
{
|
|
||||||
p[0] = v>>24;
|
|
||||||
p[1] = v>>16;
|
|
||||||
p[2] = v>>8;
|
|
||||||
p[3] = v;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int adx_encode_header(AVCodecContext *avctx,unsigned char *buf,size_t bufsize)
|
static int adx_encode_header(AVCodecContext *avctx,unsigned char *buf,size_t bufsize)
|
||||||
{
|
{
|
||||||
#if 0
|
#if 0
|
||||||
@ -178,13 +169,13 @@ static int adx_encode_header(AVCodecContext *avctx,unsigned char *buf,size_t buf
|
|||||||
} adxhdr; /* big endian */
|
} adxhdr; /* big endian */
|
||||||
/* offset-6 "(c)CRI" */
|
/* offset-6 "(c)CRI" */
|
||||||
#endif
|
#endif
|
||||||
write_long(buf+0x00,0x80000000|0x20);
|
AV_WB32(buf+0x00,0x80000000|0x20);
|
||||||
write_long(buf+0x04,0x03120400|avctx->channels);
|
AV_WB32(buf+0x04,0x03120400|avctx->channels);
|
||||||
write_long(buf+0x08,avctx->sample_rate);
|
AV_WB32(buf+0x08,avctx->sample_rate);
|
||||||
write_long(buf+0x0c,0); /* FIXME: set after */
|
AV_WB32(buf+0x0c,0); /* FIXME: set after */
|
||||||
write_long(buf+0x10,0x01040300);
|
AV_WB32(buf+0x10,0x01040300);
|
||||||
write_long(buf+0x14,0x00000000);
|
AV_WB32(buf+0x14,0x00000000);
|
||||||
write_long(buf+0x18,0x00000000);
|
AV_WB32(buf+0x18,0x00000000);
|
||||||
memcpy(buf+0x1c,"\0\0(c)CRI",8);
|
memcpy(buf+0x1c,"\0\0(c)CRI",8);
|
||||||
return 0x20+4;
|
return 0x20+4;
|
||||||
}
|
}
|
||||||
@ -264,17 +255,12 @@ static int adx_encode_frame(AVCodecContext *avctx,
|
|||||||
|
|
||||||
#endif //CONFIG_ENCODERS
|
#endif //CONFIG_ENCODERS
|
||||||
|
|
||||||
static uint32_t read_long(const unsigned char *p)
|
|
||||||
{
|
|
||||||
return (p[0]<<24)|(p[1]<<16)|(p[2]<<8)|p[3];
|
|
||||||
}
|
|
||||||
|
|
||||||
static int is_adx(const unsigned char *buf,size_t bufsize)
|
static int is_adx(const unsigned char *buf,size_t bufsize)
|
||||||
{
|
{
|
||||||
int offset;
|
int offset;
|
||||||
|
|
||||||
if (buf[0]!=0x80) return 0;
|
if (buf[0]!=0x80) return 0;
|
||||||
offset = (read_long(buf)^0x80000000)+4;
|
offset = (AV_RB32(buf)^0x80000000)+4;
|
||||||
if (bufsize<offset || memcmp(buf+offset-6,"(c)CRI",6)) return 0;
|
if (bufsize<offset || memcmp(buf+offset-6,"(c)CRI",6)) return 0;
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
@ -289,8 +275,8 @@ static int adx_decode_header(AVCodecContext *avctx,const unsigned char *buf,size
|
|||||||
if (offset==0) return 0;
|
if (offset==0) return 0;
|
||||||
|
|
||||||
channels = buf[7];
|
channels = buf[7];
|
||||||
freq = read_long(buf+8);
|
freq = AV_RB32(buf+8);
|
||||||
size = read_long(buf+12);
|
size = AV_RB32(buf+12);
|
||||||
|
|
||||||
// printf("freq=%d ch=%d\n",freq,channels);
|
// printf("freq=%d ch=%d\n",freq,channels);
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
#include "bytestream.h"
|
||||||
|
|
||||||
typedef struct DVBSubtitleContext {
|
typedef struct DVBSubtitleContext {
|
||||||
int hide_state;
|
int hide_state;
|
||||||
@ -208,15 +209,6 @@ static void dvb_encode_rle4(uint8_t **pq,
|
|||||||
(((FIX(0.50000*224.0/255.0) * r1 - FIX(0.41869*224.0/255.0) * g1 - \
|
(((FIX(0.50000*224.0/255.0) * r1 - FIX(0.41869*224.0/255.0) * g1 - \
|
||||||
FIX(0.08131*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
|
FIX(0.08131*224.0/255.0) * b1 + (ONE_HALF << shift) - 1) >> (SCALEBITS + shift)) + 128)
|
||||||
|
|
||||||
static inline void putbe16(uint8_t **pq, uint16_t v)
|
|
||||||
{
|
|
||||||
uint8_t *q;
|
|
||||||
q = *pq;
|
|
||||||
*q++ = v >> 8;
|
|
||||||
*q++ = v;
|
|
||||||
*pq = q;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
||||||
uint8_t *outbuf, AVSubtitle *h)
|
uint8_t *outbuf, AVSubtitle *h)
|
||||||
{
|
{
|
||||||
@ -237,7 +229,7 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
|||||||
|
|
||||||
*q++ = 0x0f; /* sync_byte */
|
*q++ = 0x0f; /* sync_byte */
|
||||||
*q++ = 0x10; /* segment_type */
|
*q++ = 0x10; /* segment_type */
|
||||||
putbe16(&q, page_id);
|
bytestream_put_be16(&q, page_id);
|
||||||
pseg_len = q;
|
pseg_len = q;
|
||||||
q += 2; /* segment length */
|
q += 2; /* segment length */
|
||||||
*q++ = 30; /* page_timeout (seconds) */
|
*q++ = 30; /* page_timeout (seconds) */
|
||||||
@ -251,11 +243,11 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
|||||||
for (region_id = 0; region_id < h->num_rects; region_id++) {
|
for (region_id = 0; region_id < h->num_rects; region_id++) {
|
||||||
*q++ = region_id;
|
*q++ = region_id;
|
||||||
*q++ = 0xff; /* reserved */
|
*q++ = 0xff; /* reserved */
|
||||||
putbe16(&q, h->rects[region_id].x); /* left pos */
|
bytestream_put_be16(&q, h->rects[region_id].x); /* left pos */
|
||||||
putbe16(&q, h->rects[region_id].y); /* top pos */
|
bytestream_put_be16(&q, h->rects[region_id].y); /* top pos */
|
||||||
}
|
}
|
||||||
|
|
||||||
putbe16(&pseg_len, q - pseg_len - 2);
|
bytestream_put_be16(&pseg_len, q - pseg_len - 2);
|
||||||
|
|
||||||
if (!s->hide_state) {
|
if (!s->hide_state) {
|
||||||
for (clut_id = 0; clut_id < h->num_rects; clut_id++) {
|
for (clut_id = 0; clut_id < h->num_rects; clut_id++) {
|
||||||
@ -274,7 +266,7 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
|||||||
|
|
||||||
*q++ = 0x0f; /* sync byte */
|
*q++ = 0x0f; /* sync byte */
|
||||||
*q++ = 0x12; /* CLUT definition segment */
|
*q++ = 0x12; /* CLUT definition segment */
|
||||||
putbe16(&q, page_id);
|
bytestream_put_be16(&q, page_id);
|
||||||
pseg_len = q;
|
pseg_len = q;
|
||||||
q += 2; /* segment length */
|
q += 2; /* segment length */
|
||||||
*q++ = clut_id;
|
*q++ = clut_id;
|
||||||
@ -297,7 +289,7 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
putbe16(&pseg_len, q - pseg_len - 2);
|
bytestream_put_be16(&pseg_len, q - pseg_len - 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -317,27 +309,27 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
|||||||
|
|
||||||
*q++ = 0x0f; /* sync_byte */
|
*q++ = 0x0f; /* sync_byte */
|
||||||
*q++ = 0x11; /* segment_type */
|
*q++ = 0x11; /* segment_type */
|
||||||
putbe16(&q, page_id);
|
bytestream_put_be16(&q, page_id);
|
||||||
pseg_len = q;
|
pseg_len = q;
|
||||||
q += 2; /* segment length */
|
q += 2; /* segment length */
|
||||||
*q++ = region_id;
|
*q++ = region_id;
|
||||||
*q++ = (s->object_version << 4) | (0 << 3) | 0x07; /* version , no fill */
|
*q++ = (s->object_version << 4) | (0 << 3) | 0x07; /* version , no fill */
|
||||||
putbe16(&q, h->rects[region_id].w); /* region width */
|
bytestream_put_be16(&q, h->rects[region_id].w); /* region width */
|
||||||
putbe16(&q, h->rects[region_id].h); /* region height */
|
bytestream_put_be16(&q, h->rects[region_id].h); /* region height */
|
||||||
*q++ = ((1 + bpp_index) << 5) | ((1 + bpp_index) << 2) | 0x03;
|
*q++ = ((1 + bpp_index) << 5) | ((1 + bpp_index) << 2) | 0x03;
|
||||||
*q++ = region_id; /* clut_id == region_id */
|
*q++ = region_id; /* clut_id == region_id */
|
||||||
*q++ = 0; /* 8 bit fill colors */
|
*q++ = 0; /* 8 bit fill colors */
|
||||||
*q++ = 0x03; /* 4 bit and 2 bit fill colors */
|
*q++ = 0x03; /* 4 bit and 2 bit fill colors */
|
||||||
|
|
||||||
if (!s->hide_state) {
|
if (!s->hide_state) {
|
||||||
putbe16(&q, region_id); /* object_id == region_id */
|
bytestream_put_be16(&q, region_id); /* object_id == region_id */
|
||||||
*q++ = (0 << 6) | (0 << 4);
|
*q++ = (0 << 6) | (0 << 4);
|
||||||
*q++ = 0;
|
*q++ = 0;
|
||||||
*q++ = 0xf0;
|
*q++ = 0xf0;
|
||||||
*q++ = 0;
|
*q++ = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
putbe16(&pseg_len, q - pseg_len - 2);
|
bytestream_put_be16(&pseg_len, q - pseg_len - 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!s->hide_state) {
|
if (!s->hide_state) {
|
||||||
@ -357,11 +349,11 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
|||||||
|
|
||||||
*q++ = 0x0f; /* sync byte */
|
*q++ = 0x0f; /* sync byte */
|
||||||
*q++ = 0x13;
|
*q++ = 0x13;
|
||||||
putbe16(&q, page_id);
|
bytestream_put_be16(&q, page_id);
|
||||||
pseg_len = q;
|
pseg_len = q;
|
||||||
q += 2; /* segment length */
|
q += 2; /* segment length */
|
||||||
|
|
||||||
putbe16(&q, object_id);
|
bytestream_put_be16(&q, object_id);
|
||||||
*q++ = (s->object_version << 4) | (0 << 2) | (0 << 1) | 1; /* version = 0,
|
*q++ = (s->object_version << 4) | (0 << 2) | (0 << 1) | 1; /* version = 0,
|
||||||
onject_coding_method,
|
onject_coding_method,
|
||||||
non_modifying_color_flag */
|
non_modifying_color_flag */
|
||||||
@ -388,11 +380,11 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
|||||||
h->rects[object_id].w * 2, h->rects[object_id].w,
|
h->rects[object_id].w * 2, h->rects[object_id].w,
|
||||||
h->rects[object_id].h >> 1);
|
h->rects[object_id].h >> 1);
|
||||||
|
|
||||||
putbe16(&ptop_field_len, bottom_ptr - top_ptr);
|
bytestream_put_be16(&ptop_field_len, bottom_ptr - top_ptr);
|
||||||
putbe16(&pbottom_field_len, q - bottom_ptr);
|
bytestream_put_be16(&pbottom_field_len, q - bottom_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
putbe16(&pseg_len, q - pseg_len - 2);
|
bytestream_put_be16(&pseg_len, q - pseg_len - 2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -400,11 +392,11 @@ static int encode_dvb_subtitles(DVBSubtitleContext *s,
|
|||||||
|
|
||||||
*q++ = 0x0f; /* sync_byte */
|
*q++ = 0x0f; /* sync_byte */
|
||||||
*q++ = 0x80; /* segment_type */
|
*q++ = 0x80; /* segment_type */
|
||||||
putbe16(&q, page_id);
|
bytestream_put_be16(&q, page_id);
|
||||||
pseg_len = q;
|
pseg_len = q;
|
||||||
q += 2; /* segment length */
|
q += 2; /* segment length */
|
||||||
|
|
||||||
putbe16(&pseg_len, q - pseg_len - 2);
|
bytestream_put_be16(&pseg_len, q - pseg_len - 2);
|
||||||
|
|
||||||
*q++ = 0xff; /* end of PES data */
|
*q++ = 0xff; /* end of PES data */
|
||||||
|
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
#include "bytestream.h"
|
||||||
|
|
||||||
#undef NDEBUG
|
#undef NDEBUG
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
@ -85,14 +86,6 @@ static void dvd_encode_rle(uint8_t **pq,
|
|||||||
*pq = q;
|
*pq = q;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void putbe16(uint8_t **pq, uint16_t v)
|
|
||||||
{
|
|
||||||
uint8_t *q = *pq;
|
|
||||||
*q++ = v >> 8;
|
|
||||||
*q++ = v;
|
|
||||||
*pq = q;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int encode_dvd_subtitles(uint8_t *outbuf, int outbuf_size,
|
static int encode_dvd_subtitles(uint8_t *outbuf, int outbuf_size,
|
||||||
const AVSubtitle *h)
|
const AVSubtitle *h)
|
||||||
{
|
{
|
||||||
@ -163,11 +156,11 @@ static int encode_dvd_subtitles(uint8_t *outbuf, int outbuf_size,
|
|||||||
|
|
||||||
// set data packet size
|
// set data packet size
|
||||||
qq = outbuf + 2;
|
qq = outbuf + 2;
|
||||||
putbe16(&qq, q - outbuf);
|
bytestream_put_be16(&qq, q - outbuf);
|
||||||
|
|
||||||
// send start display command
|
// send start display command
|
||||||
putbe16(&q, (h->start_display_time*90) >> 10);
|
bytestream_put_be16(&q, (h->start_display_time*90) >> 10);
|
||||||
putbe16(&q, (q - outbuf) /*- 2 */ + 8 + 12*rects + 2);
|
bytestream_put_be16(&q, (q - outbuf) /*- 2 */ + 8 + 12*rects + 2);
|
||||||
*q++ = 0x03; // palette - 4 nibbles
|
*q++ = 0x03; // palette - 4 nibbles
|
||||||
*q++ = 0x03; *q++ = 0x7f;
|
*q++ = 0x03; *q++ = 0x7f;
|
||||||
*q++ = 0x04; // alpha - 4 nibbles
|
*q++ = 0x04; // alpha - 4 nibbles
|
||||||
@ -192,20 +185,20 @@ static int encode_dvd_subtitles(uint8_t *outbuf, int outbuf_size,
|
|||||||
|
|
||||||
*q++ = 0x06;
|
*q++ = 0x06;
|
||||||
// offset1, offset2
|
// offset1, offset2
|
||||||
putbe16(&q, offset1[object_id]);
|
bytestream_put_be16(&q, offset1[object_id]);
|
||||||
putbe16(&q, offset2[object_id]);
|
bytestream_put_be16(&q, offset2[object_id]);
|
||||||
}
|
}
|
||||||
*q++ = 0x01; // start command
|
*q++ = 0x01; // start command
|
||||||
*q++ = 0xff; // terminating command
|
*q++ = 0xff; // terminating command
|
||||||
|
|
||||||
// send stop display command last
|
// send stop display command last
|
||||||
putbe16(&q, (h->end_display_time*90) >> 10);
|
bytestream_put_be16(&q, (h->end_display_time*90) >> 10);
|
||||||
putbe16(&q, (q - outbuf) - 2 /*+ 4*/);
|
bytestream_put_be16(&q, (q - outbuf) - 2 /*+ 4*/);
|
||||||
*q++ = 0x02; // set end
|
*q++ = 0x02; // set end
|
||||||
*q++ = 0xff; // terminating command
|
*q++ = 0xff; // terminating command
|
||||||
|
|
||||||
qq = outbuf;
|
qq = outbuf;
|
||||||
putbe16(&qq, q - outbuf);
|
bytestream_put_be16(&qq, q - outbuf);
|
||||||
|
|
||||||
av_log(NULL, AV_LOG_DEBUG, "subtitle_packet size=%td\n", q - outbuf);
|
av_log(NULL, AV_LOG_DEBUG, "subtitle_packet size=%td\n", q - outbuf);
|
||||||
return q - outbuf;
|
return q - outbuf;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
#include "bytestream.h"
|
||||||
|
|
||||||
/* TODO:
|
/* TODO:
|
||||||
* - add 2, 4 and 16 bit depth support
|
* - add 2, 4 and 16 bit depth support
|
||||||
@ -86,20 +87,6 @@ typedef struct PNGContext {
|
|||||||
uint8_t buf[IOBUF_SIZE];
|
uint8_t buf[IOBUF_SIZE];
|
||||||
} PNGContext;
|
} PNGContext;
|
||||||
|
|
||||||
static unsigned int get32(uint8_t **b){
|
|
||||||
(*b) += 4;
|
|
||||||
return ((*b)[-4]<<24) + ((*b)[-3]<<16) + ((*b)[-2]<<8) + (*b)[-1];
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef CONFIG_ENCODERS
|
|
||||||
static void put32(uint8_t **b, unsigned int v){
|
|
||||||
*(*b)++= v>>24;
|
|
||||||
*(*b)++= v>>16;
|
|
||||||
*(*b)++= v>>8;
|
|
||||||
*(*b)++= v;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const uint8_t pngsig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
static const uint8_t pngsig[8] = {137, 80, 78, 71, 13, 10, 26, 10};
|
||||||
|
|
||||||
/* Mask to determine which y pixels are valid in a pass */
|
/* Mask to determine which y pixels are valid in a pass */
|
||||||
@ -509,10 +496,10 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
int tag32;
|
int tag32;
|
||||||
if (s->bytestream >= s->bytestream_end)
|
if (s->bytestream >= s->bytestream_end)
|
||||||
goto fail;
|
goto fail;
|
||||||
length = get32(&s->bytestream);
|
length = bytestream_get_be32(&s->bytestream);
|
||||||
if (length > 0x7fffffff)
|
if (length > 0x7fffffff)
|
||||||
goto fail;
|
goto fail;
|
||||||
tag32 = get32(&s->bytestream);
|
tag32 = bytestream_get_be32(&s->bytestream);
|
||||||
tag = bswap_32(tag32);
|
tag = bswap_32(tag32);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
av_log(avctx, AV_LOG_DEBUG, "png: tag=%c%c%c%c length=%u\n",
|
av_log(avctx, AV_LOG_DEBUG, "png: tag=%c%c%c%c length=%u\n",
|
||||||
@ -525,8 +512,8 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
case MKTAG('I', 'H', 'D', 'R'):
|
case MKTAG('I', 'H', 'D', 'R'):
|
||||||
if (length != 13)
|
if (length != 13)
|
||||||
goto fail;
|
goto fail;
|
||||||
s->width = get32(&s->bytestream);
|
s->width = bytestream_get_be32(&s->bytestream);
|
||||||
s->height = get32(&s->bytestream);
|
s->height = bytestream_get_be32(&s->bytestream);
|
||||||
if(avcodec_check_dimensions(avctx, s->width, s->height)){
|
if(avcodec_check_dimensions(avctx, s->width, s->height)){
|
||||||
s->width= s->height= 0;
|
s->width= s->height= 0;
|
||||||
goto fail;
|
goto fail;
|
||||||
@ -536,7 +523,7 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
s->compression_type = *s->bytestream++;
|
s->compression_type = *s->bytestream++;
|
||||||
s->filter_type = *s->bytestream++;
|
s->filter_type = *s->bytestream++;
|
||||||
s->interlace_type = *s->bytestream++;
|
s->interlace_type = *s->bytestream++;
|
||||||
crc = get32(&s->bytestream);
|
crc = bytestream_get_be32(&s->bytestream);
|
||||||
s->state |= PNG_IHDR;
|
s->state |= PNG_IHDR;
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
av_log(avctx, AV_LOG_DEBUG, "width=%d height=%d depth=%d color_type=%d compression_type=%d filter_type=%d interlace_type=%d\n",
|
av_log(avctx, AV_LOG_DEBUG, "width=%d height=%d depth=%d color_type=%d compression_type=%d filter_type=%d interlace_type=%d\n",
|
||||||
@ -629,7 +616,7 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
if (png_decode_idat(s, length) < 0)
|
if (png_decode_idat(s, length) < 0)
|
||||||
goto fail;
|
goto fail;
|
||||||
/* skip crc */
|
/* skip crc */
|
||||||
crc = get32(&s->bytestream);
|
crc = bytestream_get_be32(&s->bytestream);
|
||||||
break;
|
break;
|
||||||
case MKTAG('P', 'L', 'T', 'E'):
|
case MKTAG('P', 'L', 'T', 'E'):
|
||||||
{
|
{
|
||||||
@ -649,7 +636,7 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
s->palette[i] = (0xff << 24);
|
s->palette[i] = (0xff << 24);
|
||||||
}
|
}
|
||||||
s->state |= PNG_PLTE;
|
s->state |= PNG_PLTE;
|
||||||
crc = get32(&s->bytestream);
|
crc = bytestream_get_be32(&s->bytestream);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MKTAG('t', 'R', 'N', 'S'):
|
case MKTAG('t', 'R', 'N', 'S'):
|
||||||
@ -665,13 +652,13 @@ static int decode_frame(AVCodecContext *avctx,
|
|||||||
v = *s->bytestream++;
|
v = *s->bytestream++;
|
||||||
s->palette[i] = (s->palette[i] & 0x00ffffff) | (v << 24);
|
s->palette[i] = (s->palette[i] & 0x00ffffff) | (v << 24);
|
||||||
}
|
}
|
||||||
crc = get32(&s->bytestream);
|
crc = bytestream_get_be32(&s->bytestream);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MKTAG('I', 'E', 'N', 'D'):
|
case MKTAG('I', 'E', 'N', 'D'):
|
||||||
if (!(s->state & PNG_ALLIMAGE))
|
if (!(s->state & PNG_ALLIMAGE))
|
||||||
goto fail;
|
goto fail;
|
||||||
crc = get32(&s->bytestream);
|
crc = bytestream_get_be32(&s->bytestream);
|
||||||
goto exit_loop;
|
goto exit_loop;
|
||||||
default:
|
default:
|
||||||
/* skip tag */
|
/* skip tag */
|
||||||
@ -704,29 +691,20 @@ static void png_write_chunk(uint8_t **f, uint32_t tag,
|
|||||||
uint32_t crc;
|
uint32_t crc;
|
||||||
uint8_t tagbuf[4];
|
uint8_t tagbuf[4];
|
||||||
|
|
||||||
put32(f, length);
|
bytestream_put_be32(f, length);
|
||||||
crc = crc32(0, Z_NULL, 0);
|
crc = crc32(0, Z_NULL, 0);
|
||||||
tagbuf[0] = tag;
|
tagbuf[0] = tag;
|
||||||
tagbuf[1] = tag >> 8;
|
tagbuf[1] = tag >> 8;
|
||||||
tagbuf[2] = tag >> 16;
|
tagbuf[2] = tag >> 16;
|
||||||
tagbuf[3] = tag >> 24;
|
tagbuf[3] = tag >> 24;
|
||||||
crc = crc32(crc, tagbuf, 4);
|
crc = crc32(crc, tagbuf, 4);
|
||||||
put32(f, bswap_32(tag));
|
bytestream_put_be32(f, bswap_32(tag));
|
||||||
if (length > 0) {
|
if (length > 0) {
|
||||||
crc = crc32(crc, buf, length);
|
crc = crc32(crc, buf, length);
|
||||||
memcpy(*f, buf, length);
|
memcpy(*f, buf, length);
|
||||||
*f += length;
|
*f += length;
|
||||||
}
|
}
|
||||||
put32(f, crc);
|
bytestream_put_be32(f, crc);
|
||||||
}
|
|
||||||
|
|
||||||
/* XXX: use avcodec generic function ? */
|
|
||||||
static void to_be32(uint8_t *p, uint32_t v)
|
|
||||||
{
|
|
||||||
p[0] = v >> 24;
|
|
||||||
p[1] = v >> 16;
|
|
||||||
p[2] = v >> 8;
|
|
||||||
p[3] = v;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* XXX: do filtering */
|
/* XXX: do filtering */
|
||||||
@ -828,8 +806,8 @@ static int encode_frame(AVCodecContext *avctx, unsigned char *buf, int buf_size,
|
|||||||
memcpy(s->bytestream, pngsig, 8);
|
memcpy(s->bytestream, pngsig, 8);
|
||||||
s->bytestream += 8;
|
s->bytestream += 8;
|
||||||
|
|
||||||
to_be32(s->buf, avctx->width);
|
AV_WB32(s->buf, avctx->width);
|
||||||
to_be32(s->buf + 4, avctx->height);
|
AV_WB32(s->buf + 4, avctx->height);
|
||||||
s->buf[8] = bit_depth;
|
s->buf[8] = bit_depth;
|
||||||
s->buf[9] = color_type;
|
s->buf[9] = color_type;
|
||||||
s->buf[10] = 0; /* compression type */
|
s->buf[10] = 0; /* compression type */
|
||||||
|
@ -32,6 +32,7 @@
|
|||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "avcodec.h"
|
#include "avcodec.h"
|
||||||
|
#include "bytestream.h"
|
||||||
#include "dsputil.h"
|
#include "dsputil.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@ -77,10 +78,6 @@ typedef struct RoqContext {
|
|||||||
#define RoQ_ID_CCC 0x03
|
#define RoQ_ID_CCC 0x03
|
||||||
|
|
||||||
#define get_byte(in_buffer) *(in_buffer++)
|
#define get_byte(in_buffer) *(in_buffer++)
|
||||||
#define get_word(in_buffer) ((unsigned short)(in_buffer += 2, \
|
|
||||||
(in_buffer[-1] << 8 | in_buffer[-2])))
|
|
||||||
#define get_long(in_buffer) ((unsigned long)(in_buffer += 4, \
|
|
||||||
(in_buffer[-1] << 24 | in_buffer[-2] << 16 | in_buffer[-3] << 8 | in_buffer[-4])))
|
|
||||||
|
|
||||||
|
|
||||||
static void apply_vector_2x2(RoqContext *ri, int x, int y, roq_cell *cell)
|
static void apply_vector_2x2(RoqContext *ri, int x, int y, roq_cell *cell)
|
||||||
@ -293,9 +290,9 @@ static void roqvideo_decode_frame(RoqContext *ri)
|
|||||||
unsigned char *buf_end = ri->buf + ri->size;
|
unsigned char *buf_end = ri->buf + ri->size;
|
||||||
|
|
||||||
while (buf < buf_end) {
|
while (buf < buf_end) {
|
||||||
chunk_id = get_word(buf);
|
chunk_id = bytestream_get_le16(&buf);
|
||||||
chunk_size = get_long(buf);
|
chunk_size = bytestream_get_le32(&buf);
|
||||||
chunk_arg = get_word(buf);
|
chunk_arg = bytestream_get_le16(&buf);
|
||||||
|
|
||||||
if(chunk_id == RoQ_QUAD_VQ)
|
if(chunk_id == RoQ_QUAD_VQ)
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user