unsigned char *alpha_data,
unsigned long alpha_data_len) {
swf_tag_info_t *tag_info;
+ swf_tag_detail_handler_t * detail_handler;
int result;
if (tag == NULL) {
fprintf(stderr, "swf_tag_replace_jpeg_data: tag == NULL\n");
return 1;
}
- if ((tag->tag != 6) && (tag->tag != 21) && (tag->tag != 35)) { // DefineBitsJPEG or 2 or 3
+ // DefineBitsJPEG or 2 or 3
+ // BitsLossless or 2
+ if ((tag->tag != 6) && (tag->tag != 21) && (tag->tag != 35) &&
+ (tag->tag != 20) && (tag->tag != 36)) {
return 1;
}
tag_info = get_swf_tag_info(tag->tag);
- if (tag_info && tag_info->detail_handler) {
- swf_tag_detail_handler_t * detail_handler = tag_info->detail_handler();
- if (detail_handler->identity) {
- if (detail_handler->identity(tag->data, image_id, tag)) {
- return 1;
- }
- }
+ detail_handler = tag_info->detail_handler();
+ if (detail_handler->identity(tag->data, image_id, tag)) {
+ return 1;
}
- if (! tag->detail) {
- swf_tag_create_input_detail(tag, NULL);
+ if (tag->detail) {
+ detail_handler->destroy(tag->detail);
+ tag->detail = NULL;
}
- if (! tag->detail) {
- fprintf(stderr, "swf_tag_replace_jpeg_data: Can't create tag\n");
- return 1;
+ if (alpha_data && (alpha_data_len > 0)) {
+ tag->tag = 35;
+ } else {
+ if (tag->tag != 6) {
+ tag->tag = 21;
+ }
}
+ tag_info = get_swf_tag_info(tag->tag);
+ detail_handler = tag_info->detail_handler();
+ tag->detail = detail_handler->create();
result= swf_tag_jpeg_replace_jpeg_data(tag->detail, image_id,
jpeg_data, jpeg_data_len,
alpha_data, alpha_data_len, tag);
free(tag->data);
tag->data = NULL;
tag->length = 0;
- }
+ } else {
+ detail_handler->destroy(tag->detail);
+ tag->detail = NULL;
+ }
return result;
}
unsigned char *png_data,
unsigned long png_data_len) {
swf_tag_info_t *tag_info;
+ swf_tag_detail_handler_t *detail_handler;
int result;
if (tag == NULL) {
fprintf(stderr, "swf_tag_replace_png_data: tag == NULL\n");
return 1;
}
- if ((tag->tag != 20) && (tag->tag != 36)) { // DefineBitsLossless or 2
+ // DefineBitsJPEG or 2 or 3
+ // BitsLossless or 2
+ if ((tag->tag != 6) && (tag->tag != 21) && (tag->tag != 35) &&
+ (tag->tag != 20) && (tag->tag != 36)) {
return 1;
}
tag_info = get_swf_tag_info(tag->tag);
- if (tag_info && tag_info->detail_handler) {
- swf_tag_detail_handler_t * detail_handler = tag_info->detail_handler();
- if (detail_handler->identity) {
- if (detail_handler->identity(tag->data, image_id, tag)) {
- return 1;
- }
- }
+ detail_handler = tag_info->detail_handler();
+ if (detail_handler->identity(tag->data, image_id, tag)) {
+ return 1;
}
- if (! tag->detail) {
- swf_tag_create_input_detail(tag, NULL);
+ if (tag->detail) {
+ detail_handler->destroy(tag->detail);
+ tag->detail = NULL;
}
- if (! tag->detail) {
- fprintf(stderr, "swf_tag_replace_png_data: Can't create tag\n");
- return 1;
+ if (tag->tag == 20) {
+ tag->tag = 20;
+ } else {
+ tag->tag = 36;
}
+
+ tag_info = get_swf_tag_info(tag->tag);
+ detail_handler = tag_info->detail_handler();
+ tag->detail = detail_handler->create();
result= swf_tag_lossless_replace_png_data(tag->detail, image_id,
png_data, png_data_len, tag);
if (result == 0) {
free(tag->data);
tag->data = NULL;
tag->length = 0;
+ } else {
+ detail_handler->destroy(tag->detail);
+ tag->detail = NULL;
}
return result;
}
fprintf(stderr, "ERROR: swf_tag_jpeg_create_detail: can't calloc\n");
return NULL;
}
- swf_tag_jpeg->image_id = -1;
+ swf_tag_jpeg->image_id = 0;
swf_tag_jpeg->jpeg_data = NULL;
swf_tag_jpeg->jpeg_data_len = 0;
+ swf_tag_jpeg->offset_to_alpha = 0;
swf_tag_jpeg->alpha_data = NULL;
swf_tag_jpeg->alpha_data_len = 0;
return (void *) swf_tag_jpeg;
fprintf(stderr, "swf_tag_jpeg_replace_jpeg_data: detail == NULL\n");
return 1;
}
- if (swf_tag_jpeg->image_id != image_id) {
- return 1;
- }
+ swf_tag_jpeg->image_id = image_id;
if (tag->tag == 6) { // DefineBitsJPEG
free(swf_tag_jpeg->jpeg_data);
swf_tag_jpeg->jpeg_data = malloc(jpeg_data_len);
swf_tag_jpeg->alpha_data_len = alpha_data_len;
}
}
-
return 0;
}
fprintf(stderr, "swf_tag_lossless_create_detail: can't calloc swf_tag_lossless\n");
return NULL;
}
+ swf_tag_lossless->image_id = 0;
+ swf_tag_lossless->format = 0;
+ swf_tag_lossless->width = 0;
+ swf_tag_lossless->height = 0;
+ swf_tag_lossless->colormap_count = 0;
+ swf_tag_lossless->colormap = NULL;
+ swf_tag_lossless->colormap2 = NULL;
+ swf_tag_lossless->indices = NULL;
+ swf_tag_lossless->bitmap = NULL;
+ swf_tag_lossless->bitmap2 = NULL;
return swf_tag_lossless;
}
fprintf(stderr, "swf_tag_lossless_replace_lossless_data: detail == NULL at line(%d)\n", __LINE__);
return 1;
}
- if (swf_tag_lossless->image_id != image_id) {
- return 1;
- }
+ swf_tag_lossless->image_id = image_id;
result_data = pngconv_png2lossless(png_data, png_data_len,
&tag_no, &format,
&width, &height,