Changeset View
Changeset View
Standalone View
Standalone View
source/blender/io/avi/intern/avi_options.c
| Show All 21 Lines | |||||
| * | * | ||||
| * This is external code. Sets some compression related options | * This is external code. Sets some compression related options | ||||
| * (width, height quality, framerate). | * (width, height quality, framerate). | ||||
| */ | */ | ||||
| #include "AVI_avi.h" | #include "AVI_avi.h" | ||||
| #include "avi_intern.h" | #include "avi_intern.h" | ||||
| #include "avi_endian.h" | #include "avi_endian.h" | ||||
| #include "BLI_fileops.h" | |||||
| #ifdef WIN32 | #ifdef WIN32 | ||||
| # include "BLI_winstuff.h" | # include "BLI_winstuff.h" | ||||
| #endif | #endif | ||||
| /* avi_set_compress_options gets its own file... now don't WE feel important? */ | /* avi_set_compress_options gets its own file... now don't WE feel important? */ | ||||
| AviError AVI_set_compress_option( | AviError AVI_set_compress_option( | ||||
| Show All 18 Lines | case AVI_OPTION_TYPE_MAIN: | ||||
| for (i = 0; i < movie->header->Streams; i++) { | for (i = 0; i < movie->header->Streams; i++) { | ||||
| if (avi_get_format_type(movie->streams[i].format) == FCC("vids")) { | if (avi_get_format_type(movie->streams[i].format) == FCC("vids")) { | ||||
| ((AviBitmapInfoHeader *)movie->streams[i].sf)->Width = *((int *)opt_data); | ((AviBitmapInfoHeader *)movie->streams[i].sf)->Width = *((int *)opt_data); | ||||
| movie->streams[i].sh.SuggestedBufferSize = movie->header->SuggestedBufferSize; | movie->streams[i].sh.SuggestedBufferSize = movie->header->SuggestedBufferSize; | ||||
| movie->streams[i].sh.right = *((int *)opt_data); | movie->streams[i].sh.right = *((int *)opt_data); | ||||
| ((AviBitmapInfoHeader *)movie->streams[i].sf)->SizeImage = | ((AviBitmapInfoHeader *)movie->streams[i].sf)->SizeImage = | ||||
| movie->header->SuggestedBufferSize; | movie->header->SuggestedBufferSize; | ||||
| fseek(movie->fp, movie->offset_table[1 + i * 2 + 1], SEEK_SET); | BLI_fseek(movie->fp, movie->offset_table[1 + i * 2 + 1], SEEK_SET); | ||||
| awrite(movie, | awrite(movie, | ||||
| movie->streams[i].sf, | movie->streams[i].sf, | ||||
| 1, | 1, | ||||
| movie->streams[i].sf_size, | movie->streams[i].sf_size, | ||||
| movie->fp, | movie->fp, | ||||
| AVI_BITMAPH); | AVI_BITMAPH); | ||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| case AVI_OPTION_HEIGHT: | case AVI_OPTION_HEIGHT: | ||||
| movie->header->Height = *((int *)opt_data); | movie->header->Height = *((int *)opt_data); | ||||
| movie->header->SuggestedBufferSize = movie->header->Width * movie->header->Height * 3; | movie->header->SuggestedBufferSize = movie->header->Width * movie->header->Height * 3; | ||||
| for (i = 0; i < movie->header->Streams; i++) { | for (i = 0; i < movie->header->Streams; i++) { | ||||
| if (avi_get_format_type(movie->streams[i].format) == FCC("vids")) { | if (avi_get_format_type(movie->streams[i].format) == FCC("vids")) { | ||||
| ((AviBitmapInfoHeader *)movie->streams[i].sf)->Height = *((int *)opt_data); | ((AviBitmapInfoHeader *)movie->streams[i].sf)->Height = *((int *)opt_data); | ||||
| movie->streams[i].sh.SuggestedBufferSize = movie->header->SuggestedBufferSize; | movie->streams[i].sh.SuggestedBufferSize = movie->header->SuggestedBufferSize; | ||||
| movie->streams[i].sh.bottom = *((int *)opt_data); | movie->streams[i].sh.bottom = *((int *)opt_data); | ||||
| ((AviBitmapInfoHeader *)movie->streams[i].sf)->SizeImage = | ((AviBitmapInfoHeader *)movie->streams[i].sf)->SizeImage = | ||||
| movie->header->SuggestedBufferSize; | movie->header->SuggestedBufferSize; | ||||
| fseek(movie->fp, movie->offset_table[1 + i * 2 + 1], SEEK_SET); | BLI_fseek(movie->fp, movie->offset_table[1 + i * 2 + 1], SEEK_SET); | ||||
| awrite(movie, | awrite(movie, | ||||
| movie->streams[i].sf, | movie->streams[i].sf, | ||||
| 1, | 1, | ||||
| movie->streams[i].sf_size, | movie->streams[i].sf_size, | ||||
| movie->fp, | movie->fp, | ||||
| AVI_BITMAPH); | AVI_BITMAPH); | ||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| case AVI_OPTION_QUALITY: | case AVI_OPTION_QUALITY: | ||||
| for (i = 0; i < movie->header->Streams; i++) { | for (i = 0; i < movie->header->Streams; i++) { | ||||
| if (avi_get_format_type(movie->streams[i].format) == FCC("vids")) { | if (avi_get_format_type(movie->streams[i].format) == FCC("vids")) { | ||||
| movie->streams[i].sh.Quality = (*((int *)opt_data)) * 100; | movie->streams[i].sh.Quality = (*((int *)opt_data)) * 100; | ||||
| fseek(movie->fp, movie->offset_table[1 + i * 2 + 1], SEEK_SET); | BLI_fseek(movie->fp, movie->offset_table[1 + i * 2 + 1], SEEK_SET); | ||||
| awrite(movie, | awrite(movie, | ||||
| movie->streams[i].sf, | movie->streams[i].sf, | ||||
| 1, | 1, | ||||
| movie->streams[i].sf_size, | movie->streams[i].sf_size, | ||||
| movie->fp, | movie->fp, | ||||
| AVI_BITMAPH); | AVI_BITMAPH); | ||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| case AVI_OPTION_FRAMERATE: | case AVI_OPTION_FRAMERATE: | ||||
| useconds = (int)(1000000 / (*((double *)opt_data))); | useconds = (int)(1000000 / (*((double *)opt_data))); | ||||
| if (useconds) { | if (useconds) { | ||||
| movie->header->MicroSecPerFrame = useconds; | movie->header->MicroSecPerFrame = useconds; | ||||
| } | } | ||||
| for (i = 0; i < movie->header->Streams; i++) { | for (i = 0; i < movie->header->Streams; i++) { | ||||
| if (avi_get_format_type(movie->streams[i].format) == FCC("vids")) { | if (avi_get_format_type(movie->streams[i].format) == FCC("vids")) { | ||||
| movie->streams[i].sh.Scale = movie->header->MicroSecPerFrame; | movie->streams[i].sh.Scale = movie->header->MicroSecPerFrame; | ||||
| fseek(movie->fp, movie->offset_table[1 + i * 2 + 1], SEEK_SET); | BLI_fseek(movie->fp, movie->offset_table[1 + i * 2 + 1], SEEK_SET); | ||||
| awrite(movie, | awrite(movie, | ||||
| movie->streams[i].sf, | movie->streams[i].sf, | ||||
| 1, | 1, | ||||
| movie->streams[i].sf_size, | movie->streams[i].sf_size, | ||||
| movie->fp, | movie->fp, | ||||
| AVI_BITMAPH); | AVI_BITMAPH); | ||||
| } | } | ||||
| } | } | ||||
| break; | break; | ||||
| } | } | ||||
| fseek(movie->fp, movie->offset_table[0], SEEK_SET); | BLI_fseek(movie->fp, movie->offset_table[0], SEEK_SET); | ||||
| awrite(movie, movie->header, 1, sizeof(AviMainHeader), movie->fp, AVI_MAINH); | awrite(movie, movie->header, 1, sizeof(AviMainHeader), movie->fp, AVI_MAINH); | ||||
| break; | break; | ||||
| case AVI_OPTION_TYPE_STRH: | case AVI_OPTION_TYPE_STRH: | ||||
| break; | break; | ||||
| case AVI_OPTION_TYPE_STRF: | case AVI_OPTION_TYPE_STRF: | ||||
| break; | break; | ||||
| default: | default: | ||||
| return AVI_ERROR_OPTION; | return AVI_ERROR_OPTION; | ||||
| } | } | ||||
| return AVI_ERROR_NONE; | return AVI_ERROR_NONE; | ||||
| } | } | ||||