- av_malloc() align size and allocate memory for different architecture.
and sws_scale() use memory without checking.
so if we use g_malloc(), sws_scale() make crash sometimes.
we should allocate memory with av_malloc() before using sws_scale().
- ref. https://trac.ffmpeg.org/ticket/5886/
Change-Id: I893578f2c82ed881de1bbcb92595a3e57d5e3c1e
goto exception;
}
- frame->frameData = g_malloc0(numBytes);
+ frame->frameData = av_malloc(numBytes);
+ if (!frame->frameData) {
+ debug_error(DEBUG, "error: av_malloc.");
+ ret = MMFILE_FORMAT_FAIL;
+ goto exception;
+ }
uint8_t *dst_data[4];
int dst_linesize[4];
frame->frameWidth = width;
frame->frameHeight = height;
frame->configLenth = 0;
+ frame->frameDataFree = av_free;
if (pFrame)
av_frame_free(&pFrame);
if (pVideoCodecCtx)
avcodec_free_context(&pVideoCodecCtx);
- mmfile_free(frame->frameData);
+ av_freep(&frame->frameData);
if (pFrame)
av_frame_free(&pFrame);
goto exception;
}
- *frame = g_malloc0(*size);
+ *frame = av_malloc(*size);
+ if (!(*frame)) {
+ debug_error(DEBUG, "error: av_malloc.");
+ ret = MMFILE_FORMAT_FAIL;
+ goto exception;
+ }
debug_msg(RELEASE, "size : %d", *size);
debug_msg(RELEASE, "width : %d", *width);
return MMFILE_FORMAT_SUCCESS;
exception:
- mmfile_free(*frame);
+ av_freep(frame);
if (pFrame)
av_frame_free(&pFrame);
unsigned int frameHeight;
unsigned int configLenth;
unsigned char *frameData;
+ void (*frameDataFree)(void *);
void *configData;
unsigned int timestamp;
unsigned int frameNumber;
thumbnail->frameWidth = frameContext.frameWidth;
thumbnail->frameHeight = frameContext.frameHeight;
thumbnail->frameData = frameContext.frameData;
+ thumbnail->frameDataFree = frameContext.frameDataFree;
thumbnail->configLenth = 0;
thumbnail->configData = NULL;
return FILEINFO_ERROR_NONE;
exception:
mmfile_free(thumbnail);
- mmfile_free(frameContext.frameData);
+ if (frameContext.frameDataFree)
+ frameContext.frameDataFree(frameContext.frameData);
+ else
+ mmfile_free(frameContext.frameData);
mmfile_free(frameContext.configData);
return ret;
_info_set_attr_media(attrs, formatContext);
if (formatContext->thumbNail) {
- mmfile_free(formatContext->thumbNail->frameData);
+ if (formatContext->thumbNail->frameDataFree)
+ formatContext->thumbNail->frameDataFree(formatContext->thumbNail->frameData);
+ else
+ mmfile_free(formatContext->thumbNail->frameData);
mmfile_free(formatContext->thumbNail->configData);
mmfile_free(formatContext->thumbNail);
}