|
|
|
@@ -43,9 +43,7 @@ |
|
|
|
typedef struct { |
|
|
|
AVClass *avclass; |
|
|
|
opj_image_t *image; |
|
|
|
opj_cio_t *stream; |
|
|
|
opj_cparameters_t enc_params; |
|
|
|
opj_cinfo_t *compress; |
|
|
|
opj_event_mgr_t event_mgr; |
|
|
|
int format; |
|
|
|
int profile; |
|
|
|
@@ -234,12 +232,6 @@ static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx) |
|
|
|
cinema_parameters(&ctx->enc_params); |
|
|
|
} |
|
|
|
|
|
|
|
ctx->compress = opj_create_compress(ctx->format); |
|
|
|
if (!ctx->compress) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Error creating the compressor\n"); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
|
|
|
|
ctx->image = mj2_create_image(avctx, &ctx->enc_params); |
|
|
|
if (!ctx->image) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Error creating the mj2 image\n"); |
|
|
|
@@ -253,17 +245,9 @@ static av_cold int libopenjpeg_encode_init(AVCodecContext *avctx) |
|
|
|
goto fail; |
|
|
|
} |
|
|
|
|
|
|
|
memset(&ctx->event_mgr, 0, sizeof(opj_event_mgr_t)); |
|
|
|
ctx->event_mgr.info_handler = info_callback; |
|
|
|
ctx->event_mgr.error_handler = error_callback; |
|
|
|
ctx->event_mgr.warning_handler = warning_callback; |
|
|
|
opj_set_event_mgr((opj_common_ptr) ctx->compress, &ctx->event_mgr, avctx); |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
fail: |
|
|
|
opj_destroy_compress(ctx->compress); |
|
|
|
ctx->compress = NULL; |
|
|
|
opj_image_destroy(ctx->image); |
|
|
|
ctx->image = NULL; |
|
|
|
av_freep(&avctx->coded_frame); |
|
|
|
@@ -477,9 +461,9 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
|
const AVFrame *frame, int *got_packet) |
|
|
|
{ |
|
|
|
LibOpenJPEGContext *ctx = avctx->priv_data; |
|
|
|
opj_cinfo_t *compress = ctx->compress; |
|
|
|
opj_image_t *image = ctx->image; |
|
|
|
opj_cio_t *stream = ctx->stream; |
|
|
|
opj_cinfo_t *compress = NULL; |
|
|
|
opj_cio_t *stream = NULL; |
|
|
|
int cpyresult = 0; |
|
|
|
int ret, len; |
|
|
|
AVFrame *gbrframe; |
|
|
|
@@ -573,6 +557,12 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
|
return -1; |
|
|
|
} |
|
|
|
|
|
|
|
compress = opj_create_compress(ctx->format); |
|
|
|
if (!compress) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Error creating the compressor\n"); |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
|
|
|
|
opj_setup_encoder(compress, &ctx->enc_params, image); |
|
|
|
|
|
|
|
stream = opj_cio_open((opj_common_ptr) compress, NULL, 0); |
|
|
|
@@ -581,6 +571,12 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
|
return AVERROR(ENOMEM); |
|
|
|
} |
|
|
|
|
|
|
|
memset(&ctx->event_mgr, 0, sizeof(opj_event_mgr_t)); |
|
|
|
ctx->event_mgr.info_handler = info_callback; |
|
|
|
ctx->event_mgr.error_handler = error_callback; |
|
|
|
ctx->event_mgr.warning_handler = warning_callback; |
|
|
|
opj_set_event_mgr((opj_common_ptr) compress, &ctx->event_mgr, avctx); |
|
|
|
|
|
|
|
if (!opj_encode(compress, stream, image, NULL)) { |
|
|
|
av_log(avctx, AV_LOG_ERROR, "Error during the opj encode\n"); |
|
|
|
return -1; |
|
|
|
@@ -594,6 +590,12 @@ static int libopenjpeg_encode_frame(AVCodecContext *avctx, AVPacket *pkt, |
|
|
|
memcpy(pkt->data, stream->buffer, len); |
|
|
|
pkt->flags |= AV_PKT_FLAG_KEY; |
|
|
|
*got_packet = 1; |
|
|
|
|
|
|
|
opj_cio_close(stream); |
|
|
|
stream = NULL; |
|
|
|
opj_destroy_compress(compress); |
|
|
|
compress = NULL; |
|
|
|
|
|
|
|
return 0; |
|
|
|
} |
|
|
|
|
|
|
|
@@ -601,10 +603,6 @@ static av_cold int libopenjpeg_encode_close(AVCodecContext *avctx) |
|
|
|
{ |
|
|
|
LibOpenJPEGContext *ctx = avctx->priv_data; |
|
|
|
|
|
|
|
opj_cio_close(ctx->stream); |
|
|
|
ctx->stream = NULL; |
|
|
|
opj_destroy_compress(ctx->compress); |
|
|
|
ctx->compress = NULL; |
|
|
|
opj_image_destroy(ctx->image); |
|
|
|
ctx->image = NULL; |
|
|
|
av_freep(&avctx->coded_frame); |
|
|
|
|