mirror of
https://github.com/ultravideo/uvg266.git
synced 2024-11-27 19:24:06 +00:00
byte-order fix
This commit is contained in:
parent
a56a1c9aa6
commit
e202eb2f91
|
@ -20,6 +20,8 @@
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
#include "bitstream.h"
|
#include "bitstream.h"
|
||||||
|
|
||||||
|
//#define VERBOSE
|
||||||
|
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
void printf_bitstream(char *msg, ...)
|
void printf_bitstream(char *msg, ...)
|
||||||
{
|
{
|
||||||
|
@ -32,7 +34,7 @@ void printf_bitstream(char *msg, ...)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
bitTable *exp_table;
|
bitTable *g_exp_table;
|
||||||
|
|
||||||
//From wikipedia
|
//From wikipedia
|
||||||
//http://en.wikipedia.org/wiki/Binary_logarithm#Algorithm
|
//http://en.wikipedia.org/wiki/Binary_logarithm#Algorithm
|
||||||
|
@ -52,14 +54,14 @@ void init_exp_golomb(uint32_t len)
|
||||||
uint32_t code_num;
|
uint32_t code_num;
|
||||||
uint32_t M;
|
uint32_t M;
|
||||||
uint32_t info;
|
uint32_t info;
|
||||||
exp_table=(bitTable*)malloc(len*sizeof(bitTable));
|
g_exp_table=(bitTable*)malloc(len*sizeof(bitTable));
|
||||||
|
|
||||||
for(code_num=0;code_num<len;code_num++)
|
for(code_num=0;code_num<len;code_num++)
|
||||||
{
|
{
|
||||||
M=(uint32_t)floorLog2(code_num+1);
|
M=(uint32_t)floorLog2(code_num+1);
|
||||||
info=code_num+1-(uint32_t)pow(2,M);
|
info=code_num+1-(uint32_t)pow(2,M);
|
||||||
exp_table[code_num].len=M*2+1;
|
g_exp_table[code_num].len=M*2+1;
|
||||||
exp_table[code_num].value=(1<<M)|info;
|
g_exp_table[code_num].value=(1<<M)|info;
|
||||||
//printf_cavlc("Len: %i %x\n", M*2+1, (1<<M)|info);
|
//printf_cavlc("Len: %i %x\n", M*2+1, (1<<M)|info);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,7 +73,6 @@ void bitstream_init(bitstream* stream)
|
||||||
{
|
{
|
||||||
stream->cur_byte=0;
|
stream->cur_byte=0;
|
||||||
stream->cur_bit=0;
|
stream->cur_bit=0;
|
||||||
stream->output = 0;
|
|
||||||
memset(stream->data, 0, sizeof(uint32_t)*32);
|
memset(stream->data, 0, sizeof(uint32_t)*32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -97,9 +98,9 @@ void bitstream_alloc(bitstream* stream, uint32_t alloc)
|
||||||
|
|
||||||
void bitstream_put(bitstream* stream, uint32_t data, uint8_t bits)
|
void bitstream_put(bitstream* stream, uint32_t data, uint8_t bits)
|
||||||
{
|
{
|
||||||
uint8_t i=0;
|
|
||||||
uint32_t bitsleft=32-stream->cur_bit;
|
uint32_t bitsleft=32-stream->cur_bit;
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
|
uint8_t i=0;
|
||||||
printf_bitstream("put: ");
|
printf_bitstream("put: ");
|
||||||
for(i=0;i<bits;i++)
|
for(i=0;i<bits;i++)
|
||||||
{
|
{
|
||||||
|
@ -127,8 +128,9 @@ void bitstream_put(bitstream* stream, uint32_t data, uint8_t bits)
|
||||||
//Check if the buffer is full
|
//Check if the buffer is full
|
||||||
if(stream->cur_bit==32)
|
if(stream->cur_bit==32)
|
||||||
{
|
{
|
||||||
stream->cur_byte++;
|
|
||||||
bitsleft=32;
|
bitsleft=32;
|
||||||
|
stream->cur_byte++;
|
||||||
|
stream->cur_bit = 0;
|
||||||
if(stream->cur_byte==32)
|
if(stream->cur_byte==32)
|
||||||
{
|
{
|
||||||
//Flush data out
|
//Flush data out
|
||||||
|
@ -152,7 +154,7 @@ void bitstream_put(bitstream* stream, uint32_t data, uint8_t bits)
|
||||||
*/
|
*/
|
||||||
void bitstream_align(bitstream* stream)
|
void bitstream_align(bitstream* stream)
|
||||||
{
|
{
|
||||||
if(stream->cur_bit&7 != 0)
|
if((stream->cur_bit&7) != 0)
|
||||||
{
|
{
|
||||||
bitstream_put(stream,0, 8-stream->cur_bit&7);
|
bitstream_put(stream,0, 8-stream->cur_bit&7);
|
||||||
}
|
}
|
||||||
|
@ -163,11 +165,12 @@ void bitstream_flush(bitstream* stream)
|
||||||
/*
|
/*
|
||||||
* SAVE DATA TO OUTPUT
|
* SAVE DATA TO OUTPUT
|
||||||
*/
|
*/
|
||||||
|
int i,j;
|
||||||
if(stream->output)
|
if(stream->output)
|
||||||
{
|
{
|
||||||
if(stream->cur_byte)
|
if(stream->cur_byte)
|
||||||
{
|
{
|
||||||
fwrite(stream->data, stream->cur_byte*4, 1, stream->output);
|
fwrite(&stream->data[0], stream->cur_byte*4, 1, stream->output);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(stream->cur_bit>>3)
|
if(stream->cur_bit>>3)
|
||||||
|
@ -175,17 +178,25 @@ void bitstream_flush(bitstream* stream)
|
||||||
fwrite(&stream->data[stream->cur_byte], stream->cur_bit>>3, 1, stream->output);
|
fwrite(&stream->data[stream->cur_byte], stream->cur_bit>>3, 1, stream->output);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* No file open, write to buffer */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if(stream->cur_byte)
|
if(stream->cur_byte)
|
||||||
{
|
{
|
||||||
memcpy(&stream->buffer[stream->buffer_pos],&stream->data[0],stream->cur_byte*4);
|
//memcpy((uint8_t*)&stream->buffer[stream->buffer_pos],(uint8_t*)stream->data,stream->cur_byte*4);
|
||||||
|
|
||||||
|
for(i = 0,j=3; i < stream->cur_byte*4; i++,j--)
|
||||||
|
{
|
||||||
|
if(j == -1) j = 3;
|
||||||
|
stream->buffer[stream->buffer_pos+i] = ((uint8_t*)stream->data)[((i>>2)<<2)+j];
|
||||||
|
}
|
||||||
|
|
||||||
stream->buffer_pos += stream->cur_byte*4;
|
stream->buffer_pos += stream->cur_byte*4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(stream->cur_bit>>3)
|
if(stream->cur_bit>>3)
|
||||||
{
|
{
|
||||||
memcpy(&stream->buffer[stream->buffer_pos],&stream->data[stream->cur_byte],stream->cur_bit>>3);
|
memcpy((uint8_t*)&stream->buffer[stream->buffer_pos],(uint8_t*)&stream->data[stream->cur_byte],stream->cur_bit>>3);
|
||||||
stream->buffer_pos += stream->cur_bit>>3;
|
stream->buffer_pos += stream->cur_bit>>3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ typedef struct
|
||||||
uint32_t value;
|
uint32_t value;
|
||||||
}bitTable;
|
}bitTable;
|
||||||
|
|
||||||
extern bitTable *exp_table;
|
extern bitTable *g_exp_table;
|
||||||
|
|
||||||
int floorLog2(unsigned int n);
|
int floorLog2(unsigned int n);
|
||||||
|
|
||||||
|
@ -36,9 +36,9 @@ void bitstream_put(bitstream* stream, uint32_t data, uint8_t bits);
|
||||||
void bitstream_put_ue(bitstream* stream, uint32_t data);
|
void bitstream_put_ue(bitstream* stream, uint32_t data);
|
||||||
void bitstream_put_se(bitstream* stream, uint32_t data);
|
void bitstream_put_se(bitstream* stream, uint32_t data);
|
||||||
*/
|
*/
|
||||||
#define bitstream_put_ue(stream, data) { bitstream_put(stream,exp_table[data].value,exp_table[data].len); }
|
#define bitstream_put_ue(stream, data) { bitstream_put(stream,g_exp_table[data].value,g_exp_table[data].len); }
|
||||||
#define bitstream_put_se(stream, data) { uint32_t index=(data<=0)?2*(uint32_t)(-data):2*(uint32_t)(data)-1; \
|
#define bitstream_put_se(stream, data) { uint32_t index=(data<=0)?2*(uint32_t)(-data):2*(uint32_t)(data)-1; \
|
||||||
bitstream_put(stream,exp_table[index].value,exp_table[index].len); }
|
bitstream_put(stream,g_exp_table[index].value,g_exp_table[index].len); }
|
||||||
|
|
||||||
void bitstream_align(bitstream* stream);
|
void bitstream_align(bitstream* stream);
|
||||||
void bitstream_flush(bitstream* stream);
|
void bitstream_flush(bitstream* stream);
|
||||||
|
@ -46,9 +46,9 @@ void init_exp_golomb(uint32_t len);
|
||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
static int WRITE_VALUE = 0;
|
static int WRITE_VALUE = 0;
|
||||||
#define WRITE_U(stream, data, bits, name) { printf("%8d %40s u(%d) : %d\n",WRITE_VALUE, name,bits,data); bitstream_put(stream,data,bits); WRITE_VALUE++;}
|
#define WRITE_U(stream, data, bits, name) { printf("%8d %-40s u(%d) : %d\n",WRITE_VALUE, name,bits,data); bitstream_put(stream,data,bits); WRITE_VALUE++;}
|
||||||
#define WRITE_UE(stream, data, name) { printf("%8d %40s ue(v): %d\n",WRITE_VALUE, name,data); bitstream_put_ue(stream,data); WRITE_VALUE++;}
|
#define WRITE_UE(stream, data, name) { printf("%8d %-40s ue(v): %d\n",WRITE_VALUE, name,data); bitstream_put_ue(stream,data); WRITE_VALUE++;}
|
||||||
#define WRITE_SE(stream, data, name) { printf("%8d %40s se(v): %d\n",WRITE_VALUE, name,data); bitstream_put_se(stream,data); WRITE_VALUE++;}
|
#define WRITE_SE(stream, data, name) { printf("%8d %-40s se(v): %d\n",WRITE_VALUE, name,data); bitstream_put_se(stream,data); WRITE_VALUE++;}
|
||||||
#else
|
#else
|
||||||
#define WRITE_U(stream, data, bits, name) { bitstream_put(stream,data,bits); }
|
#define WRITE_U(stream, data, bits, name) { bitstream_put(stream,data,bits); }
|
||||||
#define WRITE_UE(stream, data, name) { bitstream_put_ue(stream,data); }
|
#define WRITE_UE(stream, data, name) { bitstream_put_ue(stream,data); }
|
||||||
|
|
|
@ -80,14 +80,14 @@
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
printf("Input: %s, output: %s\r\n", cfg->input, cfg->output);
|
printf("Input: %s, output: %s\n", cfg->input, cfg->output);
|
||||||
printf(" Video size: %dx%d\r\n", cfg->width, cfg->height);
|
printf(" Video size: %dx%d\n", cfg->width, cfg->height);
|
||||||
|
|
||||||
/* Open input file and check that it was opened correctly */
|
/* Open input file and check that it was opened correctly */
|
||||||
input = fopen(cfg->input, "rb");
|
input = fopen(cfg->input, "rb");
|
||||||
if(input == NULL)
|
if(input == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Could not open input file, shutting down!\r\n");
|
fprintf(stderr, "Could not open input file, shutting down!\n");
|
||||||
config_destroy(cfg);
|
config_destroy(cfg);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -96,7 +96,7 @@
|
||||||
output = fopen(cfg->output, "wb");
|
output = fopen(cfg->output, "wb");
|
||||||
if(output == NULL)
|
if(output == NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Could not open output file, shutting down!\r\n");
|
fprintf(stderr, "Could not open output file, shutting down!\n");
|
||||||
config_destroy(cfg);
|
config_destroy(cfg);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -109,6 +109,7 @@
|
||||||
/* Init bitstream */
|
/* Init bitstream */
|
||||||
bitstream_init(encoder->stream);
|
bitstream_init(encoder->stream);
|
||||||
encoder->stream->buffer_pos = 0;
|
encoder->stream->buffer_pos = 0;
|
||||||
|
encoder->stream->output = 0;
|
||||||
bitstream_alloc(encoder->stream, 1024*1024);
|
bitstream_alloc(encoder->stream, 1024*1024);
|
||||||
|
|
||||||
/* Config pointer to encoder struct */
|
/* Config pointer to encoder struct */
|
||||||
|
@ -134,7 +135,7 @@
|
||||||
}
|
}
|
||||||
/* Coding finished */
|
/* Coding finished */
|
||||||
|
|
||||||
|
printf(" Processed %d frames\n", encoder->frame-1);
|
||||||
|
|
||||||
fclose(input);
|
fclose(input);
|
||||||
fclose(output);
|
fclose(output);
|
||||||
|
|
|
@ -62,7 +62,7 @@ void nal_write(FILE* output, uint8_t* buffer, uint32_t buffer_len, uint8_t nal_r
|
||||||
fwrite(&buffer[i], 1, 1, output);
|
fwrite(&buffer[i], 1, 1, output);
|
||||||
}
|
}
|
||||||
//If last byte was 0, add emulation_prevention_three_byte
|
//If last byte was 0, add emulation_prevention_three_byte
|
||||||
if(buffer[buffer_len-1] == 0)
|
//if(buffer[buffer_len-1] == 0)
|
||||||
fwrite(&emulation_prevention_three_byte, 1, 1, output);
|
// fwrite(&emulation_prevention_three_byte, 1, 1, output);
|
||||||
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue