Cleanup: move avi io to C++ #110537

Merged
Jacques Lucke merged 8 commits from JacquesLucke/blender:avi-cpp into main 2023-07-27 17:13:13 +02:00
13 changed files with 115 additions and 71 deletions

View File

@ -12,13 +12,13 @@ set(INC_SYS
)
set(SRC
intern/avi.c
intern/avi_codecs.c
intern/avi_endian.c
intern/avi_mjpeg.c
intern/avi_options.c
intern/avi_rgb.c
intern/avi_rgb32.c
intern/avi.cc
intern/avi_codecs.cc
intern/avi_endian.cc
intern/avi_mjpeg.cc
intern/avi_options.cc
intern/avi_rgb.cc
intern/avi_rgb32.cc
AVI_avi.h
intern/avi_endian.h

View File

@ -92,7 +92,7 @@ int AVI_get_stream(AviMovie *movie, int avist_type, int stream_num)
{
int cur_stream;
if (movie == NULL) {
if (movie == nullptr) {
return -AVI_ERROR_OPTION;
}
@ -188,7 +188,7 @@ AviError AVI_print_error(AviError in_error)
bool AVI_is_avi(const char *filepath)
{
int temp, fcca, j;
AviMovie movie = {NULL};
AviMovie movie = {nullptr};
AviMainHeader header;
AviBitmapInfoHeader bheader;
int movie_tracks = 0;
@ -197,9 +197,9 @@ bool AVI_is_avi(const char *filepath)
movie.type = AVI_MOVIE_READ;
movie.fp = BLI_fopen(filepath, "rb");
movie.offset_table = NULL;
movie.offset_table = nullptr;
if (movie.fp == NULL) {
if (movie.fp == nullptr) {
return 0;
}
@ -390,9 +390,9 @@ AviError AVI_open_movie(const char *filepath, AviMovie *movie)
movie->type = AVI_MOVIE_READ;
movie->fp = BLI_fopen(filepath, "rb");
movie->offset_table = NULL;
movie->offset_table = nullptr;
if (movie->fp == NULL) {
if (movie->fp == nullptr) {
return AVI_ERROR_OPEN;
}
@ -657,7 +657,7 @@ void *AVI_read_frame(AviMovie *movie, AviFormat format, int frame, int stream)
}
if (cur_frame != frame) {
return NULL;
return nullptr;
}
BLI_fseek(movie->fp, movie->read_offset + movie->entries[i - 1].Offset, SEEK_SET);
@ -668,7 +668,7 @@ void *AVI_read_frame(AviMovie *movie, AviFormat format, int frame, int stream)
if (fread(buffer, 1, size, movie->fp) != size) {
MEM_freeN(buffer);
return NULL;
return nullptr;
}
buffer = avi_format_convert(movie, stream, buffer, movie->streams[stream].format, format, &size);
@ -683,7 +683,7 @@ AviError AVI_close(AviMovie *movie)
fclose(movie->fp);
for (i = 0; i < movie->header->Streams; i++) {
if (movie->streams[i].sf != NULL) {
if (movie->streams[i].sf != nullptr) {
MEM_freeN(movie->streams[i].sf);
}
}
@ -691,10 +691,10 @@ AviError AVI_close(AviMovie *movie)
MEM_freeN(movie->header);
MEM_freeN(movie->streams);
if (movie->entries != NULL) {
if (movie->entries != nullptr) {
MEM_freeN(movie->entries);
}
if (movie->offset_table != NULL) {
if (movie->offset_table != nullptr) {
MEM_freeN(movie->offset_table);
}
@ -716,7 +716,7 @@ AviError AVI_open_compress(char *filepath, AviMovie *movie, int streams, ...)
movie->index_entries = 0;
if (movie->fp == NULL) {
if (movie->fp == nullptr) {
return AVI_ERROR_OPEN;
}
@ -726,7 +726,7 @@ AviError AVI_open_compress(char *filepath, AviMovie *movie, int streams, ...)
movie->offset_table[i] = -1L;
}
movie->entries = NULL;
movie->entries = nullptr;
movie->header = (AviMainHeader *)MEM_mallocN(sizeof(AviMainHeader), "movieheader");
@ -760,7 +760,7 @@ AviError AVI_open_compress(char *filepath, AviMovie *movie, int streams, ...)
va_start(ap, streams);
for (i = 0; i < movie->header->Streams; i++) {
movie->streams[i].format = va_arg(ap, AviFormat);
movie->streams[i].format = AviFormat(va_arg(ap, int));
movie->streams[i].sh.fcc = FCC("strh");
movie->streams[i].sh.size = 56;
@ -928,7 +928,7 @@ AviError AVI_write_frame(AviMovie *movie, int frame_num, ...)
for (stream = 0; stream < movie->header->Streams; stream++) {
uint tbuf = 0;
format = va_arg(ap, AviFormat);
format = AviFormat(va_arg(ap, int));
buffer = va_arg(ap, void *);
size_t size = va_arg(ap, int);
@ -999,7 +999,7 @@ AviError AVI_close_compress(AviMovie *movie)
{
int temp, movi_size, i;
if (movie->fp == NULL) {
if (movie->fp == nullptr) {
/* none of the allocations below were done if the file failed to open */
return AVI_ERROR_FOUND;
}
@ -1027,20 +1027,20 @@ AviError AVI_close_compress(AviMovie *movie)
fclose(movie->fp);
for (i = 0; i < movie->header->Streams; i++) {
if (movie->streams && (movie->streams[i].sf != NULL)) {
if (movie->streams && (movie->streams[i].sf != nullptr)) {
MEM_freeN(movie->streams[i].sf);
}
}
MEM_freeN(movie->header);
if (movie->entries != NULL) {
if (movie->entries != nullptr) {
MEM_freeN(movie->entries);
}
if (movie->streams != NULL) {
if (movie->streams != nullptr) {
MEM_freeN(movie->streams);
}
if (movie->offset_table != NULL) {
if (movie->offset_table != nullptr) {
MEM_freeN(movie->offset_table);
}
return AVI_ERROR_NONE;

View File

@ -38,26 +38,28 @@ void *avi_format_convert(
case AVI_FORMAT_RGB24:
switch (from) {
case AVI_FORMAT_AVI_RGB:
buffer = avi_converter_from_avi_rgb(movie, stream, buffer, size);
buffer = avi_converter_from_avi_rgb(
movie, stream, static_cast<unsigned char *>(buffer), size);
break;
case AVI_FORMAT_MJPEG:
buffer = avi_converter_from_mjpeg(movie, stream, buffer, size);
buffer = avi_converter_from_mjpeg(movie, stream, static_cast<uchar *>(buffer), size);
break;
case AVI_FORMAT_RGB32:
buffer = avi_converter_from_rgb32(movie, stream, buffer, size);
buffer = avi_converter_from_rgb32(
movie, stream, static_cast<unsigned char *>(buffer), size);
break;
default:
break;
}
break;
case AVI_FORMAT_AVI_RGB:
buffer = avi_converter_to_avi_rgb(movie, stream, buffer, size);
buffer = avi_converter_to_avi_rgb(movie, stream, static_cast<unsigned char *>(buffer), size);
break;
case AVI_FORMAT_MJPEG:
buffer = avi_converter_to_mjpeg(movie, stream, buffer, size);
buffer = avi_converter_to_mjpeg(movie, stream, static_cast<uchar *>(buffer), size);
break;
case AVI_FORMAT_RGB32:
buffer = avi_converter_to_rgb32(movie, stream, buffer, size);
buffer = avi_converter_to_rgb32(movie, stream, static_cast<unsigned char *>(buffer), size);
break;
default:
break;

View File

@ -10,6 +10,10 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define AVI_RAW 0
#define AVI_CHUNK 1
#define AVI_LIST 2
@ -20,3 +24,7 @@
#define AVI_MJPEGU 7
void awrite(AviMovie *movie, void *datain, int block, int size, FILE *fp, int type);
#ifdef __cplusplus
}
#endif

View File

@ -10,6 +10,10 @@
#include <stdio.h> /* for FILE */
#ifdef __cplusplus
extern "C" {
#endif
unsigned int GET_FCC(FILE *fp);
unsigned int GET_TCC(FILE *fp);
@ -45,3 +49,7 @@ int avi_get_data_id(AviFormat format, int stream);
int avi_get_format_type(AviFormat format);
int avi_get_format_fcc(AviFormat format);
int avi_get_format_compression(AviFormat format);
#ifdef __cplusplus
}
#endif

View File

@ -35,7 +35,7 @@ static void add_huff_table(j_decompress_ptr dinfo,
const UINT8 *val,
const size_t val_size)
{
if (*htblptr == NULL) {
if (*htblptr == nullptr) {
*htblptr = jpeg_alloc_huff_table((j_common_ptr)dinfo);
}
@ -227,7 +227,7 @@ static int Decode_JPEG(uchar *inBuffer, uchar *outBuffer, uint width, uint heigh
jpeg_create_decompress(&dinfo);
jpegmemsrcmgr_build(&dinfo, inBuffer, bufsize);
jpeg_read_header(&dinfo, true);
if (dinfo.dc_huff_tbl_ptrs[0] == NULL) {
if (dinfo.dc_huff_tbl_ptrs[0] == nullptr) {
std_huff_tables(&dinfo);
}
dinfo.out_color_space = JCS_RGB;
@ -251,7 +251,7 @@ static int Decode_JPEG(uchar *inBuffer, uchar *outBuffer, uint width, uint heigh
numbytes = 0;
jpeg_read_header(&dinfo, true);
if (dinfo.dc_huff_tbl_ptrs[0] == NULL) {
if (dinfo.dc_huff_tbl_ptrs[0] == nullptr) {
std_huff_tables(&dinfo);
}
@ -365,13 +365,13 @@ void *avi_converter_from_mjpeg(AviMovie *movie, int stream, uchar *buffer, const
(void)stream; /* unused */
buf = imb_alloc_pixels(movie->header->Height,
movie->header->Width,
3,
sizeof(uchar),
"avi.avi_converter_from_mjpeg 1");
buf = static_cast<uchar *>(imb_alloc_pixels(movie->header->Height,
movie->header->Width,
3,
sizeof(uchar),
"avi.avi_converter_from_mjpeg 1"));
if (!buf) {
return NULL;
return nullptr;
}
deint = Decode_JPEG(buffer, buf, movie->header->Width, movie->header->Height, *size);
@ -379,11 +379,11 @@ void *avi_converter_from_mjpeg(AviMovie *movie, int stream, uchar *buffer, const
MEM_freeN(buffer);
if (deint) {
buffer = imb_alloc_pixels(movie->header->Height,
movie->header->Width,
3,
sizeof(uchar),
"avi.avi_converter_from_mjpeg 2");
buffer = static_cast<uchar *>(imb_alloc_pixels(movie->header->Height,
movie->header->Width,
3,
sizeof(uchar),
"avi.avi_converter_from_mjpeg 2"));
if (buffer) {
interlace(buffer, buf, movie->header->Width, movie->header->Height);
}
@ -403,13 +403,13 @@ void *avi_converter_to_mjpeg(AviMovie *movie, int stream, uchar *buffer, size_t
numbytes = 0;
*size = 0;
buf = imb_alloc_pixels(movie->header->Height,
movie->header->Width,
3,
sizeof(uchar),
"avi.avi_converter_to_mjpeg 1");
buf = static_cast<uchar *>(imb_alloc_pixels(movie->header->Height,
movie->header->Width,
3,
sizeof(uchar),
"avi.avi_converter_to_mjpeg 1"));
if (!buf) {
return NULL;
return nullptr;
}
if (!movie->interlace) {
@ -426,11 +426,11 @@ void *avi_converter_to_mjpeg(AviMovie *movie, int stream, uchar *buffer, size_t
MEM_freeN(buffer);
buffer = buf;
buf = imb_alloc_pixels(movie->header->Height,
movie->header->Width,
3,
sizeof(uchar),
"avi.avi_converter_to_mjpeg 1");
buf = static_cast<uchar *>(imb_alloc_pixels(movie->header->Height,
movie->header->Width,
3,
sizeof(uchar),
"avi.avi_converter_to_mjpeg 1"));
if (buf) {
Compress_JPEG(movie->streams[stream].sh.Quality / 100,
@ -478,7 +478,8 @@ static void jpegmemdestmgr_term_destination(j_compress_ptr cinfo)
static void jpegmemdestmgr_build(j_compress_ptr cinfo, uchar *buffer, size_t bufsize)
{
cinfo->dest = MEM_mallocN(sizeof(*(cinfo->dest)), "avi.jpegmemdestmgr_build");
cinfo->dest = static_cast<jpeg_destination_mgr *>(
MEM_mallocN(sizeof(*(cinfo->dest)), "avi.jpegmemdestmgr_build"));
cinfo->dest->init_destination = jpegmemdestmgr_init_destination;
cinfo->dest->empty_output_buffer = jpegmemdestmgr_empty_output_buffer;
@ -532,7 +533,8 @@ static void jpegmemsrcmgr_term_source(j_decompress_ptr dinfo)
static void jpegmemsrcmgr_build(j_decompress_ptr dinfo, const uchar *buffer, size_t bufsize)
{
dinfo->src = MEM_mallocN(sizeof(*(dinfo->src)), "avi.jpegmemsrcmgr_build");
dinfo->src = static_cast<jpeg_source_mgr *>(
MEM_mallocN(sizeof(*(dinfo->src)), "avi.jpegmemsrcmgr_build"));
dinfo->src->init_source = jpegmemsrcmgr_init_source;
dinfo->src->fill_input_buffer = jpegmemsrcmgr_fill_input_buffer;

View File

@ -8,5 +8,13 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
void *avi_converter_from_mjpeg(AviMovie *movie, int stream, uchar *buffer, const size_t *size);
void *avi_converter_to_mjpeg(AviMovie *movie, int stream, uchar *buffer, size_t *size);
#ifdef __cplusplus
}
#endif

View File

@ -42,8 +42,8 @@ void *avi_converter_from_avi_rgb(AviMovie *movie, int stream, uchar *buffer, con
uchar *pxla;
#endif
buf = imb_alloc_pixels(
movie->header->Height, movie->header->Width, 3, sizeof(uchar), "fromavirgbbuf");
buf = static_cast<uchar *>(imb_alloc_pixels(
movie->header->Height, movie->header->Width, 3, sizeof(uchar), "fromavirgbbuf"));
if (buf) {
size_t y = movie->header->Height;
@ -79,8 +79,8 @@ void *avi_converter_from_avi_rgb(AviMovie *movie, int stream, uchar *buffer, con
return buf;
}
buf = imb_alloc_pixels(
movie->header->Height, movie->header->Width, 3, sizeof(uchar), "fromavirgbbuf");
buf = static_cast<uchar *>(imb_alloc_pixels(
movie->header->Height, movie->header->Width, 3, sizeof(uchar), "fromavirgbbuf"));
if (buf) {
size_t rowstride = movie->header->Width * 3;
@ -119,7 +119,7 @@ void *avi_converter_to_avi_rgb(AviMovie *movie, int stream, uchar *buffer, size_
rowstride = (rowstride + 3) & ~3;
*size = movie->header->Height * rowstride;
buf = MEM_mallocN(*size, "toavirgbbuf");
buf = static_cast<uchar *>(MEM_mallocN(*size, "toavirgbbuf"));
for (size_t y = 0; y < movie->header->Height; y++) {
memcpy(&buf[y * rowstride],

View File

@ -8,8 +8,16 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
void *avi_converter_from_avi_rgb(AviMovie *movie,
int stream,
unsigned char *buffer,
const size_t *size);
void *avi_converter_to_avi_rgb(AviMovie *movie, int stream, unsigned char *buffer, size_t *size);
#ifdef __cplusplus
}
#endif

View File

@ -25,10 +25,10 @@ void *avi_converter_from_rgb32(AviMovie *movie, int stream, uchar *buffer, size_
(void)stream; /* unused */
*size = (size_t)movie->header->Height * (size_t)movie->header->Width * 3;
buf = imb_alloc_pixels(
movie->header->Height, movie->header->Width, 3, sizeof(uchar), "fromrgb32buf");
buf = static_cast<uchar *>(imb_alloc_pixels(
movie->header->Height, movie->header->Width, 3, sizeof(uchar), "fromrgb32buf"));
if (!buf) {
return NULL;
return nullptr;
}
size_t rowstridea = movie->header->Width * 3;
@ -55,10 +55,10 @@ void *avi_converter_to_rgb32(AviMovie *movie, int stream, uchar *buffer, size_t
(void)stream; /* unused */
*size = (size_t)movie->header->Height * (size_t)movie->header->Width * 4;
buf = imb_alloc_pixels(
movie->header->Height, movie->header->Width, 4, sizeof(uchar), "torgb32buf");
buf = static_cast<uchar *>(imb_alloc_pixels(
movie->header->Height, movie->header->Width, 4, sizeof(uchar), "torgb32buf"));
if (!buf) {
return NULL;
return nullptr;
}
memset(buf, 255, *size);

View File

@ -8,5 +8,13 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
void *avi_converter_from_rgb32(AviMovie *movie, int stream, unsigned char *buffer, size_t *size);
void *avi_converter_to_rgb32(AviMovie *movie, int stream, unsigned char *buffer, size_t *size);
#ifdef __cplusplus
}
#endif