diff options
Diffstat (limited to 'Src/f263')
40 files changed, 4266 insertions, 0 deletions
diff --git a/Src/f263/BitReader.cpp b/Src/f263/BitReader.cpp new file mode 100644 index 00000000..e3c369d3 --- /dev/null +++ b/Src/f263/BitReader.cpp @@ -0,0 +1,108 @@ +#include "BitReader.h" + +static uint32_t mask[8]= +{ + 0x1, + 0x3, + 0x7, + 0xF, + 0x1F, + 0x3F, + 0x7F, + 0xFF +}; + +static uint32_t msk[33] = +{ + 0x00000000,0x00000001,0x00000003,0x00000007, + 0x0000000f,0x0000001f,0x0000003f,0x0000007f, + 0x000000ff,0x000001ff,0x000003ff,0x000007ff, + 0x00000fff,0x00001fff,0x00003fff,0x00007fff, + 0x0000ffff,0x0001ffff,0x0003ffff,0x0007ffff, + 0x000fffff,0x001fffff,0x003fffff,0x007fffff, + 0x00ffffff,0x01ffffff,0x03ffffff,0x07ffffff, + 0x0fffffff,0x1fffffff,0x3fffffff,0x7fffffff, + 0xffffffff +}; + +void BitReader::alignbyte() +{ + flushbits(numBits&7); +} + +void BitReader::getbytes(void *data, uint32_t n) +{ + memcpy(data, this->data, n); + flushbits(n*8); +} + +uint8_t BitReader::getbits1() +{ + uint8_t byte = data[0]; + uint32_t count = (numBits-1) & 7; + byte &= mask[count]; + byte >>= count; + + numBits--; + if ((numBits % 8) == 0) + data++; + return byte; +} + +uint32_t BitReader::getbits(uint32_t n) +{ + uint32_t val = showbits(n); + flushbits(n); + return val; +} + +uint8_t BitReader::showbits1() const +{ + uint8_t byte = data[0]; + uint32_t count = (numBits-1) & 7; + byte &= mask[count]; + byte >>= count; + return byte; +} + +uint32_t BitReader::showbits(uint32_t n) const +{ + uint32_t val; + switch((numBits+7) >> 3) + { + case 0: + return 0; + case 1: + val=(data[0]<<24); + break; + case 2: + val=(data[0]<<24) | (data[1]<<16); + break; + case 3: + val=(data[0]<<24) | (data[1]<<16) | (data[2]<<8); + break; + default: + val=(data[0]<<24) | (data[1]<<16) | (data[2]<<8) | data[3]; + break; + } + uint32_t c = ((numBits-1) & 7) + 25; + return (val>>(c-n)) & msk[n]; +} + +void BitReader::flushbits(uint32_t n) +{ + uint32_t oldpos = (numBits+7)>>3; + numBits-=n; + uint32_t newpos = (numBits+7)>>3; + data += (oldpos - newpos); +} + +bool BitReader::empty() +{ + return numBits==0; +} + +uint32_t BitReader::size() const +{ + return numBits; +} diff --git a/Src/f263/BitReader.h b/Src/f263/BitReader.h new file mode 100644 index 00000000..ec297bb5 --- /dev/null +++ b/Src/f263/BitReader.h @@ -0,0 +1,18 @@ +#pragma once +#include <bfc/platform/types.h> +class BitReader +{ +public: + uint8_t getbits1(); + uint32_t getbits(uint32_t n); + uint8_t showbits1() const; + uint32_t showbits(uint32_t n) const; + void flushbits(uint32_t n); + bool empty(); + uint32_t size() const; // in bits + void alignbyte(); // aligns bitstream to the next byte (or current byte if already aligned) + void getbytes(void *data, uint32_t n); +//private: + const uint8_t *data; + uint32_t numBits; +};
\ No newline at end of file diff --git a/Src/f263/Block.cpp b/Src/f263/Block.cpp new file mode 100644 index 00000000..3155e561 --- /dev/null +++ b/Src/f263/Block.cpp @@ -0,0 +1,144 @@ +#include "Decoder.h" +#include "indices.h" +#include "vlc_table.h" + +static unsigned char zig_zag_scan[64]={ + 0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5, + 12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28, + 35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51, + 58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63 +}; + +#define ESCAPE 7167 +// mode 1 = Inter (or Intra in advanced intra coding mode) +// mode 0 = Intra +void Decoder::getblock(int comp, int mode) +{ + int val, i, j, sign; + unsigned int code; + VLCtab *tab; + short *bp; + int run, last, level, QP; + short *qval; + + + /* TODO: benski> + i think this whole function can get replaced with + ippiDecodeCoeffsIntra_H263_1u16s (mode==0) + or + ippiDecodeCoeffsInter_H263_1u16s (mode == 1) + with pCoef = bp + modQuantFlag = escapemode>=1 + scan = IPPVC_SCAN_ZIGZAG + + */ + bp = block[comp]; + + /* decode AC coefficients (or all coefficients in advanced intra coding + * mode) */ + + for (i = (mode == 0);; i++) + { + + code = buffer.showbits(12); + + + if (code >= 512) + tab = &DCT3Dtab0[(code >> 5) - 16]; + else if (code >= 128) + tab = &DCT3Dtab1[(code >> 2) - 32]; + else if (code >= 8) + tab = &DCT3Dtab2[(code >> 0) - 8]; + else + { + fault = 1; + return; + } + + run = (tab->val >> 4) & 255; + level = tab->val & 15; + last = (tab->val >> 12) & 1; + + buffer.flushbits(tab->len); + if (tab->val == ESCAPE) + { + /* escape */ + if (escapemode >= 1) + { + int is11 = buffer.getbits1(); + sign=0; + last = buffer.getbits1(); + i+=run = buffer.getbits(6); + if (is11) + { + level = buffer.getbits(11); + if ((sign = (level>=1024))) + val = 2048 - level; + else + val = level; + } + else + { + level = buffer.getbits(7); + if ((sign = (level>=64))) + val = 128 - level; + else + val = level; + } + } + else + { + last = buffer.getbits1(); + i += run = buffer.getbits(6); + level = buffer.getbits(8); + + if ((sign = (level >= 128))) + val = 256 - level; + else + val = level; + } + } + else + { + i += run; + val = level; + sign = buffer.getbits(1); + } + + + if (i >= 64) + { + fault = 1; + return; + } + + /* Descan in the proper order in advanced intra coding mode */ + + + j = zig_zag_scan[i]; + qval = &bp[j]; + QP = quant; + + + + /* TODO: benski> + ippiQuantInvIntra_H263_16s_C1I + or + ippiQuantInvInter_H263_16s_C1I (mode == 1) + but outside the loop + pSrcDst = bp + QP = quant + modQuantFlag = escapemode >= 1 + */ + /* TMN3 dequantization */ + if ((QP % 2) == 1) + *qval = (sign ? -(QP * (2 * val + 1)) : QP * (2 * val + 1)); + else + *qval = (sign ? -(QP * (2 * val + 1) - 1) : QP * (2 * val + 1) - 1); + + if (last) + { + /* That's it */ + return; + } + }} diff --git a/Src/f263/Decoder.cpp b/Src/f263/Decoder.cpp new file mode 100644 index 00000000..b9a35f54 --- /dev/null +++ b/Src/f263/Decoder.cpp @@ -0,0 +1,133 @@ +#include "Decoder.h" + + +bool Decoder::initted; +unsigned char *Decoder::clp; +unsigned char Decoder::clp_table[1024]; + +int Decoder::DecodeFrame(YV12_PLANES *yv12, int *width, int *height, int *keyframe) +{ + if (getheader()) + { + if (firstFrame) + { + if (init()) + return 1; + } + + Frame frame; + getpicture(frame); + yv12->y.baseAddr = frame[0]; + yv12->y.rowBytes = coded_picture_width; + yv12->u.baseAddr = frame[1]; + yv12->u.rowBytes = chrom_width; + yv12->v.baseAddr = frame[2]; + yv12->v.rowBytes = chrom_width; + + *width = horizontal_size; + *height = vertical_size; + *keyframe = (pict_type == PCT_INTRA)?1:0; + + return 0; + } + return 1; +} + +Decoder::Decoder() +{ + for (int cc=0; cc<3; cc++) + { + refframe[cc]=0; + newframe[cc]=0; + oldrefframe[cc]=0; + edgeframe[cc]=0; + edgeframeorig[cc]=0; + } + + horizontal_size=0; + vertical_size=0; + mb_width=0; + mb_height=0; + coded_picture_width=0; + coded_picture_height=0; + chrom_width=0; + chrom_height=0; + pict_type=0; + fault=0; + refidct=0; + quant=0; + escapemode=0; + + firstFrame=true; + if (!initted) + { + /* clip table */ + clp=&clp_table[384]; + + for (int i=-384; i<640; i++) + clp[i] = (i<0) ? 0 : ((i>255) ? 255 : i); + + initted=true; + } + idct.init(); +} + +Decoder::~Decoder() +{ + for (int cc=0; cc<3; cc++) + { + free(refframe[cc]); + free(oldrefframe[cc]); + free(edgeframeorig[cc]); + } +} + +#define ROUNDUP16(size) (((size)+15) & ~15) + +int Decoder::init() +{ + int cc; + unsigned int size; + + mb_width = (horizontal_size+15)/16; + mb_height = (vertical_size +15)/16; + coded_picture_width = ROUNDUP16(horizontal_size); + coded_picture_height = ROUNDUP16(vertical_size); + chrom_width = coded_picture_width>>1; + chrom_height = coded_picture_height>>1; + + if (coded_picture_width >= (65536 - 64) + || coded_picture_height >= (65536 - 64)) + return 1; + + for (cc=0; cc<3; cc++) + { + if (cc==0) + size = coded_picture_width*coded_picture_height; + else + size = chrom_width*chrom_height; + + refframe[cc] = (unsigned char *)malloc(size); + oldrefframe[cc] = (unsigned char *)malloc(size); + } + + for (cc=0; cc<3; cc++) + { + if (cc==0) + { + size = (coded_picture_width+64)*(coded_picture_height+64); + edgeframeorig[cc] = (unsigned char *)malloc(size); + + edgeframe[cc] = edgeframeorig[cc] + (coded_picture_width+64) * 32 + 32; + } + else + { + size = (chrom_width+32)*(chrom_height+32); + edgeframeorig[cc] = (unsigned char *)malloc(size); + + edgeframe[cc] = edgeframeorig[cc] + (chrom_width+32) * 16 + 16; + } + } + + return 0; +} diff --git a/Src/f263/Decoder.h b/Src/f263/Decoder.h new file mode 100644 index 00000000..4f4c6508 --- /dev/null +++ b/Src/f263/Decoder.h @@ -0,0 +1,139 @@ +#pragma once +#include <bfc/platform/types.h> +#include "BitReader.h" +#include "IDCT.h" +#include "IDCTRef.h" +#include "lib.h" + +/* this is necessary for the max resolution 16CIF */ +#define MBC 88 +#define MBR 72 + +#define PSC 1 +#define PSC_LENGTH 17 +#define SE_CODE 31 + +#define MODE_INTER 0 +#define MODE_INTER_Q 1 +#define MODE_INTER4V 2 +#define MODE_INTRA 3 +#define MODE_INTRA_Q 4 +#define MODE_INTER4V_Q 5 + +#define PBMODE_NORMAL 0 +#define PBMODE_MVDB 1 +#define PBMODE_CBPB_MVDB 2 + +#define ESCAPE 7167 +#define ESCAPE_INDEX 102 +#define EP_FORWARD_PREDICTION 0 +#define EI_EP_UPWARD_PREDICTION 1 +#define EP_BIDIRECTIONAL_PREDICTION 2 +#define EI_EP_INTRA_PREDICTION 3 +#define MAX_LAYERS 2 + +/* picture types */ +#define PCT_INTRA 0 +#define PCT_INTER 1 +#define PCT_DISPOSABLE_INTER 2 +//#define PCT_IPB 2 +#define PCT_B 3 + +#define ON 1 +#define OFF 0 +#define YES 1 +#define NO 0 + +#define B_EI_EP_STUFFING 5 +#define INVALID_MBTYPE 255 + +#define B_DIRECT_PREDICTION 0 +#define B_FORWARD_PREDICTION 1 +#define B_BACKWARD_PREDICTION 2 +#define B_BIDIRECTIONAL_PREDICTION 3 +#define B_INTRA_PREDICTION 4 + +#define SF_SQCIF 1 /* 001 */ +#define SF_QCIF 2 /* 010 */ +#define SF_CIF 3 /* 011 */ +#define SF_4CIF 4 /* 100 */ +#define SF_16CIF 5 /* 101 */ + + +/* this is necessary for the max resolution 16CIF */ +#define MBC 88 +#define MBR 72 + +#define NO_VEC 999 + +typedef unsigned char *Frame[3]; +class Decoder +{ +public: + Decoder(); + ~Decoder(); + int init(); + + void getpicture(Frame frame); + int getheader(); + + int DecodeFrame(YV12_PLANES *yv12, int *width, int *height, int *keyframe); + + + static unsigned char *clp; + + BitReader buffer; +private: + void reconstruct(int bx, int by, int mode); + + void get_I_P_MBs(); + void horiz_edge_filter(unsigned char *rec, int width, int height, int chr); + void vert_edge_filter(unsigned char *rec, int width, int height, int chr); + void edge_filter(unsigned char *lum, unsigned char *Cb, unsigned char *Cr, int width, int height); + void vert_post_filter(unsigned char *rec, int width, int height, int chr); + void horiz_post_filter(unsigned char *rec, int width, int height, int chr); + void PostFilter(unsigned char *lum, unsigned char *Cb, unsigned char *Cr,int width, int height); + void addblock(int comp, int bx, int by, int addflag); + int find_pmv(int x, int y, int block, int comp); + void getpicturehdr(); + + + void getblock(int comp, int mode); + void clearblock(int comp); + + void startcode(); + + /* vlc */ + int getTMNMV(void); + int getMCBPC(void); + int getMBTYPE (int *cbp_present, int *quant_present); + int getMCBPCintra(void); + int getCBPY(void); + +private: + Frame refframe, oldrefframe, newframe; + Frame edgeframe, edgeframeorig; + int MV[2][5][MBR+1][MBC+2]; + int modemap[MBR+1][MBC+2]; + int coded_map[MBR + 1][MBC + 1]; + int quant_map[MBR + 1][MBC + 1]; + unsigned int horizontal_size,vertical_size,mb_width,mb_height; + unsigned int coded_picture_width, coded_picture_height; + unsigned int chrom_width,chrom_height; + int pict_type; + int fault; + int deblock; + int refidct; + int quant; + int escapemode; + bool firstFrame; + + IDCT idct; + + /* block data */ + short block[12][64]; + static bool initted; + static unsigned char clp_table[1024]; + + +};
\ No newline at end of file diff --git a/Src/f263/Header.cpp b/Src/f263/Header.cpp new file mode 100644 index 00000000..727cf574 --- /dev/null +++ b/Src/f263/Header.cpp @@ -0,0 +1,92 @@ +#include "Decoder.h" + + +/* + * decode headers from one input stream + * until an End of Sequence or picture start code + * is found + */ +int Decoder::getheader() +{ + unsigned int sorenson_version; + + /* look for startcode */ + startcode(); + buffer.getbits(PSC_LENGTH); + sorenson_version = buffer.getbits(5); + if (sorenson_version <= 1) + { + escapemode=sorenson_version; + getpicturehdr(); + } + else + return 0; + + return 1; +} + +/* align to start of next startcode */ + +void Decoder::startcode() +{ + /* search for new picture start code */ + while (buffer.showbits(PSC_LENGTH)!=1l) + buffer.flushbits(1); +} + +/* decode picture header */ + +void Decoder::getpicturehdr() +{ + int pei, tmp; + + buffer.getbits(8); + + tmp = buffer.getbits(3); + switch(tmp) + { + case 0: + horizontal_size = buffer.getbits(8); + vertical_size = buffer.getbits(8); + break; + case 1: + horizontal_size = buffer.getbits(16); + vertical_size = buffer.getbits(16); + break; + case 2: + horizontal_size = 352; + vertical_size = 288; + break; + case 3: + horizontal_size = 176; + vertical_size = 144; + break; + case 4: + horizontal_size = 128; + vertical_size = 96; + break; + case 5: + horizontal_size = 320; + vertical_size = 240; + break; + case 6: + horizontal_size = 160; + vertical_size = 120; + break; + + } + pict_type = buffer.getbits(2); + deblock=buffer.getbits(1); // deblocking flag + quant = buffer.getbits(5); + + pei = buffer.getbits(1); +pspare: + if (pei) { + /* extra info for possible future backward compatible additions */ + buffer.getbits(8); /* not used */ + pei = buffer.getbits(1); + if (pei) goto pspare; /* keep on reading pspare until pei=0 */ + } + +} + diff --git a/Src/f263/Picture.cpp b/Src/f263/Picture.cpp new file mode 100644 index 00000000..b9ed185e --- /dev/null +++ b/Src/f263/Picture.cpp @@ -0,0 +1,870 @@ +#include "Decoder.h" +#define sign(a) ((a) < 0 ? -1 : 1) +/* private prototypes*/ +static int motion_decode(int vec,int pmv); +static void make_edge_image(const unsigned char *src, unsigned char *dst, int width, int height, int edge); + +/* decode one frame or field picture */ + +void Decoder::getpicture(Frame decodedFrame) +{ + int i; + unsigned char *tmp; + + for (i=0; i<3; i++) + { + tmp = oldrefframe[i]; + oldrefframe[i] = refframe[i]; + refframe[i] = tmp; + newframe[i] = refframe[i]; + } + + if (!firstFrame) + { + make_edge_image(oldrefframe[0],edgeframe[0],coded_picture_width, + coded_picture_height,32); + make_edge_image(oldrefframe[1],edgeframe[1],chrom_width, chrom_height,16); + make_edge_image(oldrefframe[2],edgeframe[2],chrom_width, chrom_height,16); + } + + //getMBs(); + get_I_P_MBs(); + + if (deblock) + edge_filter(newframe[0], newframe[1], newframe[2], + coded_picture_width, coded_picture_height); + + /* + PostFilter(newframe[0], newframe[1], newframe[2], + coded_picture_width, coded_picture_height); + */ + + decodedFrame[0] = newframe[0]; + decodedFrame[1] = newframe[1]; + decodedFrame[2] = newframe[2]; + + firstFrame=false; +} + + +/* decode all macroblocks of the current picture */ + + +void Decoder::clearblock(int comp) +{ + int *bp; + int i; + + bp = (int *)block[comp]; + + for (i=0; i<8; i++) + { + bp[0] = bp[1] = bp[2] = bp[3] = 0; + bp += 4; + } +} + + +/* move/add 8x8-Block from block[comp] to refframe or bframe */ + +void Decoder::addblock(int comp, int bx, int by, int addflag) +{ + int cc,i, iincr; + unsigned char *rfp; + short *bp; + + bp = block[comp]; + + /* TODO: benski> +ippiCopy8x8_8u_C1R (addflag = 0) +ippiAdd8x8_16s8u_C1IRS (addflag = 1) + */ + cc = (comp<4) ? 0 : (comp&1)+1; /* color component index */ + + if (cc==0) + { + /* luminance */ + + /* frame DCT coding */ + rfp = newframe[0] + + coded_picture_width*(by+((comp&2)<<2)) + bx + ((comp&1)<<3); + + iincr = coded_picture_width; + } + else + { + /* chrominance */ + + /* scale coordinates */ + bx >>= 1; + by >>= 1; + /* frame DCT coding */ + rfp = newframe[cc] + chrom_width*by + bx; + iincr = chrom_width; + } + + + if (addflag) + { + for (i=0; i<8; i++) + { + rfp[0] = clp[bp[0]+rfp[0]]; + rfp[1] = clp[bp[1]+rfp[1]]; + rfp[2] = clp[bp[2]+rfp[2]]; + rfp[3] = clp[bp[3]+rfp[3]]; + rfp[4] = clp[bp[4]+rfp[4]]; + rfp[5] = clp[bp[5]+rfp[5]]; + rfp[6] = clp[bp[6]+rfp[6]]; + rfp[7] = clp[bp[7]+rfp[7]]; + bp += 8; + rfp+= iincr; + } + } + else + { + for (i=0; i<8; i++) + { + rfp[0] = clp[bp[0]]; + rfp[1] = clp[bp[1]]; + rfp[2] = clp[bp[2]]; + rfp[3] = clp[bp[3]]; + rfp[4] = clp[bp[4]]; + rfp[5] = clp[bp[5]]; + rfp[6] = clp[bp[6]]; + rfp[7] = clp[bp[7]]; + bp += 8; + rfp += iincr; + } + } +} + + +int motion_decode(int vec, int pmv) +{ + if (vec > 31) vec -= 64; + vec += pmv; + + if (vec > 31) + vec -= 64; + if (vec < -32) + vec += 64; + + return vec; +} + + +int Decoder::find_pmv(int x, int y, int block, int comp) + +{ + int p1,p2,p3; + int xin1,xin2,xin3; + int yin1,yin2,yin3; + int vec1,vec2,vec3; + int l8,o8,or8; + + x++;y++; + + l8 = (modemap[y][x-1] == MODE_INTER4V ? 1 : 0); + o8 = (modemap[y-1][x] == MODE_INTER4V ? 1 : 0); + or8 = (modemap[y-1][x+1] == MODE_INTER4V ? 1 : 0); + + switch (block) + { + case 0: + vec1 = (l8 ? 2 : 0) ; yin1 = y ; xin1 = x-1; + vec2 = (o8 ? 3 : 0) ; yin2 = y-1; xin2 = x; + vec3 = (or8? 3 : 0) ; yin3 = y-1; xin3 = x+1; + break; + case 1: + vec1 = (l8 ? 2 : 0) ; yin1 = y ; xin1 = x-1; + vec2 = (o8 ? 3 : 0) ; yin2 = y-1; xin2 = x; + vec3 = (or8? 3 : 0) ; yin3 = y-1; xin3 = x+1; + break; + case 2: + vec1 = 1 ; yin1 = y ; xin1 = x; + vec2 = (o8 ? 4 : 0) ; yin2 = y-1; xin2 = x; + vec3 = (or8? 3 : 0) ; yin3 = y-1; xin3 = x+1; + break; + case 3: + vec1 = (l8 ? 4 : 0) ; yin1 = y ; xin1 = x-1; + vec2 = 1 ; yin2 = y ; xin2 = x; + vec3 = 2 ; yin3 = y ; xin3 = x; + break; + case 4: + vec1 = 3 ; yin1 = y ; xin1 = x; + vec2 = 1 ; yin2 = y ; xin2 = x; + vec3 = 2 ; yin3 = y ; xin3 = x; + break; + default: + exit(1); + break; + } + p1 = MV[comp][vec1][yin1][xin1]; + p2 = MV[comp][vec2][yin2][xin2]; + p3 = MV[comp][vec3][yin3][xin3]; + + if (p2 == NO_VEC) + { + p2 = p3 = p1; + } + + return p1+p2+p3 - max(p1,max(p2,p3)) - min(p1,min(p2,p3)); +} + + +void make_edge_image(const unsigned char *src,unsigned char *dst,int width,int height,int edge) +{ + int i,j; + unsigned char *p1,*p2,*p3,*p4; + const unsigned char *o1,*o2,*o3,*o4; + + /* center image */ + p1 = dst; + o1 = src; + for (j = 0; j < height;j++) + { + for (i = 0; i < width; i++) + { + *(p1 + i) = *(o1 + i); + } + p1 += width + (edge<<1); + o1 += width; + } + + /* left and right edges */ + p1 = dst-1; + o1 = src; + for (j = 0; j < height;j++) + { + for (i = 0; i < edge; i++) + { + *(p1 - i) = *o1; + *(p1 + width + i + 1) = *(o1 + width - 1); + } + p1 += width + (edge<<1); + o1 += width; + } + + /* top and bottom edges */ + p1 = dst; + p2 = dst + (width + (edge<<1))*(height-1); + o1 = src; + o2 = src + width*(height-1); + for (j = 0; j < edge;j++) + { + p1 = p1 - (width + (edge<<1)); + p2 = p2 + (width + (edge<<1)); + for (i = 0; i < width; i++) + { + *(p1 + i) = *(o1 + i); + *(p2 + i) = *(o2 + i); + } + } + + /* corners */ + p1 = dst - (width+(edge<<1)) - 1; + p2 = p1 + width + 1; + p3 = dst + (width+(edge<<1))*(height)-1; + p4 = p3 + width + 1; + + o1 = src; + o2 = o1 + width - 1; + o3 = src + width*(height-1); + o4 = o3 + width - 1; + for (j = 0; j < edge; j++) + { + for (i = 0; i < edge; i++) + { + *(p1 - i) = *o1; + *(p2 + i) = *o2; + *(p3 - i) = *o3; + *(p4 + i) = *o4; + } + p1 = p1 - (width + (edge<<1)); + p2 = p2 - (width + (edge<<1)); + p3 = p3 + width + (edge<<1); + p4 = p4 + width + (edge<<1); + } + +} + +static bool Mode_IsInter(int Mode) +{ +return (Mode == MODE_INTER || Mode == MODE_INTER_Q || + Mode == MODE_INTER4V || Mode == MODE_INTER4V_Q); +} + + +static bool Mode_IsIntra(int Mode) +{ + return (Mode == MODE_INTRA || Mode == MODE_INTRA_Q); +} + +void Decoder::get_I_P_MBs() +{ + int comp; + int MBA, MBAmax; + + int COD = 0, MCBPC, CBPY, CBP = 0, CBPB = 0, MODB = 0, Mode = 0, DQUANT; + int mvx = 0, mvy = 0, pmv0, pmv1, xpos, ypos, k; + int startmv, stopmv, last_done = 0, pCBP = 0, pCBPB = 0, pCOD = 0, pMODB = 0; + int DQ_tab[4] = {-1, -2, 1, 2}; + unsigned int i; + short *bp; + + /* number of macroblocks per picture */ + MBAmax = mb_width * mb_height; + + MBA = 0; /* macroblock address */ + xpos = ypos = 0; + + /* mark MV's above the picture */ + for (i = 1; i < mb_width + 1; i++) + { + for (k = 0; k < 5; k++) + { + MV[0][k][0][i] = NO_VEC; + MV[1][k][0][i] = NO_VEC; + } + modemap[0][i] = MODE_INTRA; + } + /* zero MV's on the sides of the picture */ + for (i = 0; i < mb_height + 1; i++) + { + for (k = 0; k < 5; k++) + { + MV[0][k][i][0] = 0; + MV[1][k][i][0] = 0; + MV[0][k][i][mb_width + 1] = 0; + MV[1][k][i][mb_width + 1] = 0; + } + modemap[i][0] = MODE_INTRA; + modemap[i][mb_width + 1] = MODE_INTRA; + } + /* initialize the qcoeff used in advanced intra coding */ + + fault = 0; + + for (;;) + { + + +resync: + /* This version of the decoder does not resync on every possible + * error, and it does not do all possible error checks. It is not + * difficult to make it much more error robust, but I do not think it + * is necessary to include this in the freely available version. */ + + if (fault) + { + startcode(); /* sync on new startcode */ + fault = 0; + } + + + xpos = MBA % mb_width; + ypos = MBA / mb_width; + + if (MBA >= MBAmax) + { + /* all macroblocks decoded */ + return; + } +read_cod: + + + if (PCT_INTER == pict_type || PCT_DISPOSABLE_INTER == pict_type) + { + COD = buffer.showbits(1); + } + else + { + COD = 0; /* Intra picture -> not skipped */ + coded_map[ypos + 1][xpos + 1] = 1; + } + + + if (!COD) + { + /* COD == 0 --> not skipped */ + + if (PCT_INTER == pict_type || PCT_DISPOSABLE_INTER == pict_type) + { + /* flush COD bit */ + buffer.flushbits(1); + } + if (PCT_INTRA == pict_type) + { + MCBPC = getMCBPCintra(); + } + else + { + MCBPC = getMCBPC(); + } + + + if (fault) + goto resync; + + if (MCBPC == 255) + { + /* stuffing - read next COD without advancing MB count. */ + goto read_cod; + } + else + { + /* normal MB data */ + Mode = MCBPC & 7; + + + /* MODB and CBPB */ + + + CBPY = getCBPY(); + + } + + /* Decode Mode and CBP */ + if ((Mode == MODE_INTRA || Mode == MODE_INTRA_Q)) + { + /* Intra */ + coded_map[ypos + 1][xpos + 1] = 1; + + CBPY = CBPY ^ 15; /* needed in huffman coding only */ + } + + CBP = (CBPY << 2) | (MCBPC >> 4); + + if (Mode == MODE_INTER_Q || Mode == MODE_INTRA_Q || Mode == MODE_INTER4V_Q) + { + /* Read DQUANT if necessary */ + + DQUANT = buffer.getbits(2); + quant += DQ_tab[DQUANT]; + + + if (quant > 31 || quant < 1) + { + quant = max(1, (31, quant)); + /* could set fault-flag and resync here */ + fault = 1; + } + } + + /* motion vectors */ + if (Mode == MODE_INTER || Mode == MODE_INTER_Q || + Mode == MODE_INTER4V || Mode == MODE_INTER4V_Q) + { + if (Mode == MODE_INTER4V || Mode == MODE_INTER4V_Q) + { + startmv = 1; + stopmv = 4; + } + else + { + startmv = 0; + stopmv = 0; + } + + for (k = startmv; k <= stopmv; k++) + { + mvx = getTMNMV(); + mvy = getTMNMV(); + + pmv0 = find_pmv(xpos, ypos, k, 0); + pmv1 = find_pmv(xpos, ypos, k, 1); + + mvx = motion_decode(mvx, pmv0); + mvy = motion_decode(mvy, pmv1); + + /* store coded or not-coded */ + coded_map[ypos + 1][xpos + 1] = 1; + MV[0][k][ypos+1][xpos+1] = mvx; + MV[1][k][ypos+1][xpos+1] = mvy; + } + + } + /* Intra. */ + else + { + } + if (fault) + goto resync; + } + else + { + /* COD == 1 --> skipped MB */ + if (MBA >= MBAmax) + { + /* all macroblocks decoded */ + return; + } + + if (PCT_INTER == pict_type || PCT_DISPOSABLE_INTER == pict_type) + buffer.flushbits(1); + + Mode = MODE_INTER; + /* Reset CBP */ + CBP = CBPB = 0; + coded_map[ypos + 1][xpos + 1] = 0; + + /* reset motion vectors */ + MV[0][0][ypos + 1][xpos + 1] = 0; + MV[1][0][ypos + 1][xpos + 1] = 0; + } + + /* Store mode and prediction type */ + modemap[ypos + 1][xpos + 1] = Mode; + + /* store defaults for advanced intra coding mode */ + + if (Mode == MODE_INTRA || Mode == MODE_INTRA_Q) + { + MV[0][0][ypos + 1][xpos + 1] = MV[1][0][ypos + 1][xpos + 1] = 0; + } + + + + + if (!COD) + { + Mode = modemap[ypos + 1][xpos + 1]; + + /* decode blocks */ + for (comp = 0; comp < 6; comp++) + { + clearblock(comp); + if ((Mode == MODE_INTRA || Mode == MODE_INTRA_Q)) + { + /* Intra (except in advanced intra coding mode) */ + bp = block[comp]; + + + bp[0] = buffer.getbits(8); + + if (bp[0] == 255) /* Spec. in H.26P, not in TMN4 */ + bp[0] = 128; + bp[0] *= 8; /* Iquant */ + if ((CBP & (1 << (6 - 1 - comp)))) + { + getblock(comp, 0); + } + } + else + { + /* Inter (or Intra in advanced intra coding mode) */ + if ((CBP & (1 << (6 - 1 - comp)))) + { + getblock(comp, 1); + } + } + + if (fault) + goto resync; + } + + } + + /* decode the last MB if data is missing */ + + /* advance to next macroblock */ + MBA++; + pCBP = CBP; + pCBPB = CBPB; + pCOD = COD; + pMODB = MODB; + quant_map[ypos + 1][xpos + 1] = quant; + + int bx = 16 * xpos; + int by = 16 * ypos; + + Mode = modemap[by / 16 + 1][bx / 16 + 1]; + + /* motion compensation for P-frame */ + if (Mode == MODE_INTER || Mode == MODE_INTER_Q || + Mode == MODE_INTER4V || Mode == MODE_INTER4V_Q) + { + reconstruct(bx, by, Mode); + } + + /* copy or add block data into P-picture */ + for (comp = 0; comp < 6; comp++) + { + /* inverse DCT */ + if (Mode == MODE_INTRA || Mode == MODE_INTRA_Q) + { + idct.idct(block[comp]); + addblock(comp, bx, by, 0); + } + else if ((pCBP & (1 << (6 - 1 - comp)))) + { + /* No need to to do this for blocks with no coeffs */ + idct.idct(block[comp]); + addblock(comp, bx, by, 1); + } + } + } +} + +static int STRENGTH[] = {1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 11, 11, 11, 12, 12, 12}; +void Decoder::horiz_edge_filter(unsigned char *rec, int width, int height, int chr) +{ + int i, j; + int delta, d1, d2; + int mbc, mbr, do_filter; + int QP; + int mbr_above; + + + /* horizontal edges */ + for (j = 8; j < height; j += 8) + { + if (!chr) + { + mbr = j >> 4; + mbr_above = (j - 8) >> 4; + } + else + { + mbr = j >> 3; + mbr_above = mbr - 1; + } + const int * const cur_coded_map = coded_map[mbr + 1]; + for (i = 0; i < width; i++) + { + // TODO: replace all below with FilterDeblocking8x8HorEdge_H263(rec+i+(j+1)*width, width, QP) and i+=8 ? + if (!chr) + { + mbc = i >> 4; + } + else + { + mbc = i >> 3; + } + + do_filter = cur_coded_map[mbc + 1] || coded_map[mbr_above + 1][mbc + 1]; + if (do_filter) + { + QP = cur_coded_map[mbc + 1] ? quant_map[mbr + 1][mbc + 1] : quant_map[mbr_above + 1][mbc + 1]; + + + delta = (int)(((int)(*(rec + i + (j - 2) * width)) + + (int)(*(rec + i + (j - 1) * width) * (-4)) + + (int)(*(rec + i + (j) * width) * (4)) + + (int)(*(rec + i + (j + 1) * width) * (-1))) / 8.0); + + d1 = sign(delta) * max(0, abs(delta) - max(0, 2 * (abs(delta) - STRENGTH[QP - 1]))); + + d2 = min(abs(d1 / 2), max(-abs(d1 / 2), (int)(((*(rec + i + (j - 2) * width) - + *(rec + i + (j + 1) * width))) / 4))); + + *(rec + i + (j + 1) * width) += d2; /* D */ + *(rec + i + (j) * width) = min(255, max(0, (int)(*(rec + i + (j) * width)) - d1)); /* C */ + *(rec + i + (j - 1) * width) = min(255, max(0, (int)(*(rec + i + (j - 1) * width)) + d1)); /* B */ + *(rec + i + (j - 2) * width) -= d2; /* A */ + } + } + } + return; +} + +void Decoder::vert_edge_filter(unsigned char *rec, int width, int height, int chr) +{ + int i, j; + int delta, d1, d2; + int mbc, mbr; + int do_filter; + int QP; + int mbc_left; + + + /* vertical edges */ + for (i = 8; i < width; i += 8) + { + if (!chr) + { + mbc = i >> 4; + mbc_left = (i - 8) >> 4; + } + else + { + mbc = i >> 3; + mbc_left = mbc - 1; + } + // TODO: replace all below with FilterDeblocking8x8VerEdge_H263(rec+i +j*width, width, QP) and i+=8 ? + for (j = 0; j < height; j++) + { + if (!chr) + { + mbr = j >> 4; + } + else + { + mbr = j >> 3; + + } + do_filter = coded_map[mbr + 1][mbc + 1] || coded_map[mbr + 1][mbc_left + 1]; + + if (do_filter) + { + + QP = coded_map[mbr + 1][mbc + 1] ? + quant_map[mbr + 1][mbc + 1] : quant_map[mbr + 1][mbc_left + 1]; + + delta = (int)(((int)(*(rec + i - 2 + j * width)) + + (int)(*(rec + i - 1 + j * width) * (-4)) + + (int)(*(rec + i + j * width) * (4)) + + (int)(*(rec + i + 1 + j * width) * (-1))) / 8.0); + + d1 = sign(delta) * max(0, abs(delta) - + max(0, 2 * (abs(delta) - STRENGTH[QP - 1]))); + + d2 = min(abs(d1 / 2), max(-abs(d1 / 2), + (int)((*(rec + i - 2 + j * width) - + *(rec + i + 1 + j * width)) / 4))); + + *(rec + i + 1 + j * width) += d2; /* D */ + *(rec + i + j * width) = min(255, max(0, (int)(*(rec + i + j * width)) - d1)); /* C */ + *(rec + i - 1 + j * width) = min(255, max(0, (int)(*(rec + i - 1 + j * width)) + d1)); /* B */ + *(rec + i - 2 + j * width) -= d2; /* A */ + } + } + } + return; +} + +void Decoder::edge_filter(unsigned char *lum, unsigned char *Cb, unsigned char *Cr, int width, int height) +{ + + /* Luma */ + horiz_edge_filter(lum, width, height, 0); + vert_edge_filter(lum, width, height, 0); + + /* Chroma */ + horiz_edge_filter(Cb, width / 2, height / 2, 1); + vert_edge_filter(Cb, width / 2, height / 2, 1); + horiz_edge_filter(Cr, width / 2, height / 2, 1); + vert_edge_filter(Cr, width / 2, height / 2, 1); + + /* that's it */ + return; +} + + + +void Decoder::PostFilter(unsigned char *lum, unsigned char *Cb, unsigned char *Cr, + int width, int height) +{ + + /* Luma */ + horiz_post_filter(lum, width, height, 0); + vert_post_filter(lum, width, height, 0); + + /* Chroma */ + horiz_post_filter(Cb, width / 2, height / 2, 1); + vert_post_filter(Cb, width / 2, height / 2, 1); + horiz_post_filter(Cr, width / 2, height / 2, 1); + vert_post_filter(Cr, width / 2, height / 2, 1); + + /* that's it */ + return; +} + + +/***********************************************************************/ + +static int STRENGTH1[] = {1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4}; +void Decoder::horiz_post_filter(unsigned char *rec, int width, int height, int chr) +{ + int i, j; + int delta, d1; + int mbc, mbr; + int QP; + int mbr_above; + + + /* horizontal edges */ + for (j = 8; j < height; j += 8) + { + for (i = 0; i < width; i++) + { + if (!chr) + { + mbr = j >> 4; + mbc = i >> 4; + mbr_above = (j - 8) >> 4; + } + else + { + mbr = j >> 3; + mbc = i >> 3; + mbr_above = mbr - 1; + } + + QP = coded_map[mbr + 1][mbc + 1] ? + quant_map[mbr + 1][mbc + 1] : quant_map[mbr_above + 1][mbc + 1]; + + delta = (int)(((int)(*(rec + i + (j - 3) * width)) + + (int)(*(rec + i + (j - 2) * width)) + + (int)(*(rec + i + (j - 1) * width)) + + (int)(*(rec + i + (j) * width) * (-6)) + + (int)(*(rec + i + (j + 1) * width)) + + (int)(*(rec + i + (j + 2) * width)) + + (int)(*(rec + i + (j + 3) * width))) / 8.0); + + d1 = sign(delta) * max(0, abs(delta) - max(0, 2 * (abs(delta) - STRENGTH1[QP - 1]))); + + /* Filter D */ + *(rec + i + (j) * width) += d1; + } + } + return; +} + +static int STRENGTH2[] = {1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3}; +void Decoder::vert_post_filter(unsigned char *rec, int width, int height, int chr) +{ + int i, j; + int delta, d1; + int mbc, mbr; + int QP; + int mbc_left; + + + /* vertical edges */ + for (i = 8; i < width; i += 8) + { + for (j = 0; j < height; j++) + { + if (!chr) + { + mbr = j >> 4; + mbc = i >> 4; + mbc_left = (i - 8) >> 4; + } + else + { + mbr = j >> 3; + mbc = i >> 3; + mbc_left = mbc - 1; + } + + QP = coded_map[mbr + 1][mbc + 1] ? + quant_map[mbr + 1][mbc + 1] : quant_map[mbr + 1][mbc_left + 1]; + + delta = (int)(((int)(*(rec + i - 3 + j * width)) + + (int)(*(rec + i - 2 + j * width)) + + (int)(*(rec + i - 1 + j * width)) + + (int)(*(rec + i + j * width) * (-6)) + + (int)(*(rec + i + 1 + j * width)) + + (int)(*(rec + i + 2 + j * width)) + + (int)(*(rec + i + 3 + j * width))) / 8.0); + + d1 = sign(delta) * max(0, abs(delta) - max(0, 2 * (abs(delta) - STRENGTH2[QP - 1]))); + + /* Post Filter D */ + *(rec + i + j * width) += d1; + } + } + return; +} diff --git a/Src/f263/Reconstruction.cpp b/Src/f263/Reconstruction.cpp new file mode 100644 index 00000000..73baa269 --- /dev/null +++ b/Src/f263/Reconstruction.cpp @@ -0,0 +1,343 @@ +#include "Decoder.h" + +#define sign(a) ((a) < 0 ? -1 : 1) + +/* private prototypes */ +static void recon_comp (unsigned char *src, unsigned char *dst, + int lx, int lx2, int w, int h, int x, int y, int dx, int dy); + +static void rec(unsigned char *s, unsigned char *d, int lx, int lx2, int h); +static void recc(unsigned char *s, unsigned char *d, int lx, int lx2, int h); +static void rech(unsigned char *s, unsigned char *d, int lx, int lx2, int h); +static void rechc(unsigned char *s, unsigned char *d, int lx, int lx2, int h); +static void h263_recv(unsigned char *s, unsigned char *d, int lx, int lx2, int h); +static void recvc(unsigned char *s, unsigned char *d, int lx, int lx2, int h); +static void rec4(unsigned char *s, unsigned char *d, int lx, int lx2, int h); +static void rec4c(unsigned char *s, unsigned char *d, int lx, int lx2, int h); + +static int roundtab[16]= {0,0,0,1,1,1,1,1,1,1,1,1,1,1,2,2}; + +void Decoder::reconstruct(int bx, int by, int mode) +{ + int w, h, lx, lx2, dx, dy, xp, yp, comp, sum; + int x, y; + unsigned char *src[3]; + + x = bx / 16 + 1; + y = by / 16 + 1; + lx = coded_picture_width; + + lx2 = coded_picture_width + 64; + src[0] = edgeframe[0]; + src[1] = edgeframe[1]; + src[2] = edgeframe[2]; + + /* P prediction */ + w = 8; + h = 8; + /* Y */ + /* 4 MV can be used without OBMC in * deblocking filter mode */ + + if (mode == MODE_INTER4V || mode == MODE_INTER4V_Q) + { + for (comp = 0; comp < 4; comp++) + { + dx = MV[0][comp + 1][y][x]; + dy = MV[1][comp + 1][y][x]; + + xp = bx + ((comp & 1) << 3); + yp = by + ((comp & 2) << 2); + recon_comp(src[0], newframe[0], lx, lx2, w, h, xp, yp, dx, dy); + } + } + else + { + dx = MV[0][0][y][x]; + dy = MV[1][0][y][x]; + recon_comp(src[0], newframe[0], lx, lx2, w << 1, h << 1, bx, by, dx, dy); + // TODO: MC16x16 + } + + /* Chroma */ + if (mode == MODE_INTER4V || mode == MODE_INTER4V_Q) + { + sum = MV[0][1][y][x] + MV[0][2][y][x] + MV[0][3][y][x] + MV[0][4][y][x]; + dx = sign(sum) * (roundtab[abs(sum) % 16] + (abs(sum) / 16) * 2); + + sum = MV[1][1][y][x] + MV[1][2][y][x] + MV[1][3][y][x] + MV[1][4][y][x]; + dy = sign(sum) * (roundtab[abs(sum) % 16] + (abs(sum) / 16) * 2); + + } + else + { + dx = MV[0][0][y][x]; + dy = MV[1][0][y][x]; + /* chroma rounding */ + dx = (dx % 4 == 0 ? dx >> 1 : (dx >> 1) | 1); + dy = (dy % 4 == 0 ? dy >> 1 : (dy >> 1) | 1); + } + lx >>= 1; + bx >>= 1; + lx2 >>= 1; + by >>= 1; + /* Chroma */ + recon_comp(src[1], newframe[1], lx, lx2, w, h, bx, by, dx, dy); + recon_comp(src[2], newframe[2], lx, lx2, w, h, bx, by, dx, dy); +} + +static void recon_comp(unsigned char *src,unsigned char *dst,int lx,int lx2,int w,int h,int x,int y,int dx,int dy) +{ + int xint, xh, yint, yh; + unsigned char *s, *d; + + xint = dx>>1; + xh = dx & 1; + yint = dy>>1; + yh = dy & 1; + + /* origins */ + s = src + lx2*(y+yint) + x + xint; + d = dst + lx*y + x; + + if (!xh && !yh) + if (w!=8) + rec(s,d,lx,lx2,h); + else + recc(s,d,lx,lx2,h); + else if (!xh && yh) + if (w!=8) + h263_recv(s,d,lx,lx2,h); + else + recvc(s,d,lx,lx2,h); + else if (xh && !yh) + if (w!=8) + rech(s,d,lx,lx2,h); + else + rechc(s,d,lx,lx2,h); + else /* if (xh && yh) */ + if (w!=8) + rec4(s,d,lx,lx2,h); + else + rec4c(s,d,lx,lx2,h); +} + +static void rec(unsigned char *s,unsigned char *d,int lx,int lx2,int h) +{ + int j; + + for (j=0; j<h; j++) + { + d[0] = s[0]; + d[1] = s[1]; + d[2] = s[2]; + d[3] = s[3]; + d[4] = s[4]; + d[5] = s[5]; + d[6] = s[6]; + d[7] = s[7]; + d[8] = s[8]; + d[9] = s[9]; + d[10] = s[10]; + d[11] = s[11]; + d[12] = s[12]; + d[13] = s[13]; + d[14] = s[14]; + d[15] = s[15]; + s+= lx2; + d+= lx; + } +} + +static void recc(unsigned char *s,unsigned char *d,int lx,int lx2,int h) +{ + int j; + + for (j=0; j<h; j++) + { + d[0] = s[0]; + d[1] = s[1]; + d[2] = s[2]; + d[3] = s[3]; + d[4] = s[4]; + d[5] = s[5]; + d[6] = s[6]; + d[7] = s[7]; + s+= lx2; + d+= lx; + } +} + +static void rech(unsigned char *s,unsigned char *d,int lx,int lx2,int h) +{ + unsigned char *dp,*sp; + int j; + unsigned int s1,s2; + + sp = s; + dp = d; + for (j=0; j<h; j++) + { + s1=sp[0]; + dp[0] = (unsigned int)(s1+(s2=sp[1])+1)>>1; + dp[1] = (unsigned int)(s2+(s1=sp[2])+1)>>1; + dp[2] = (unsigned int)(s1+(s2=sp[3])+1)>>1; + dp[3] = (unsigned int)(s2+(s1=sp[4])+1)>>1; + dp[4] = (unsigned int)(s1+(s2=sp[5])+1)>>1; + dp[5] = (unsigned int)(s2+(s1=sp[6])+1)>>1; + dp[6] = (unsigned int)(s1+(s2=sp[7])+1)>>1; + dp[7] = (unsigned int)(s2+(s1=sp[8])+1)>>1; + dp[8] = (unsigned int)(s1+(s2=sp[9])+1)>>1; + dp[9] = (unsigned int)(s2+(s1=sp[10])+1)>>1; + dp[10] = (unsigned int)(s1+(s2=sp[11])+1)>>1; + dp[11] = (unsigned int)(s2+(s1=sp[12])+1)>>1; + dp[12] = (unsigned int)(s1+(s2=sp[13])+1)>>1; + dp[13] = (unsigned int)(s2+(s1=sp[14])+1)>>1; + dp[14] = (unsigned int)(s1+(s2=sp[15])+1)>>1; + dp[15] = (unsigned int)(s2+sp[16]+1)>>1; + sp+= lx2; + dp+= lx; + } +} + +static void rechc(unsigned char *s,unsigned char *d,int lx,int lx2,int h) +{ + unsigned char *dp,*sp; + int j; + unsigned int s1,s2; + + sp = s; + dp = d; + for (j=0; j<h; j++) + { + s1=sp[0]; + dp[0] = (unsigned int)(s1+(s2=sp[1])+1)>>1; + dp[1] = (unsigned int)(s2+(s1=sp[2])+1)>>1; + dp[2] = (unsigned int)(s1+(s2=sp[3])+1)>>1; + dp[3] = (unsigned int)(s2+(s1=sp[4])+1)>>1; + dp[4] = (unsigned int)(s1+(s2=sp[5])+1)>>1; + dp[5] = (unsigned int)(s2+(s1=sp[6])+1)>>1; + dp[6] = (unsigned int)(s1+(s2=sp[7])+1)>>1; + dp[7] = (unsigned int)(s2+sp[8]+1)>>1; + sp+= lx2; + dp+= lx; + } +} + + +static void h263_recv(unsigned char *s,unsigned char *d,int lx,int lx2,int h) +{ + unsigned char *dp,*sp,*sp2; + int j; + + sp = s; + sp2 = s+lx2; + dp = d; + for (j=0; j<h; j++) + { + dp[0] = (unsigned int)(sp[0]+sp2[0]+1)>>1; + dp[1] = (unsigned int)(sp[1]+sp2[1]+1)>>1; + dp[2] = (unsigned int)(sp[2]+sp2[2]+1)>>1; + dp[3] = (unsigned int)(sp[3]+sp2[3]+1)>>1; + dp[4] = (unsigned int)(sp[4]+sp2[4]+1)>>1; + dp[5] = (unsigned int)(sp[5]+sp2[5]+1)>>1; + dp[6] = (unsigned int)(sp[6]+sp2[6]+1)>>1; + dp[7] = (unsigned int)(sp[7]+sp2[7]+1)>>1; + dp[8] = (unsigned int)(sp[8]+sp2[8]+1)>>1; + dp[9] = (unsigned int)(sp[9]+sp2[9]+1)>>1; + dp[10] = (unsigned int)(sp[10]+sp2[10]+1)>>1; + dp[11] = (unsigned int)(sp[11]+sp2[11]+1)>>1; + dp[12] = (unsigned int)(sp[12]+sp2[12]+1)>>1; + dp[13] = (unsigned int)(sp[13]+sp2[13]+1)>>1; + dp[14] = (unsigned int)(sp[14]+sp2[14]+1)>>1; + dp[15] = (unsigned int)(sp[15]+sp2[15]+1)>>1; + sp+= lx2; + sp2+= lx2; + dp+= lx; + } +} + +static void recvc(unsigned char *s,unsigned char *d,int lx,int lx2,int h) +{ + unsigned char *dp,*sp,*sp2; + int j; + + sp = s; + sp2 = s+lx2; + dp = d; + + for (j=0; j<h; j++) + { + dp[0] = (unsigned int)(sp[0]+sp2[0]+1)>>1; + dp[1] = (unsigned int)(sp[1]+sp2[1]+1)>>1; + dp[2] = (unsigned int)(sp[2]+sp2[2]+1)>>1; + dp[3] = (unsigned int)(sp[3]+sp2[3]+1)>>1; + dp[4] = (unsigned int)(sp[4]+sp2[4]+1)>>1; + dp[5] = (unsigned int)(sp[5]+sp2[5]+1)>>1; + dp[6] = (unsigned int)(sp[6]+sp2[6]+1)>>1; + dp[7] = (unsigned int)(sp[7]+sp2[7]+1)>>1; + sp+= lx2; + sp2+= lx2; + dp+= lx; + } +} + +static void rec4(unsigned char *s,unsigned char *d,int lx,int lx2,int h) +{ + unsigned char *dp,*sp,*sp2; + int j; + unsigned int s1,s2,s3,s4; + + sp = s; + sp2 = s+lx2; + dp = d; + for (j=0; j<h; j++) + { + s1=sp[0]; s3=sp2[0]; + dp[0] = (unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2; + dp[1] = (unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2; + dp[2] = (unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2; + dp[3] = (unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2; + dp[4] = (unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2; + dp[5] = (unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2; + dp[6] = (unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2; + dp[7] = (unsigned int)(s2+(s1=sp[8])+s4+(s3=sp2[8])+2)>>2; + dp[8] = (unsigned int)(s1+(s2=sp[9])+s3+(s4=sp2[9])+2)>>2; + dp[9] = (unsigned int)(s2+(s1=sp[10])+s4+(s3=sp2[10])+2)>>2; + dp[10] = (unsigned int)(s1+(s2=sp[11])+s3+(s4=sp2[11])+2)>>2; + dp[11] = (unsigned int)(s2+(s1=sp[12])+s4+(s3=sp2[12])+2)>>2; + dp[12] = (unsigned int)(s1+(s2=sp[13])+s3+(s4=sp2[13])+2)>>2; + dp[13] = (unsigned int)(s2+(s1=sp[14])+s4+(s3=sp2[14])+2)>>2; + dp[14] = (unsigned int)(s1+(s2=sp[15])+s3+(s4=sp2[15])+2)>>2; + dp[15] = (unsigned int)(s2+sp[16]+s4+sp2[16]+2)>>2; + sp+= lx2; + sp2+= lx2; + dp+= lx; + } +} + +static void rec4c(unsigned char *s,unsigned char *d,int lx,int lx2,int h) +{ + unsigned char *dp,*sp,*sp2; + int j; + unsigned int s1,s2,s3,s4; + + sp = s; + sp2 = s+lx2; + dp = d; + for (j=0; j<h; j++) + { + s1=sp[0]; s3=sp2[0]; + dp[0] = (unsigned int)(s1+(s2=sp[1])+s3+(s4=sp2[1])+2)>>2; + dp[1] = (unsigned int)(s2+(s1=sp[2])+s4+(s3=sp2[2])+2)>>2; + dp[2] = (unsigned int)(s1+(s2=sp[3])+s3+(s4=sp2[3])+2)>>2; + dp[3] = (unsigned int)(s2+(s1=sp[4])+s4+(s3=sp2[4])+2)>>2; + dp[4] = (unsigned int)(s1+(s2=sp[5])+s3+(s4=sp2[5])+2)>>2; + dp[5] = (unsigned int)(s2+(s1=sp[6])+s4+(s3=sp2[6])+2)>>2; + dp[6] = (unsigned int)(s1+(s2=sp[7])+s3+(s4=sp2[7])+2)>>2; + dp[7] = (unsigned int)(s2+sp[8]+s4+sp2[8]+2)>>2; + sp+= lx2; + sp2+= lx2; + dp+= lx; + } +} + diff --git a/Src/f263/api.h b/Src/f263/api.h new file mode 100644 index 00000000..05ccd8c9 --- /dev/null +++ b/Src/f263/api.h @@ -0,0 +1,6 @@ +#pragma once + +#include <api/service/api_service.h> + +extern api_service *serviceManager; +#define WASABI_API_SVC serviceManager diff --git a/Src/f263/f263.sln b/Src/f263/f263.sln new file mode 100644 index 00000000..7e2792d8 --- /dev/null +++ b/Src/f263/f263.sln @@ -0,0 +1,43 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.29424.173 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "f263", "f263.vcxproj", "{133EA77F-540F-4BEC-B276-31F0A5A26056}" + ProjectSection(ProjectDependencies) = postProject + {E110CF48-9CA7-492B-BEA5-98FD87A7284D} = {E110CF48-9CA7-492B-BEA5-98FD87A7284D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "f263_static", "f263_static.vcxproj", "{E110CF48-9CA7-492B-BEA5-98FD87A7284D}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {E110CF48-9CA7-492B-BEA5-98FD87A7284D}.Debug|Win32.ActiveCfg = Debug|Win32 + {E110CF48-9CA7-492B-BEA5-98FD87A7284D}.Debug|Win32.Build.0 = Debug|Win32 + {E110CF48-9CA7-492B-BEA5-98FD87A7284D}.Release|Win32.ActiveCfg = Release|Win32 + {E110CF48-9CA7-492B-BEA5-98FD87A7284D}.Release|Win32.Build.0 = Release|Win32 + {E110CF48-9CA7-492B-BEA5-98FD87A7284D}.Debug|x64.ActiveCfg = Debug|x64 + {E110CF48-9CA7-492B-BEA5-98FD87A7284D}.Debug|x64.Build.0 = Debug|x64 + {E110CF48-9CA7-492B-BEA5-98FD87A7284D}.Release|x64.ActiveCfg = Release|x64 + {E110CF48-9CA7-492B-BEA5-98FD87A7284D}.Release|x64.Build.0 = Release|x64 + {133EA77F-540F-4BEC-B276-31F0A5A26056}.Debug|Win32.ActiveCfg = Debug|Win32 + {133EA77F-540F-4BEC-B276-31F0A5A26056}.Debug|Win32.Build.0 = Debug|Win32 + {133EA77F-540F-4BEC-B276-31F0A5A26056}.Release|Win32.ActiveCfg = Release|Win32 + {133EA77F-540F-4BEC-B276-31F0A5A26056}.Release|Win32.Build.0 = Release|Win32 + {133EA77F-540F-4BEC-B276-31F0A5A26056}.Debug|x64.ActiveCfg = Debug|x64 + {133EA77F-540F-4BEC-B276-31F0A5A26056}.Debug|x64.Build.0 = Debug|x64 + {133EA77F-540F-4BEC-B276-31F0A5A26056}.Release|x64.ActiveCfg = Release|x64 + {133EA77F-540F-4BEC-B276-31F0A5A26056}.Release|x64.Build.0 = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {CEEA74C0-E99C-4636-9BC4-7E51C71476A4} + EndGlobalSection +EndGlobal diff --git a/Src/f263/f263.vcxproj b/Src/f263/f263.vcxproj new file mode 100644 index 00000000..53ae5d16 --- /dev/null +++ b/Src/f263/f263.vcxproj @@ -0,0 +1,256 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectName>f263</ProjectName> + <ProjectGuid>{133EA77F-540F-4BEC-B276-31F0A5A26056}</ProjectGuid> + <RootNamespace>f263</RootNamespace> + <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir> + <TargetExt>.lib</TargetExt> + <IncludePath>$(IncludePath)</IncludePath> + <LibraryPath>$(LibraryPath)</LibraryPath> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir> + <TargetExt>.w5s</TargetExt> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir> + <TargetExt>.lib</TargetExt> + <IncludePath>$(IncludePath)</IncludePath> + <LibraryPath>$(LibraryPath)</LibraryPath> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(PlatformShortName)_$(Configuration)\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration)\</IntDir> + <TargetExt>.w5s</TargetExt> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;F263_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>false</MinimalRebuild> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(ProjectName)$(TargetExt)</OutputFile> + <GenerateDebugInformation>true</GenerateDebugInformation> + <ProgramDatabaseFile>$(ProjectDir)x86_Debug\$(ProjectName).pdb</ProgramDatabaseFile> + <SubSystem>Windows</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <ImportLibrary>$(ProjectDir)x86_Debug\$(ProjectName).lib</ImportLibrary> + <TargetMachine>MachineX86</TargetMachine> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <PostBuildEvent> + <Command> + </Command> + <Message> + </Message> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN64;_DEBUG;_WINDOWS;_USRDLL;F263_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>false</MinimalRebuild> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>EditAndContinue</DebugInformationFormat> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(ProjectName).w5s</OutputFile> + <GenerateDebugInformation>true</GenerateDebugInformation> + <ProgramDatabaseFile>$(ProjectDir)x64_Release\$(ProjectName).pdb</ProgramDatabaseFile> + <SubSystem>Windows</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <ImportLibrary>$(ProjectDir)x64_Release\$(ProjectName).lib</ImportLibrary> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <PostBuildEvent> + <Command>xcopy /Y /D $(OutDir)*.w5s ..\..\..\Winamp_$(PlatformShortName)_$(Configuration)\System\ </Command> + <Message>Post build event: 'xcopy /Y /D $(OutDir)*.w5s ..\..\..\Winamp_$(PlatformShortName)_$(Configuration)\System\'</Message> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MinSpace</Optimization> + <FavorSizeOrSpeed>Size</FavorSizeOrSpeed> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;F263_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <BufferSecurityCheck>false</BufferSecurityCheck> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(ProjectName)$(TargetExt)</OutputFile> + <GenerateDebugInformation>false</GenerateDebugInformation> + <ProgramDatabaseFile>$(ProjectDir)x86_Release\$(ProjectName).pdb</ProgramDatabaseFile> + <SubSystem>Windows</SubSystem> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <ImportLibrary>$(ProjectDir)x86_Release\$(ProjectName).lib</ImportLibrary> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <PostBuildEvent> + <Command> + </Command> + <Message> + </Message> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <Optimization>MinSpace</Optimization> + <FavorSizeOrSpeed>Size</FavorSizeOrSpeed> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN64;NDEBUG;_WINDOWS;_USRDLL;F263_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <RuntimeLibrary>MultiThreaded</RuntimeLibrary> + <BufferSecurityCheck>false</BufferSecurityCheck> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(ProjectName).w5s</OutputFile> + <GenerateDebugInformation>false</GenerateDebugInformation> + <ProgramDatabaseFile>$(ProjectDir)x64_Release\$(ProjectName).pdb</ProgramDatabaseFile> + <SubSystem>Windows</SubSystem> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <ImportLibrary>$(ProjectDir)x64_Release\$(ProjectName).lib</ImportLibrary> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + </Link> + <PostBuildEvent> + <Command>xcopy /Y /D $(OutDir)*.w5s ..\..\..\Winamp_$(PlatformShortName)_$(Configuration)\System\ </Command> + <Message>Post build event: 'xcopy /Y /D $(OutDir)*.w5s ..\..\..\Winamp_$(PlatformShortName)_$(Configuration)\System\'</Message> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="..\Wasabi\bfc\bfc.vcxproj"> + <Project>{d0ec862e-dddd-4f4f-934f-b75dc9062dc1}</Project> + </ProjectReference> + <ProjectReference Include="..\Wasabi\Wasabi.vcxproj"> + <Project>{3e0bfa8a-b86a-42e9-a33f-ec294f823f7f}</Project> + </ProjectReference> + <ProjectReference Include="f263_static.vcxproj"> + <Project>{e110cf48-9ca7-492b-bea5-98fd87a7284d}</Project> + <CopyLocalSatelliteAssemblies>true</CopyLocalSatelliteAssemblies> + <ReferenceOutputAssembly>true</ReferenceOutputAssembly> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <ClInclude Include="api.h" /> + <ClInclude Include="factory_f263.h" /> + <ClInclude Include="flv_f263_decoder.h" /> + <ClInclude Include="impl_f263decoder.h" /> + <ClInclude Include="mkv_f263_decoder.h" /> + <ClInclude Include="obj_f263decoder.h" /> + <ClInclude Include="resource.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="factory_f263.cpp" /> + <ClCompile Include="flv_f263_decoder.cpp" /> + <ClCompile Include="impl_f263decoder.cpp" /> + <ClCompile Include="mkv_f263_decoder.cpp" /> + <ClCompile Include="w5s.cpp" /> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="f263.w5s.rc" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/Src/f263/f263.vcxproj.filters b/Src/f263/f263.vcxproj.filters new file mode 100644 index 00000000..5032dd22 --- /dev/null +++ b/Src/f263/f263.vcxproj.filters @@ -0,0 +1,59 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClCompile Include="factory_f263.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="flv_f263_decoder.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="impl_f263decoder.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="mkv_f263_decoder.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="w5s.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="factory_f263.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="flv_f263_decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="impl_f263decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="mkv_f263_decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="obj_f263decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="resource.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="api.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <Filter Include="Header Files"> + <UniqueIdentifier>{64b69af7-d46d-4bf2-ba93-decdf17bb73c}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files"> + <UniqueIdentifier>{f8396b92-0933-4ffa-bf39-cc5a5f0d1945}</UniqueIdentifier> + </Filter> + <Filter Include="Ressource Files"> + <UniqueIdentifier>{4dc6e908-f456-4836-8523-63e2b168aa89}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="f263.w5s.rc"> + <Filter>Ressource Files</Filter> + </ResourceCompile> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/Src/f263/f263.w5s.rc b/Src/f263/f263.w5s.rc new file mode 100644 index 00000000..fcff7711 --- /dev/null +++ b/Src/f263/f263.w5s.rc @@ -0,0 +1,76 @@ +// Microsoft Visual C++ generated resource script. +// +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "afxres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (U.S.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US +#pragma code_page(1252) +#endif //_WIN32 + +#endif // English (U.S.) resources +///////////////////////////////////////////////////////////////////////////// + + +///////////////////////////////////////////////////////////////////////////// +// English (U.K.) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG) +#ifdef _WIN32 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK +#pragma code_page(1252) +#endif //_WIN32 + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""afxres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "#include ""version.rc2""\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + +#endif // English (U.K.) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// +#include "version.rc2" + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/Src/f263/f263_static.vcxproj b/Src/f263/f263_static.vcxproj new file mode 100644 index 00000000..d8f02e6e --- /dev/null +++ b/Src/f263/f263_static.vcxproj @@ -0,0 +1,215 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{E110CF48-9CA7-492B-BEA5-98FD87A7284D}</ProjectGuid> + <RootNamespace>f263_static</RootNamespace> + <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>StaticLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(PlatformShortName)_$(Configuration)_static\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration)_static\</IntDir> + <IncludePath>$(IncludePath)</IncludePath> + <LibraryPath>$(LibraryPath)</LibraryPath> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>true</LinkIncremental> + <OutDir>$(PlatformShortName)_$(Configuration)_static\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration)_static\</IntDir> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(PlatformShortName)_$(Configuration)_static\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration)_static\</IntDir> + <IncludePath>$(IncludePath)</IncludePath> + <LibraryPath>$(LibraryPath)</LibraryPath> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <OutDir>$(PlatformShortName)_$(Configuration)_static\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration)_static\</IntDir> + </PropertyGroup> + <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <VcpkgConfiguration>Debug</VcpkgConfiguration> + <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet> + </PropertyGroup> + <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet> + <VcpkgConfiguration>Debug</VcpkgConfiguration> + </PropertyGroup> + <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet> + </PropertyGroup> + <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>false</MinimalRebuild> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <BufferSecurityCheck>true</BufferSecurityCheck> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Lib> + <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> + </Lib> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN64;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>false</MinimalRebuild> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <BufferSecurityCheck>true</BufferSecurityCheck> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Lib> + <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> + </Lib> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MinSpace</Optimization> + <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> + <IntrinsicFunctions>true</IntrinsicFunctions> + <FavorSizeOrSpeed>Size</FavorSizeOrSpeed> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <BufferSecurityCheck>false</BufferSecurityCheck> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>None</DebugInformationFormat> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Lib> + <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> + </Lib> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <Optimization>MinSpace</Optimization> + <InlineFunctionExpansion>AnySuitable</InlineFunctionExpansion> + <IntrinsicFunctions>true</IntrinsicFunctions> + <FavorSizeOrSpeed>Size</FavorSizeOrSpeed> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN64;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <BufferSecurityCheck>false</BufferSecurityCheck> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>None</DebugInformationFormat> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Lib> + <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies> + </Lib> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="BitReader.cpp" /> + <ClCompile Include="Block.cpp" /> + <ClCompile Include="Decoder.cpp" /> + <ClCompile Include="Header.cpp" /> + <ClCompile Include="idct.cpp" /> + <ClCompile Include="idctref.cpp" /> + <ClCompile Include="indices.cpp" /> + <ClCompile Include="lib.cpp" /> + <ClCompile Include="Picture.cpp" /> + <ClCompile Include="Reconstruction.cpp" /> + <ClCompile Include="vlc.cpp" /> + <ClCompile Include="vlc_table.cpp" /> + </ItemGroup> + <ItemGroup> + <ClInclude Include="BitReader.h" /> + <ClInclude Include="Decoder.h" /> + <ClInclude Include="idct.h" /> + <ClInclude Include="idctref.h" /> + <ClInclude Include="indices.h" /> + <ClInclude Include="lib.h" /> + <ClInclude Include="vlc_table.h" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/Src/f263/f263_static.vcxproj.filters b/Src/f263/f263_static.vcxproj.filters new file mode 100644 index 00000000..9bc09f70 --- /dev/null +++ b/Src/f263/f263_static.vcxproj.filters @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <ClCompile Include="BitReader.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Block.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Decoder.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Header.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="idct.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="idctref.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="indices.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="lib.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Picture.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="Reconstruction.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="vlc.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="vlc_table.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ClInclude Include="vlc_table.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="lib.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="indices.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="idctref.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="idct.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="Decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="BitReader.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <Filter Include="Header Files"> + <UniqueIdentifier>{1abe055e-8bcd-4762-8596-456bb1379502}</UniqueIdentifier> + </Filter> + <Filter Include="Ressource Files"> + <UniqueIdentifier>{a1e69691-593e-4d99-8e28-7fc4fdbef57c}</UniqueIdentifier> + </Filter> + <Filter Include="Source Files"> + <UniqueIdentifier>{61f45802-cce5-4d5f-ac0c-e30ed6c350d4}</UniqueIdentifier> + </Filter> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/Src/f263/f263w5s.vcxproj b/Src/f263/f263w5s.vcxproj new file mode 100644 index 00000000..6fbfc2a2 --- /dev/null +++ b/Src/f263/f263w5s.vcxproj @@ -0,0 +1,316 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Debug|x64"> + <Configuration>Debug</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|x64"> + <Configuration>Release</Configuration> + <Platform>x64</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <VCProjectVersion>17.0</VCProjectVersion> + <ProjectName>f263.w5s</ProjectName> + <ProjectGuid>{1A8AE3E1-9D6C-444A-A2F3-046C9ED6F5A8}</ProjectGuid> + <RootNamespace>f263.w5s</RootNamespace> + <Keyword>Win32Proj</Keyword> + <WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + <WholeProgramOptimization>true</WholeProgramOptimization> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + <WholeProgramOptimization>true</WholeProgramOptimization> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> + <ConfigurationType>DynamicLibrary</ConfigurationType> + <PlatformToolset>v142</PlatformToolset> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC71.props" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup> + <_ProjectFileVersion>17.0.32505.173</_ProjectFileVersion> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <OutDir>$(PlatformShortName)_$(Configuration).w5s\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration).w5s\</IntDir> + <LinkIncremental>false</LinkIncremental> + <IncludePath>$(IncludePath)</IncludePath> + <LibraryPath>$(LibraryPath)</LibraryPath> + <TargetExt>.w5s</TargetExt> + <TargetName>f263</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <LinkIncremental>false</LinkIncremental> + <IncludePath>$(IncludePath)</IncludePath> + <LibraryPath>$(LibraryPath)</LibraryPath> + <TargetExt>.w5s</TargetExt> + <TargetName>f263</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <OutDir>$(PlatformShortName)_$(Configuration).w5s\</OutDir> + <IntDir>$(PlatformShortName)_$(Configuration).w5s\</IntDir> + <LinkIncremental>false</LinkIncremental> + <GenerateManifest>false</GenerateManifest> + <IncludePath>$(IncludePath)</IncludePath> + <LibraryPath>$(LibraryPath)</LibraryPath> + <TargetExt>.w5s</TargetExt> + <TargetName>f263</TargetName> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <LinkIncremental>false</LinkIncremental> + <GenerateManifest>false</GenerateManifest> + <IncludePath>$(IncludePath)</IncludePath> + <LibraryPath>$(LibraryPath)</LibraryPath> + <TargetExt>.w5s</TargetExt> + <TargetName>f263</TargetName> + </PropertyGroup> + <PropertyGroup Label="Vcpkg"> + <VcpkgEnableManifest>false</VcpkgEnableManifest> + </PropertyGroup> + <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <VcpkgInstalledDir> + </VcpkgInstalledDir> + <VcpkgUseStatic>false</VcpkgUseStatic> + <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Vcpkg"> + <VcpkgInstalledDir> + </VcpkgInstalledDir> + <VcpkgUseStatic>false</VcpkgUseStatic> + <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet> + </PropertyGroup> + <PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <VcpkgInstalledDir> + </VcpkgInstalledDir> + <VcpkgUseStatic>false</VcpkgUseStatic> + <VcpkgConfiguration>Debug</VcpkgConfiguration> + <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Vcpkg"> + <VcpkgInstalledDir> + </VcpkgInstalledDir> + <VcpkgUseStatic>false</VcpkgUseStatic> + <VcpkgTriplet>x86-windows-static-md</VcpkgTriplet> + <VcpkgConfiguration>Debug</VcpkgConfiguration> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;F263_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>false</MinimalRebuild> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <PrecompiledHeader /> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> + <GenerateDebugInformation>true</GenerateDebugInformation> + <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> + <SubSystem>Windows</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention /> + <ImportLibrary>$(OutDir)f263w5s.lib</ImportLibrary> + <TargetMachine>MachineX86</TargetMachine> + <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>.\$(PlatformShortName)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> + </Link> + <PostBuildEvent> + <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\ +xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\ </Command> + <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\'</Message> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> + <ClCompile> + <Optimization>Disabled</Optimization> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;F263_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <MinimalRebuild>false</MinimalRebuild> + <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks> + <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>ProgramDatabase</DebugInformationFormat> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> + <GenerateDebugInformation>true</GenerateDebugInformation> + <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> + <SubSystem>Windows</SubSystem> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <DataExecutionPrevention> + </DataExecutionPrevention> + <ImportLibrary>$(OutDir)f263w5s.lib</ImportLibrary> + <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + <AdditionalLibraryDirectories>.\$(PlatformShortName)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers> + </Link> + <PostBuildEvent> + <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\ +xcopy /Y /D $(IntDir)$(TargetName).pdb ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\ </Command> + <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\'</Message> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <Optimization>MinSpace</Optimization> + <FavorSizeOrSpeed>Size</FavorSizeOrSpeed> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;F263_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <BufferSecurityCheck>true</BufferSecurityCheck> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <PrecompiledHeader /> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>None</DebugInformationFormat> + <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> + <IgnoreSpecificDefaultLibraries>msvcprt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> + <GenerateDebugInformation>false</GenerateDebugInformation> + <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> + <SubSystem>Windows</SubSystem> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <ImportLibrary>$(OutDir)f263w5s.lib</ImportLibrary> + <TargetMachine>MachineX86</TargetMachine> + <AdditionalLibraryDirectories>.\$(PlatformShortName)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\ </Command> + <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\'</Message> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> + <ClCompile> + <Optimization>MinSpace</Optimization> + <FavorSizeOrSpeed>Size</FavorSizeOrSpeed> + <AdditionalIncludeDirectories>../Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories> + <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;F263_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions> + <StringPooling>true</StringPooling> + <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary> + <BufferSecurityCheck>true</BufferSecurityCheck> + <TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType> + <ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope> + <PrecompiledHeader> + </PrecompiledHeader> + <WarningLevel>Level3</WarningLevel> + <DebugInformationFormat>None</DebugInformationFormat> + <DisableSpecificWarnings>4244;%(DisableSpecificWarnings)</DisableSpecificWarnings> + <MultiProcessorCompilation>true</MultiProcessorCompilation> + <ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName> + </ClCompile> + <Link> + <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile> + <IgnoreSpecificDefaultLibraries>msvcprt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries> + <GenerateDebugInformation>false</GenerateDebugInformation> + <ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile> + <SubSystem>Windows</SubSystem> + <OptimizeReferences>true</OptimizeReferences> + <EnableCOMDATFolding>true</EnableCOMDATFolding> + <RandomizedBaseAddress>false</RandomizedBaseAddress> + <ImportLibrary>$(OutDir)f263w5s.lib</ImportLibrary> + <AdditionalLibraryDirectories>.\$(PlatformShortName)_$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories> + <AdditionalDependencies>kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)</AdditionalDependencies> + </Link> + <PostBuildEvent> + <Command>xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\ </Command> + <Message>Post build event: 'xcopy /Y /D $(OutDir)$(TargetName)$(TargetExt) ..\..\Build\Winamp_$(PlatformShortName)_$(Configuration)\System\'</Message> + </PostBuildEvent> + </ItemDefinitionGroup> + <ItemGroup> + <ProjectReference Include="..\Wasabi\bfc\bfc.vcxproj"> + <Project>{d0ec862e-dddd-4f4f-934f-b75dc9062dc1}</Project> + </ProjectReference> + <ProjectReference Include="..\Wasabi\Wasabi.vcxproj"> + <Project>{3e0bfa8a-b86a-42e9-a33f-ec294f823f7f}</Project> + </ProjectReference> + <ProjectReference Include="f263_static.vcxproj"> + <Project>{e110cf48-9ca7-492b-bea5-98fd87a7284d}</Project> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <ClInclude Include="api.h" /> + <ClInclude Include="factory_f263.h" /> + <ClInclude Include="flv_f263_decoder.h" /> + <ClInclude Include="impl_f263decoder.h" /> + <ClInclude Include="mkv_f263_decoder.h" /> + <ClInclude Include="obj_f263decoder.h" /> + <ClInclude Include="resource.h" /> + </ItemGroup> + <ItemGroup> + <ClCompile Include="factory_f263.cpp" /> + <ClCompile Include="flv_f263_decoder.cpp" /> + <ClCompile Include="impl_f263decoder.cpp" /> + <ClCompile Include="mkv_f263_decoder.cpp" /> + <ClCompile Include="w5s.cpp" /> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="f263.w5s.rc" /> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/Src/f263/f263w5s.vcxproj.filters b/Src/f263/f263w5s.vcxproj.filters new file mode 100644 index 00000000..1cb4d7e1 --- /dev/null +++ b/Src/f263/f263w5s.vcxproj.filters @@ -0,0 +1,60 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup> + <Filter Include="Source Files"> + <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> + <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> + </Filter> + <Filter Include="Resource Files"> + <UniqueIdentifier>{a532cd7c-d8b7-4dcc-86f5-8b155074c11d}</UniqueIdentifier> + </Filter> + <Filter Include="Header Files"> + <UniqueIdentifier>{dd8457ec-7c3b-41df-9bf7-8fd496c4294e}</UniqueIdentifier> + </Filter> + </ItemGroup> + <ItemGroup> + <ClInclude Include="resource.h"> + <Filter>Resource Files</Filter> + </ClInclude> + <ClInclude Include="factory_f263.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="flv_f263_decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="impl_f263decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="mkv_f263_decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="obj_f263decoder.h"> + <Filter>Header Files</Filter> + </ClInclude> + <ClInclude Include="api.h"> + <Filter>Header Files</Filter> + </ClInclude> + </ItemGroup> + <ItemGroup> + <ClCompile Include="factory_f263.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="flv_f263_decoder.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="impl_f263decoder.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="mkv_f263_decoder.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + <ClCompile Include="w5s.cpp"> + <Filter>Source Files</Filter> + </ClCompile> + </ItemGroup> + <ItemGroup> + <ResourceCompile Include="f263.w5s.rc"> + <Filter>Resource Files</Filter> + </ResourceCompile> + </ItemGroup> +</Project>
\ No newline at end of file diff --git a/Src/f263/factory_f263.cpp b/Src/f263/factory_f263.cpp new file mode 100644 index 00000000..26211e4e --- /dev/null +++ b/Src/f263/factory_f263.cpp @@ -0,0 +1,66 @@ +#include "api.h" +#include "factory_f263.h" +#include "impl_f263decoder.h" + +static const char serviceName[] = "F263 Decoder"; + +FOURCC F263Factory::GetServiceType() +{ + return WaSvc::OBJECT; +} + +const char *F263Factory::GetServiceName() +{ + return serviceName; +} + +GUID F263Factory::GetGUID() +{ + return obj_f263decoderGUID; +} + +void *F263Factory::GetInterface(int global_lock) +{ + F263Decoder *f263decoder = new F263Decoder; + obj_f263decoder *ifc= static_cast<obj_f263decoder *>(f263decoder); +// if (global_lock) +// WASABI_API_SVC->service_lock(this, (void *)ifc); + return ifc; +} + +int F263Factory::SupportNonLockingInterface() +{ + return 1; +} + +int F263Factory::ReleaseInterface(void *ifc) +{ + //WASABI_API_SVC->service_unlock(ifc); + obj_f263decoder *decoderIFC = static_cast<obj_f263decoder *>(ifc); + F263Decoder *decoder = static_cast<F263Decoder *>(decoderIFC); + delete decoder; + return 1; +} + +const char *F263Factory::GetTestString() +{ + return NULL; +} + +int F263Factory::ServiceNotify(int msg, int param1, int param2) +{ + return 1; +} + +#define CBCLASS F263Factory +START_DISPATCH; +CB(WASERVICEFACTORY_GETSERVICETYPE, GetServiceType) +CB(WASERVICEFACTORY_GETSERVICENAME, GetServiceName) +CB(WASERVICEFACTORY_GETGUID, GetGUID) +CB(WASERVICEFACTORY_GETINTERFACE, GetInterface) +CB(WASERVICEFACTORY_SUPPORTNONLOCKINGGETINTERFACE, SupportNonLockingInterface) +CB(WASERVICEFACTORY_RELEASEINTERFACE, ReleaseInterface) +CB(WASERVICEFACTORY_GETTESTSTRING, GetTestString) +CB(WASERVICEFACTORY_SERVICENOTIFY, ServiceNotify) +END_DISPATCH; +#undef CBCLASS
\ No newline at end of file diff --git a/Src/f263/factory_f263.h b/Src/f263/factory_f263.h new file mode 100644 index 00000000..1a7c7d2a --- /dev/null +++ b/Src/f263/factory_f263.h @@ -0,0 +1,27 @@ +/* copyright 2008 Ben Allison */ +#ifndef NULLSOFT_FACTORY_F263_H +#define NULLSOFT_FACTORY_F263_H + +#include "api.h" +#include <api/service/waservicefactory.h> +#include <api/service/services.h> + +class F263Factory : public waServiceFactory +{ +public: + FOURCC GetServiceType(); + const char *GetServiceName(); + GUID GetGUID(); + void *GetInterface(int global_lock); + int SupportNonLockingInterface(); + int ReleaseInterface(void *ifc); + const char *GetTestString(); + int ServiceNotify(int msg, int param1, int param2); + +protected: + RECVS_DISPATCH; +}; + + +#endif + diff --git a/Src/f263/flv_f263_decoder.cpp b/Src/f263/flv_f263_decoder.cpp new file mode 100644 index 00000000..427ef8a4 --- /dev/null +++ b/Src/f263/flv_f263_decoder.cpp @@ -0,0 +1,102 @@ +#include "flv_f263_decoder.h" +#include "lib.h" + +int FLVDecoderCreator::CreateVideoDecoder(int format_type, int width, int height, ifc_flvvideodecoder **decoder) +{ + if (format_type == FLV::VIDEO_FORMAT_SORENSON) + { + void *ctx = F263_CreateDecoder(); + if (!ctx) + return CREATEDECODER_FAILURE; + *decoder = new FLVSorenson(ctx); + return CREATEDECODER_SUCCESS; + } + return CREATEDECODER_NOT_MINE; +} + +int FLVDecoderCreator::HandlesVideo(int format_type) +{ + if (format_type == FLV::VIDEO_FORMAT_SORENSON) + { + return CREATEDECODER_SUCCESS; + } + return CREATEDECODER_NOT_MINE; +} + +#define CBCLASS FLVDecoderCreator +START_DISPATCH; +CB(CREATE_VIDEO_DECODER, CreateVideoDecoder) +CB(HANDLES_VIDEO, HandlesVideo) +END_DISPATCH; +#undef CBCLASS + +/* --- */ + +FLVSorenson::FLVSorenson(void *decoder) : decoder(decoder) +{ + last_timestamp=0; + width=0; + height=0; + decoded=0; +} + +int FLVSorenson::GetOutputFormat(int *x, int *y, int *color_format) +{ + if (width && height) + { + *x = width; + *y = height; + *color_format = '21VY'; + return FLV_VIDEO_SUCCESS; + } + return FLV_VIDEO_FAILURE; +} + +int FLVSorenson::DecodeSample(const void *inputBuffer, size_t inputBufferBytes, int32_t timestamp) +{ + last_timestamp = timestamp; + int keyframe; + + int ret = F263_DecodeFrame(decoder, const_cast<void *>(inputBuffer), inputBufferBytes, &yv12, &width, &height, &keyframe); + if (ret == F263_OK) + { + decoded=1; + return FLV_VIDEO_SUCCESS; + } + else + return FLV_VIDEO_FAILURE; +} + +void FLVSorenson::Flush() +{ +} + +void FLVSorenson::Close() +{ + if (decoder) + F263_DestroyDecoder(decoder); + delete this; +} + +int FLVSorenson::GetPicture(void **data, void **decoder_data, uint64_t *timestamp) +{ + if (decoded) + { + *timestamp = last_timestamp; + *decoder_data = 0; + *data = &yv12; + decoded=0; + return FLV_VIDEO_SUCCESS; + } + return FLV_VIDEO_FAILURE; +} + +#define CBCLASS FLVSorenson +START_DISPATCH; +CB(FLV_VIDEO_GETOUTPUTFORMAT, GetOutputFormat) +CB(FLV_VIDEO_DECODE, DecodeSample) +VCB(FLV_VIDEO_FLUSH, Flush) +VCB(FLV_VIDEO_CLOSE, Close) +CB(FLV_VIDEO_GET_PICTURE, GetPicture) +END_DISPATCH; +#undef CBCLASS diff --git a/Src/f263/flv_f263_decoder.h b/Src/f263/flv_f263_decoder.h new file mode 100644 index 00000000..341f27b2 --- /dev/null +++ b/Src/f263/flv_f263_decoder.h @@ -0,0 +1,39 @@ +#pragma once +#include "../Plugins/Input/in_flv/svc_flvdecoder.h" +#include "../Plugins/Input/in_flv/FLVVideoHeader.h" +#include "../Plugins/Input/in_flv/ifc_flvvideodecoder.h" +#include "../Winamp/wa_ipc.h" // for YV12_PLANES + +// {8E100A48-C03B-4453-A1FA-6B944FC23F6A} +static const GUID flv_h263_guid= +{ 0x8e100a48, 0xc03b, 0x4453, { 0xa1, 0xfa, 0x6b, 0x94, 0x4f, 0xc2, 0x3f, 0x6a } }; + +class FLVDecoderCreator : public svc_flvdecoder +{ +public: + static const char *getServiceName() { return "H.263 FLV Decoder"; } + static GUID getServiceGuid() { return flv_h263_guid; } + int CreateVideoDecoder(int format_type, int width, int height, ifc_flvvideodecoder **decoder); + int HandlesVideo(int format_type); +protected: + RECVS_DISPATCH; +}; + +class FLVSorenson : public ifc_flvvideodecoder +{ +public: + FLVSorenson(void *decoder); + int GetOutputFormat(int *x, int *y, int *color_format); + int DecodeSample(const void *inputBuffer, size_t inputBufferBytes, int32_t timestamp); + void Flush(); + void Close(); + int GetPicture(void **data, void **decoder_data, uint64_t *timestamp); +private: + void *decoder; + YV12_PLANES yv12; + int32_t last_timestamp; + int width, height; + int decoded; +protected: + RECVS_DISPATCH; +};
\ No newline at end of file diff --git a/Src/f263/idct.cpp b/Src/f263/idct.cpp new file mode 100644 index 00000000..80eb6040 --- /dev/null +++ b/Src/f263/idct.cpp @@ -0,0 +1,162 @@ +#include "idct.h" +#define W1 2841 /* 2048*sqrt(2)*cos(1*pi/16) */ +#define W2 2676 /* 2048*sqrt(2)*cos(2*pi/16) */ +#define W3 2408 /* 2048*sqrt(2)*cos(3*pi/16) */ +#define W5 1609 /* 2048*sqrt(2)*cos(5*pi/16) */ +#define W6 1108 /* 2048*sqrt(2)*cos(6*pi/16) */ +#define W7 565 /* 2048*sqrt(2)*cos(7*pi/16) */ + + +short IDCT::iclip[1024]; +short *IDCT::iclp=0; +bool IDCT::initted = false; + + +/* row (horizontal) IDCT + * + * 7 pi 1 + * dst[k] = sum c[l] * src[l] * cos( -- * ( k + - ) * l ) + * l=0 8 2 + * + * where: c[0] = 128 + * c[1..7] = 128*sqrt(2) + */ + +void IDCT::idctrow(short *blk) +{ + int x0, x1, x2, x3, x4, x5, x6, x7, x8; + + /* shortcut */ + if (!((x1 = blk[4]<<11) | (x2 = blk[6]) | (x3 = blk[2]) | + (x4 = blk[1]) | (x5 = blk[7]) | (x6 = blk[5]) | (x7 = blk[3]))) + { + blk[0]=blk[1]=blk[2]=blk[3]=blk[4]=blk[5]=blk[6]=blk[7]=blk[0]<<3; + return; + } + + x0 = (blk[0]<<11) + 128; /* for proper rounding in the fourth stage */ + + /* first stage */ + x8 = W7*(x4+x5); + x4 = x8 + (W1-W7)*x4; + x5 = x8 - (W1+W7)*x5; + x8 = W3*(x6+x7); + x6 = x8 - (W3-W5)*x6; + x7 = x8 - (W3+W5)*x7; + + /* second stage */ + x8 = x0 + x1; + x0 -= x1; + x1 = W6*(x3+x2); + x2 = x1 - (W2+W6)*x2; + x3 = x1 + (W2-W6)*x3; + x1 = x4 + x6; + x4 -= x6; + x6 = x5 + x7; + x5 -= x7; + + /* third stage */ + x7 = x8 + x3; + x8 -= x3; + x3 = x0 + x2; + x0 -= x2; + x2 = (181*(x4+x5)+128)>>8; + x4 = (181*(x4-x5)+128)>>8; + + /* fourth stage */ + blk[0] = (x7+x1)>>8; + blk[1] = (x3+x2)>>8; + blk[2] = (x0+x4)>>8; + blk[3] = (x8+x6)>>8; + blk[4] = (x8-x6)>>8; + blk[5] = (x0-x4)>>8; + blk[6] = (x3-x2)>>8; + blk[7] = (x7-x1)>>8; +} + +/* column (vertical) IDCT + * + * 7 pi 1 + * dst[8*k] = sum c[l] * src[8*l] * cos( -- * ( k + - ) * l ) + * l=0 8 2 + * + * where: c[0] = 1/1024 + * c[1..7] = (1/1024)*sqrt(2) + */ +void IDCT::idctcol(short *blk) +{ + int x0, x1, x2, x3, x4, x5, x6, x7, x8; + + /* shortcut */ + if (!((x1 = (blk[8*4]<<8)) | (x2 = blk[8*6]) | (x3 = blk[8*2]) | + (x4 = blk[8*1]) | (x5 = blk[8*7]) | (x6 = blk[8*5]) | (x7 = blk[8*3]))) + { + blk[8*0]=blk[8*1]=blk[8*2]=blk[8*3]=blk[8*4]=blk[8*5]=blk[8*6]=blk[8*7]= + iclp[(blk[8*0]+32)>>6]; + return; + } + + x0 = (blk[8*0]<<8) + 8192; + + /* first stage */ + x8 = W7*(x4+x5) + 4; + x4 = (x8+(W1-W7)*x4)>>3; + x5 = (x8-(W1+W7)*x5)>>3; + x8 = W3*(x6+x7) + 4; + x6 = (x8-(W3-W5)*x6)>>3; + x7 = (x8-(W3+W5)*x7)>>3; + + /* second stage */ + x8 = x0 + x1; + x0 -= x1; + x1 = W6*(x3+x2) + 4; + x2 = (x1-(W2+W6)*x2)>>3; + x3 = (x1+(W2-W6)*x3)>>3; + x1 = x4 + x6; + x4 -= x6; + x6 = x5 + x7; + x5 -= x7; + + /* third stage */ + x7 = x8 + x3; + x8 -= x3; + x3 = x0 + x2; + x0 -= x2; + x2 = (181*(x4+x5)+128)>>8; + x4 = (181*(x4-x5)+128)>>8; + + /* fourth stage */ + blk[8*0] = iclp[(x7+x1)>>14]; + blk[8*1] = iclp[(x3+x2)>>14]; + blk[8*2] = iclp[(x0+x4)>>14]; + blk[8*3] = iclp[(x8+x6)>>14]; + blk[8*4] = iclp[(x8-x6)>>14]; + blk[8*5] = iclp[(x0-x4)>>14]; + blk[8*6] = iclp[(x3-x2)>>14]; + blk[8*7] = iclp[(x7-x1)>>14]; +} + +/* two dimensional inverse discrete cosine transform */ +void IDCT::idct(short *block) +{ + int i; + + for (i=0; i<8; i++) + idctrow(block+8*i); + + for (i=0; i<8; i++) + idctcol(block+i); +} + +void IDCT::init() +{ + if (!initted) + { + int i; + + iclp = iclip+512; + for (i= -512; i<512; i++) + iclp[i] = (i<-256) ? -256 : ((i>255) ? 255 : i); + initted=true; + } +} diff --git a/Src/f263/idct.h b/Src/f263/idct.h new file mode 100644 index 00000000..a7c5676a --- /dev/null +++ b/Src/f263/idct.h @@ -0,0 +1,14 @@ +#pragma once + class IDCT + { + public: + void init(); + void idct(short *block); + private: + void idctcol(short *blk); + void idctrow(short *blk); + + static bool initted; + static short iclip[1024]; /* clipping table */ + static short *iclp; + };
\ No newline at end of file diff --git a/Src/f263/idctref.cpp b/Src/f263/idctref.cpp new file mode 100644 index 00000000..6bab912f --- /dev/null +++ b/Src/f263/idctref.cpp @@ -0,0 +1,66 @@ +#include "idctref.h" +#include <math.h> +#ifndef PI +# ifdef M_PI +# define PI M_PI +# else +# define PI 3.14159265358979323846 +# endif +#endif + + bool IDCTRef::initted = false; + double IDCTRef::c[8][8]; /* cosine transform matrix for 8x1 IDCT */ + + + /* initialize DCT coefficient matrix */ + + void IDCTRef::init() + { + if (!initted) + { + int freq, time; + + for (freq=0; freq < 8; freq++) + { + double scale = (freq == 0) ? sqrt(0.125) : 0.5; + for (time=0; time<8; time++) + c[freq][time] = scale*cos((PI/8.0)*freq*(time + 0.5)); + } + initted=true; + } + } + + /* perform IDCT matrix multiply for 8x8 coefficient block */ + + void IDCTRef::idct(short *block) + { + int i, j, k, v; + double partial_product; + double tmp[64]; + + for (i=0; i<8; i++) + for (j=0; j<8; j++) + { + partial_product = 0.0; + + for (k=0; k<8; k++) + partial_product+= c[k][j]*block[8*i+k]; + + tmp[8*i+j] = partial_product; + } + + /* Transpose operation is integrated into address mapping by switching + loop order of i and j */ + + for (j=0; j<8; j++) + for (i=0; i<8; i++) + { + partial_product = 0.0; + + for (k=0; k<8; k++) + partial_product+= c[k][i]*tmp[8*k+j]; + + v = (int)floor(partial_product+0.5); + block[8*i+j] = (v<-256) ? -256 : ((v>255) ? 255 : v); + } + } diff --git a/Src/f263/idctref.h b/Src/f263/idctref.h new file mode 100644 index 00000000..b6373c0c --- /dev/null +++ b/Src/f263/idctref.h @@ -0,0 +1,11 @@ +#pragma once +class IDCTRef + { + public: + void init(); + void idct(short *block); + private: + + static bool initted; + static double c[8][8]; /* cosine transform matrix for 8x1 IDCT */ + };
\ No newline at end of file diff --git a/Src/f263/impl_f263decoder.cpp b/Src/f263/impl_f263decoder.cpp new file mode 100644 index 00000000..bdf47204 --- /dev/null +++ b/Src/f263/impl_f263decoder.cpp @@ -0,0 +1,24 @@ +#include "impl_f263decoder.h" +#include "lib.h" + +F263Decoder::F263Decoder() : context(0) +{ + context = F263_CreateDecoder(); +} + +F263Decoder::~F263Decoder() +{ + if (context) + F263_DestroyDecoder(context); +} + +int F263Decoder::DecodeFrame(void *frameData, size_t frameSize, YV12_PLANES *yv12, int *width, int *height, int *keyframe) +{ + return F263_DecodeFrame(context, frameData, frameSize, yv12, width, height, keyframe); +} + +#define CBCLASS F263Decoder +START_DISPATCH; +CB(DISP_DECODEFRAME, DecodeFrame) +END_DISPATCH; +#undef CBCLASS
\ No newline at end of file diff --git a/Src/f263/impl_f263decoder.h b/Src/f263/impl_f263decoder.h new file mode 100644 index 00000000..399f1168 --- /dev/null +++ b/Src/f263/impl_f263decoder.h @@ -0,0 +1,15 @@ +#pragma once +#include "obj_f263decoder.h" + +class F263Decoder : public obj_f263decoder +{ +public: + F263Decoder(); + ~F263Decoder(); + int DecodeFrame(void *frameData, size_t frameSize, YV12_PLANES *yv12, int *width, int *height, int *keyframe); +protected: + RECVS_DISPATCH; + +private: + void *context; +};
\ No newline at end of file diff --git a/Src/f263/indices.cpp b/Src/f263/indices.cpp new file mode 100644 index 00000000..8551de09 --- /dev/null +++ b/Src/f263/indices.cpp @@ -0,0 +1,34 @@ +#include "indices.h" +int codtab[2]= {0,1}; + +int mcbpctab[21] = {0,16,32,48,1,17,33,49,2,18,34,50,3,19,35,51,4,20,36,52,255}; + +int mcbpc_intratab[9] = {3,19,35,51,4,20,36,52,255}; + +int modb_tab[3] = {0, 1, 2}; + +int ycbpb_tab[2] = {0, 1}; + +int uvcbpb_tab[2] = {0, 1}; + +int cbpytab[16] = {15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0}; + +int cbpy_intratab[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; + +int dquanttab[4] = {1,0,3,4}; + +int mvdtab[64] = {32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31}; + +int intradctab[254] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,255,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254}; + +int tcoeftab[103] = {1,2,3,4,5,6,7,8,9,10,11,12,17,18,19,20,21,22,33,34,35,36,49,50,51,65,66,67,81,82,83,97,98,99,113,114,129,130,145,146,161,162,177,193,209,225,241,257,273,289,305,321,337,353,369,385,401,417,4097,4098,4099,4113,4114,4129,4145,4161,4177,4193,4209,4225,4241,4257,4273,4289,4305,4321,4337,4353,4369,4385,4401,4417,4433,4449,4465,4481,4497,4513,4529,4545,4561,4577,4593,4609,4625,4641,4657,4673,4689,4705,4721,4737,7167}; + +int signtab[2] = {0,1}; + +int lasttab[2] = {0,1}; + +int last_intratab[2] = {0,1}; + +int runtab[64] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}; + +int leveltab[254] = {129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127}; diff --git a/Src/f263/indices.h b/Src/f263/indices.h new file mode 100644 index 00000000..f588778b --- /dev/null +++ b/Src/f263/indices.h @@ -0,0 +1,18 @@ +#pragma once +extern int codtab[]; +extern int mcbpctab[]; +extern int mcbpc_intratab[]; +extern int modb_tab[]; +extern int ycbpb_tab[]; +extern int uvcbpb_tab[]; +extern int cbpytab[]; +extern int cbpy_intratab[]; +extern int dquanttab[]; +extern int mvdtab[]; +extern int intradctab[]; +extern int tcoeftab[]; +extern int signtab[]; +extern int lasttab[]; +extern int last_intratab[]; +extern int runtab[]; +extern int leveltab[];
\ No newline at end of file diff --git a/Src/f263/lib.cpp b/Src/f263/lib.cpp new file mode 100644 index 00000000..fc72fab4 --- /dev/null +++ b/Src/f263/lib.cpp @@ -0,0 +1,27 @@ +#include "Decoder.h" +#include "lib.h" + +void *F263_CreateDecoder() +{ + return new Decoder; +} + +int F263_DecodeFrame(void *context, void *frameData, size_t frameSize, YV12_PLANES *yv12, int *width, int *height, int *keyframe) +{ + if (frameSize > 0x1FFFFFFF) + return F263_ERROR_TOO_MUCH_DATA; + + if (!frameData) + return F263_ERROR_NO_DATA; + + Decoder *decoder = (Decoder *)context; + decoder->buffer.data = (uint8_t *)frameData; + decoder->buffer.numBits = (uint32_t)(frameSize*8); + return decoder->DecodeFrame(yv12, width, height, keyframe); +} + +void F263_DestroyDecoder(void *context) +{ + Decoder *decoder = (Decoder *)context; + delete decoder; +} diff --git a/Src/f263/lib.h b/Src/f263/lib.h new file mode 100644 index 00000000..95a67184 --- /dev/null +++ b/Src/f263/lib.h @@ -0,0 +1,22 @@ +#ifndef NULLSOFT_F263_LIB_H +#define NULLSOFT_F263_LIB_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define F263_OK 0 +#define F263_ERROR_TOO_MUCH_DATA 2 +#define F263_ERROR_NO_DATA 3 + +#include "../Winamp/wa_ipc.h" + +void *F263_CreateDecoder(); +int F263_DecodeFrame(void *context, void *frameData, size_t frameSize, YV12_PLANES *yv12, int *width, int *height, int *keyframe); +void F263_DestroyDecoder(void *context); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Src/f263/mkv_f263_decoder.cpp b/Src/f263/mkv_f263_decoder.cpp new file mode 100644 index 00000000..a2c111f0 --- /dev/null +++ b/Src/f263/mkv_f263_decoder.cpp @@ -0,0 +1,94 @@ +#include "mkv_f263_decoder.h" +#include "lib.h" + +int MKVDecoderCreator::CreateVideoDecoder(const char *codec_id, const nsmkv::TrackEntryData *track_entry_data, const nsmkv::VideoData *video_data, ifc_mkvvideodecoder **decoder) +{ + if (!strcmp(codec_id, "V_MS/VFW/FOURCC")) + { + if (track_entry_data->codec_private && track_entry_data->codec_private_len) + { + const BITMAPINFOHEADER *header = (const BITMAPINFOHEADER *)track_entry_data->codec_private; + if (header->biCompression == '1VLF') + { + void *ctx = F263_CreateDecoder(); + *decoder = new MKVFLV1(ctx); + return CREATEDECODER_SUCCESS; + } + } + return CREATEDECODER_NOT_MINE; + } + else + { + return CREATEDECODER_NOT_MINE; + } +} + + +#define CBCLASS MKVDecoderCreator +START_DISPATCH; +CB(CREATE_VIDEO_DECODER, CreateVideoDecoder) +END_DISPATCH; +#undef CBCLASS + + + +MKVFLV1::MKVFLV1(void *ctx) : decoder(ctx) +{ + +} + +int MKVFLV1::GetOutputProperties(int *x, int *y, int *color_format, double *aspect_ratio) +{ + if (width && height) + { + *x = width; + *y = height; + *color_format = '21VY'; + *aspect_ratio=1.0; + return MKV_SUCCESS; + } + return MKV_FAILURE; +} + +int MKVFLV1::DecodeBlock(const void *inputBuffer, size_t inputBufferBytes, uint64_t timestamp) +{ + last_timestamp = (int32_t)timestamp; + int keyframe; + + int ret = F263_DecodeFrame(decoder, const_cast<void *>(inputBuffer), inputBufferBytes, &yv12, &width, &height, &keyframe); + if (ret == F263_OK) + { + decoded=1; + return MKV_SUCCESS; + } + else + return MKV_FAILURE; +} + +void MKVFLV1::Flush() +{ +} + +int MKVFLV1::GetPicture(void **data, void **decoder_data, uint64_t *timestamp) +{ + if (decoded) + { + *timestamp = last_timestamp; + *decoder_data = 0; + *data = &yv12; + decoded=0; + return MKV_SUCCESS; + } + return MKV_FAILURE; +} + + +#define CBCLASS MKVFLV1 +START_DISPATCH; +CB(GET_OUTPUT_PROPERTIES, GetOutputProperties) +CB(DECODE_BLOCK, DecodeBlock) +VCB(FLUSH, Flush) +CB(GET_PICTURE, GetPicture) +END_DISPATCH; +#undef CBCLASS + diff --git a/Src/f263/mkv_f263_decoder.h b/Src/f263/mkv_f263_decoder.h new file mode 100644 index 00000000..984ef6a3 --- /dev/null +++ b/Src/f263/mkv_f263_decoder.h @@ -0,0 +1,38 @@ +#pragma once +#include "../Plugins/Input/in_mkv/ifc_mkvvideodecoder.h" +#include "../Plugins/Input/in_mkv/svc_mkvdecoder.h" +#include "../winamp/wa_ipc.h" + +// {0071721C-7B4D-4766-B165-E42BC080DA74} +static const GUID mkv_flv1_guid = +{ 0x71721c, 0x7b4d, 0x4766, { 0xb1, 0x65, 0xe4, 0x2b, 0xc0, 0x80, 0xda, 0x74 } }; + + +class MKVDecoderCreator : public svc_mkvdecoder +{ +public: + static const char *getServiceName() { return "FLV1 MKV Decoder"; } + static GUID getServiceGuid() { return mkv_flv1_guid; } + int CreateVideoDecoder(const char *codec_id, const nsmkv::TrackEntryData *track_entry_data, const nsmkv::VideoData *video_data, ifc_mkvvideodecoder **decoder); +protected: + RECVS_DISPATCH; +}; + + +class MKVFLV1 : public ifc_mkvvideodecoder +{ + public: + MKVFLV1(void *decoder); + int GetOutputProperties(int *x, int *y, int *color_format, double *aspect_ratio); + int DecodeBlock(const void *inputBuffer, size_t inputBufferBytes, uint64_t timestamp); + void Flush(); + int GetPicture(void **data, void **decoder_data, uint64_t *timestamp); +private: + void *decoder; + YV12_PLANES yv12; + int32_t last_timestamp; + int width, height; + int decoded; +protected: + RECVS_DISPATCH; +};
\ No newline at end of file diff --git a/Src/f263/obj_f263decoder.h b/Src/f263/obj_f263decoder.h new file mode 100644 index 00000000..e2e6c5b5 --- /dev/null +++ b/Src/f263/obj_f263decoder.h @@ -0,0 +1,37 @@ +#ifndef F263_OBJ_F263DECODER_H +#define F263_OBJ_F263DECODER_H + +#include <bfc/dispatch.h> +#include <bfc/platform/types.h> +struct YV12_PLANES; +class obj_f263decoder : public Dispatchable +{ +protected: + obj_f263decoder() {} + ~obj_f263decoder() {} +public: + int DecodeFrame(void *frameData, size_t frameSize, YV12_PLANES *yv12, int *width, int *height, int *keyframe); + + enum + { + DISP_DECODEFRAME = 0, + }; + enum + { + SUCCESS = 0, + FAILURE = 1, + FAILURE_TOO_MUCH_DATA = 2, + FAILURE_NO_DATA = 3, + }; +}; + +inline int obj_f263decoder::DecodeFrame(void *frameData, size_t frameSize, YV12_PLANES *yv12, int *width, int *height, int *keyframe) +{ + return _call(DISP_DECODEFRAME, (int)FAILURE, frameData, frameSize, yv12, width, height, keyframe); +} + +// {496FA082-39F0-424e-9B25-1B234262796D} +static const GUID obj_f263decoderGUID = +{ 0x496fa082, 0x39f0, 0x424e, { 0x9b, 0x25, 0x1b, 0x23, 0x42, 0x62, 0x79, 0x6d } }; + +#endif
\ No newline at end of file diff --git a/Src/f263/resource.h b/Src/f263/resource.h new file mode 100644 index 00000000..5f6f5205 --- /dev/null +++ b/Src/f263/resource.h @@ -0,0 +1,14 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by f263.w5s.rc + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 101 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/Src/f263/version.rc2 b/Src/f263/version.rc2 new file mode 100644 index 00000000..47d8b576 --- /dev/null +++ b/Src/f263/version.rc2 @@ -0,0 +1,39 @@ + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// +#include "../Winamp/buildType.h" +VS_VERSION_INFO VERSIONINFO + FILEVERSION WINAMP_PRODUCTVER + PRODUCTVERSION WINAMP_PRODUCTVER + FILEFLAGSMASK 0x17L +#ifdef _DEBUG + FILEFLAGS 0x1L +#else + FILEFLAGS 0x0L +#endif + FILEOS 0x4L + FILETYPE 0x2L + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904b0" + BEGIN + VALUE "CompanyName", "Winamp SA" + VALUE "FileDescription", "Winamp 5.x System Component" + VALUE "FileVersion", STR_WINAMP_PRODUCTVER + VALUE "InternalName", "f263.w5s" + VALUE "LegalCopyright", "Copyright © 2005-2023 Winamp SA" + VALUE "LegalTrademarks", "Nullsoft and Winamp are trademarks of Winamp SA" + VALUE "OriginalFilename", "f263.w5s" + VALUE "ProductName", "Winamp F263 Decoder Service" + VALUE "ProductVersion", STR_WINAMP_PRODUCTVER + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1200 + END +END diff --git a/Src/f263/vlc.cpp b/Src/f263/vlc.cpp new file mode 100644 index 00000000..6d645465 --- /dev/null +++ b/Src/f263/vlc.cpp @@ -0,0 +1,187 @@ +#include "Decoder.h" +#include "vlc_table.h" + +static int PRED_type_EP[] = {0,0,1,1,1,2,2,2,3,3}; +static int QUANT_present_EP[] = {0,1,0,0,1,0,0,1,0,1}; +static int CBP_present_EP[] = {1,1,0,1,1,0,1,1,1,1}; +static VLCtab MBTYPEtabEP[] = { +{-1,0}, {9,8}, {8,7}, {8,7}, {7,6}, {7,6}, {7,6}, {7,6}, +{4,5}, {4,5}, {4,5}, {4,5}, {4,5}, {4,5}, {4,5}, {4,5}, +{5,5}, {5,5}, {5,5}, {5,5}, {5,5}, {5,5}, {5,5}, {5,5}, +{6,5}, {6,5}, {6,5}, {6,5}, {6,5}, {6,5}, {6,5}, {6,5}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3} +}; +static int PRED_type_B[] = {0,0,1,1,1,2,2,2,3,3,3,4,4}; +static int QUANT_present_B[] = {0,1,0,0,1,0,0,1,0,0,1,0,1}; +static int CBPC_pattern_EI[] = {0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3}; +static int CBP_present_B[] = {1,1,0,1,1,0,1,1,0,1,1,1,1}; +static VLCtab MBTYPEtabB[] = { +{-1,0}, {12,7}, {11,6}, {11,6}, {10,5}, {10,5}, {10,5}, {10,5}, +{1,4}, {1,4}, {1,4}, {1,4}, {1,4}, {1,4}, {1,4}, {1,4}, +{8,5}, {8,5}, {8,5}, {8,5}, {9,5}, {9,5}, {9,5}, {9,5}, +{4,5}, {4,5}, {4,5}, {4,5}, {7,5}, {7,5}, {7,5}, {7,5}, +{5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, +{5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, {5,3}, +{6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, +{6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, {6,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3} +}; + +static int QUANT_present_EI[] = {0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1}; +static VLCtab MBTYPEtabEI[] = { +{-1,0}, {8,8}, {5,7}, {5,7}, {6,7}, {6,7}, {7,7}, {7,7}, +{-1,0}, {9,8}, {10,8}, {11,8}, {12,8}, {13,8}, {14,8}, {15,8}, +{4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, +{4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, {4,4}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, +{3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3}, {3,3} +}; + +static int PRED_type_EI[] = {1,1,1,1,1,1,1,1,3,3,3,3,3,3,3,3}; + +int Decoder::getTMNMV() +{ + int code; + + if (buffer.getbits1()) + { + return 0; + } + + if ((code = buffer.showbits(12))>=512) + { + code = (code>>8) - 2; + buffer.flushbits(TMNMVtab0[code].len); + + return TMNMVtab0[code].val; + } + + if (code>=128) + { + code = (code>>2) -32; + buffer.flushbits(TMNMVtab1[code].len); + + + return TMNMVtab1[code].val; + } + + if ((code-=5)<0) + { + fault=1; + return 0; + } + + buffer.flushbits(TMNMVtab2[code].len); + + return TMNMVtab2[code].val; +} + + +int Decoder::getMCBPC() +{ + int code; + + code = buffer.showbits (13); + + if (code >> 4 == 1) + { + /* macroblock stuffing */ + buffer.flushbits (9); + return 255; + } + if (code == 0) + { + fault = 1; + return 0; + } + if (code >= 4096) + { + buffer.flushbits (1); + return 0; + } + if (code >= 16) + { + buffer.flushbits (MCBPCtab0[code >> 4].len); + return MCBPCtab0[code >> 4].val; + } + else + { + buffer.flushbits (MCBPCtab1[code - 8].len); + return MCBPCtab1[code - 8].val; + } +} + +int Decoder::getMCBPCintra() +{ + int code; + + code = buffer.showbits(9); + + if (code == 1) { + /* macroblock stuffing */ + buffer.flushbits(9); + return 255; + } + + if (code < 8) { + fault = 1; + return 0; + } + + code >>= 3; + + if (code>=32) + { + buffer.flushbits(1); + return 3; + } + + buffer.flushbits(MCBPCtabintra[code].len); + + return MCBPCtabintra[code].val; +} + +int Decoder::getCBPY() +{ + int code; + + code = buffer.showbits(6); + if (code < 2) { + fault = 1; + return -1; + } + + if (code>=48) + { + buffer.flushbits(2); + return 0; + } + + buffer.flushbits(CBPYtab[code].len); + + return CBPYtab[code].val; +} diff --git a/Src/f263/vlc_table.cpp b/Src/f263/vlc_table.cpp new file mode 100644 index 00000000..22a2cd87 --- /dev/null +++ b/Src/f263/vlc_table.cpp @@ -0,0 +1,66 @@ +#include "vlc_table.h" + +VLCtab DCT3Dtab0[] = { +{4225,7}, {4209,7}, {4193,7}, {4177,7}, {193,7}, {177,7}, +{161,7}, {4,7}, {4161,6}, {4161,6}, {4145,6}, {4145,6}, +{4129,6}, {4129,6}, {4113,6}, {4113,6}, {145,6}, {145,6}, +{129,6}, {129,6}, {113,6}, {113,6}, {97,6}, {97,6}, +{18,6}, {18,6}, {3,6}, {3,6}, {81,5}, {81,5}, +{81,5}, {81,5}, {65,5}, {65,5}, {65,5}, {65,5}, +{49,5}, {49,5}, {49,5}, {49,5}, {4097,4}, {4097,4}, +{4097,4}, {4097,4}, {4097,4}, {4097,4}, {4097,4}, {4097,4}, +{1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, +{1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, +{1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, +{1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, +{1,2}, {1,2}, {1,2}, {1,2}, {1,2}, {1,2}, +{1,2}, {1,2}, {17,3}, {17,3}, {17,3}, {17,3}, +{17,3}, {17,3}, {17,3}, {17,3}, {17,3}, {17,3}, +{17,3}, {17,3}, {17,3}, {17,3}, {17,3}, {17,3}, +{33,4}, {33,4}, {33,4}, {33,4}, {33,4}, {33,4}, +{33,4}, {33,4}, {2,4}, {2,4},{2,4},{2,4}, +{2,4}, {2,4},{2,4},{2,4}, +}; + + +VLCtab DCT3Dtab1[] = { +{9,10}, {8,10}, {4481,9}, {4481,9}, {4465,9}, {4465,9}, +{4449,9}, {4449,9}, {4433,9}, {4433,9}, {4417,9}, {4417,9}, +{4401,9}, {4401,9}, {4385,9}, {4385,9}, {4369,9}, {4369,9}, +{4098,9}, {4098,9}, {353,9}, {353,9}, {337,9}, {337,9}, +{321,9}, {321,9}, {305,9}, {305,9}, {289,9}, {289,9}, +{273,9}, {273,9}, {257,9}, {257,9}, {241,9}, {241,9}, +{66,9}, {66,9}, {50,9}, {50,9}, {7,9}, {7,9}, +{6,9}, {6,9}, {4353,8}, {4353,8}, {4353,8}, {4353,8}, +{4337,8}, {4337,8}, {4337,8}, {4337,8}, {4321,8}, {4321,8}, +{4321,8}, {4321,8}, {4305,8}, {4305,8}, {4305,8}, {4305,8}, +{4289,8}, {4289,8}, {4289,8}, {4289,8}, {4273,8}, {4273,8}, +{4273,8}, {4273,8}, {4257,8}, {4257,8}, {4257,8}, {4257,8}, +{4241,8}, {4241,8}, {4241,8}, {4241,8}, {225,8}, {225,8}, +{225,8}, {225,8}, {209,8}, {209,8}, {209,8}, {209,8}, +{34,8}, {34,8}, {34,8}, {34,8}, {19,8}, {19,8}, +{19,8}, {19,8}, {5,8}, {5,8}, {5,8}, {5,8}, +}; + +VLCtab DCT3Dtab2[] = { +{4114,11}, {4114,11}, {4099,11}, {4099,11}, {11,11}, {11,11}, +{10,11}, {10,11}, {4545,10}, {4545,10}, {4545,10}, {4545,10}, +{4529,10}, {4529,10}, {4529,10}, {4529,10}, {4513,10}, {4513,10}, +{4513,10}, {4513,10}, {4497,10}, {4497,10}, {4497,10}, {4497,10}, +{146,10}, {146,10}, {146,10}, {146,10}, {130,10}, {130,10}, +{130,10}, {130,10}, {114,10}, {114,10}, {114,10}, {114,10}, +{98,10}, {98,10}, {98,10}, {98,10}, {82,10}, {82,10}, +{82,10}, {82,10}, {51,10}, {51,10}, {51,10}, {51,10}, +{35,10}, {35,10}, {35,10}, {35,10}, {20,10}, {20,10}, +{20,10}, {20,10}, {12,11}, {12,11}, {21,11}, {21,11}, +{369,11}, {369,11}, {385,11}, {385,11}, {4561,11}, {4561,11}, +{4577,11}, {4577,11}, {4593,11}, {4593,11}, {4609,11}, {4609,11}, +{22,12}, {36,12}, {67,12}, {83,12}, {99,12}, {162,12}, +{401,12}, {417,12}, {4625,12}, {4641,12}, {4657,12}, {4673,12}, +{4689,12}, {4705,12}, {4721,12}, {4737,12}, {7167,7}, +{7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, +{7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, +{7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, +{7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, +{7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, {7167,7}, +{7167,7}, }; diff --git a/Src/f263/vlc_table.h b/Src/f263/vlc_table.h new file mode 100644 index 00000000..5518ca83 --- /dev/null +++ b/Src/f263/vlc_table.h @@ -0,0 +1,153 @@ +#pragma once + +typedef struct { + int val, len; +} VLCtab; + +typedef struct { + char run, level, len; +} DCTtab; + + +static VLCtab TMNMVtab0[] = { +{3,4}, {61,4}, {2,3}, {2,3}, {62,3}, {62,3}, +{1,2}, {1,2}, {1,2}, {1,2}, {63,2}, {63,2}, {63,2}, {63,2} +}; + +static VLCtab TMNMVtab1[] = { +{12,10}, {52,10}, {11,10}, {53,10}, {10,9}, {10,9}, +{54,9}, {54,9}, {9,9}, {9,9}, {55,9}, {55,9}, +{8,9}, {8,9}, {56,9}, {56,9}, {7,7}, {7,7}, +{7,7}, {7,7}, {7,7}, {7,7}, {7,7}, {7,7}, +{57,7}, {57,7}, {57,7}, {57,7}, {57,7}, {57,7}, +{57,7}, {57,7}, {6,7}, {6,7}, {6,7}, {6,7}, +{6,7}, {6,7}, {6,7}, {6,7}, {58,7}, {58,7}, +{58,7}, {58,7}, {58,7}, {58,7}, {58,7}, {58,7}, +{5,7}, {5,7}, {5,7}, {5,7}, {5,7}, {5,7}, +{5,7}, {5,7}, {59,7}, {59,7}, {59,7}, {59,7}, +{59,7}, {59,7}, {59,7}, {59,7}, {4,6}, {4,6}, +{4,6}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, +{4,6}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, +{4,6}, {4,6}, {60,6}, {60,6},{60,6},{60,6}, +{60,6},{60,6},{60,6},{60,6},{60,6},{60,6}, +{60,6},{60,6},{60,6},{60,6},{60,6},{60,6} +}; + +static VLCtab TMNMVtab2[] = { +{32,12}, {31,12}, {33,12}, {30,11}, {30,11}, {34,11}, +{34,11}, {29,11}, {29,11}, {35,11}, {35,11}, {28,11}, +{28,11}, {36,11}, {36,11}, {27,11}, {27,11}, {37,11}, +{37,11}, {26,11}, {26,11}, {38,11}, {38,11}, {25,11}, +{25,11}, {39,11}, {39,11}, {24,10}, {24,10}, {24,10}, +{24,10}, {40,10}, {40,10}, {40,10}, {40,10}, {23,10}, +{23,10}, {23,10}, {23,10}, {41,10}, {41,10}, {41,10}, +{41,10}, {22,10}, {22,10}, {22,10}, {22,10}, {42,10}, +{42,10}, {42,10}, {42,10}, {21,10}, {21,10}, {21,10}, +{21,10}, {43,10}, {43,10}, {43,10}, {43,10}, {20,10}, +{20,10}, {20,10}, {20,10}, {44,10}, {44,10}, {44,10}, +{44,10}, {19,10}, {19,10}, {19,10}, {19,10}, {45,10}, +{45,10}, {45,10}, {45,10}, {18,10}, {18,10}, {18,10}, +{18,10}, {46,10}, {46,10}, {46,10}, {46,10}, {17,10}, +{17,10}, {17,10}, {17,10}, {47,10}, {47,10}, {47,10}, +{47,10}, {16,10}, {16,10}, {16,10}, {16,10}, {48,10}, +{48,10}, {48,10}, {48,10}, {15,10}, {15,10}, {15,10}, +{15,10}, {49,10}, {49,10}, {49,10}, {49,10}, {14,10}, +{14,10}, {14,10}, {14,10}, {50,10}, {50,10}, {50,10}, +{50,10}, {13,10}, {13,10}, {13,10}, {13,10}, {51,10}, +{51,10}, {51,10}, {51,10} +}; + + +static VLCtab MCBPCtab[] = { +{-1,0}, +{255,9}, {52,9}, {36,9}, {20,9}, {49,9}, {35,8}, {35,8}, {19,8}, {19,8}, +{50,8}, {50,8}, {51,7}, {51,7}, {51,7}, {51,7}, {34,7}, {34,7}, {34,7}, +{34,7}, {18,7}, {18,7}, {18,7}, {18,7}, {33,7}, {33,7}, {33,7}, {33,7}, +{17,7}, {17,7}, {17,7}, {17,7}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, +{4,6}, {4,6}, {4,6}, {48,6}, {48,6}, {48,6}, {48,6}, {48,6}, {48,6}, +{48,6}, {48,6}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, +{3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, +{32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, +{32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, +{32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, +{32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {16,4}, {16,4}, {16,4}, {16,4}, +{16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, +{16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, +{16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, +{16,4}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, +}; + +static VLCtab MCBPCtabintra[] = { +{-1,0}, +{20,6}, {36,6}, {52,6}, {4,4}, {4,4}, {4,4}, +{4,4}, {19,3}, {19,3}, {19,3}, {19,3}, {19,3}, +{19,3}, {19,3}, {19,3}, {35,3}, {35,3}, {35,3}, +{35,3}, {35,3}, {35,3}, {35,3}, {35,3}, {51,3}, +{51,3}, {51,3}, {51,3}, {51,3}, {51,3}, {51,3}, +{51,3}, +}; + +static VLCtab CBPYtab[48] = +{ {-1,0}, {-1,0}, {9,6}, {6,6}, {7,5}, {7,5}, {11,5}, {11,5}, + {13,5}, {13,5}, {14,5}, {14,5}, {15,4}, {15,4}, {15,4}, {15,4}, + {3,4}, {3,4}, {3,4}, {3,4}, {5,4},{5,4},{5,4},{5,4}, + {1,4}, {1,4}, {1,4}, {1,4}, {10,4}, {10,4}, {10,4}, {10,4}, + {2,4}, {2,4}, {2,4}, {2,4}, {12,4}, {12,4}, {12,4}, {12,4}, + {4,4}, {4,4}, {4,4}, {4,4}, {8,4}, {8,4}, {8,4}, {8,4}, +}; + +extern VLCtab DCT3Dtab0[]; +extern VLCtab DCT3Dtab1[]; +extern VLCtab DCT3Dtab2[]; + +static VLCtab MCBPCtab0[] = { +{-1,0}, +{255,9}, {52,9}, {36,9}, {20,9}, {49,9}, {35,8}, {35,8}, {19,8}, {19,8}, +{50,8}, {50,8}, {51,7}, {51,7}, {51,7}, {51,7}, {34,7}, {34,7}, {34,7}, +{34,7}, {18,7}, {18,7}, {18,7}, {18,7}, {33,7}, {33,7}, {33,7}, {33,7}, +{17,7}, {17,7}, {17,7}, {17,7}, {4,6}, {4,6}, {4,6}, {4,6}, {4,6}, +{4,6}, {4,6}, {4,6}, {48,6}, {48,6}, {48,6}, {48,6}, {48,6}, {48,6}, +{48,6}, {48,6}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, +{3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, {3,5}, +{32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, +{32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, +{32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {32,4}, +{32,4}, {32,4}, {32,4}, {32,4}, {32,4}, {16,4}, {16,4}, {16,4}, {16,4}, +{16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, +{16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, +{16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, {16,4}, +{16,4}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, {2,3}, +{2,3}, {2,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, {1,3}, +{1,3}, {1,3}, {1,3}, +}; + +static VLCtab MCBPCtab1[] = { +{5,11}, {5,11}, {5,11}, {5,11}, {21,13}, {21,13}, {37,13}, {53,13}, +}; + diff --git a/Src/f263/w5s.cpp b/Src/f263/w5s.cpp new file mode 100644 index 00000000..ff652d97 --- /dev/null +++ b/Src/f263/w5s.cpp @@ -0,0 +1,58 @@ +/* copyright 2008 Ben Allison */ +#include "../Agave/Component/ifc_wa5component.h" +#include "factory_f263.h" +#include "flv_f263_decoder.h" +#include "mkv_f263_decoder.h" +#include "../nu/Singleton.h" + +class WA5_F263 : public ifc_wa5component +{ +public: + void RegisterServices(api_service *service); + int RegisterServicesSafeModeOk(); + void DeregisterServices(api_service *service); +protected: + RECVS_DISPATCH; +}; + +api_service *serviceManager=0; + +WA5_F263 wa5_f263; +F263Factory f263Factory; +static FLVDecoderCreator flvCreator; +static SingletonServiceFactory<svc_flvdecoder, FLVDecoderCreator> flvFactory; +static MKVDecoderCreator mkvCreator; +static SingletonServiceFactory<svc_mkvdecoder, MKVDecoderCreator> mkvFactory; +void WA5_F263::RegisterServices(api_service *service) +{ + WASABI_API_SVC = service; + + WASABI_API_SVC->service_register(&f263Factory); + flvFactory.Register(WASABI_API_SVC, &flvCreator); + mkvFactory.Register(WASABI_API_SVC, &mkvCreator); +} + +int WA5_F263::RegisterServicesSafeModeOk() +{ + return 1; +} + +void WA5_F263::DeregisterServices(api_service *service) +{ + service->service_deregister(&f263Factory); + flvFactory.Deregister(WASABI_API_SVC); + mkvFactory.Deregister(WASABI_API_SVC); +} + +extern "C" __declspec(dllexport) ifc_wa5component *GetWinamp5SystemComponent() +{ + return &wa5_f263; +} + +#define CBCLASS WA5_F263 +START_DISPATCH; +VCB(API_WA5COMPONENT_REGISTERSERVICES, RegisterServices) +CB(15, RegisterServicesSafeModeOk) +VCB(API_WA5COMPONENT_DEREEGISTERSERVICES, DeregisterServices) +END_DISPATCH; +#undef CBCLASS
\ No newline at end of file |