37 #if HAVE_OPENJPEG_1_5_OPENJPEG_H
38 # include <openjpeg-1.5/openjpeg.h>
40 # include <openjpeg.h>
79 opj_image_cmptparm_t cmptparm[4] = {{0}};
85 OPJ_COLOR_SPACE color_space = CLRSPC_UNKNOWN;
87 sub_dx[0] = sub_dx[3] = 1;
88 sub_dy[0] = sub_dy[3] = 1;
98 color_space = CLRSPC_GRAY;
111 color_space = CLRSPC_SRGB;
146 color_space = CLRSPC_SYCC;
150 "The requested pixel format '%s' is not supported\n",
155 for (i = 0; i < numcomps; i++) {
158 cmptparm[i].sgnd = 0;
159 cmptparm[i].dx = sub_dx[i];
160 cmptparm[i].dy = sub_dy[i];
161 cmptparm[i].w = (avctx->
width + sub_dx[i] - 1) / sub_dx[i];
162 cmptparm[i].h = (avctx->
height + sub_dy[i] - 1) / sub_dy[i];
165 img = opj_image_create(numcomps, cmptparm, color_space);
171 img->x1 = (avctx->
width - 1) * parameters->subsampling_dx + 1;
172 img->y1 = (avctx->
height - 1) * parameters->subsampling_dy + 1;
182 opj_set_default_encoder_parameters(&ctx->
enc_params);
238 ctx->
stream = opj_cio_open((opj_common_ptr) ctx->
compress, NULL, 0);
251 memset(&ctx->
event_mgr, 0,
sizeof(opj_event_mgr_t));
260 opj_cio_close(ctx->
stream);
262 opj_destroy_compress(ctx->
compress);
264 opj_image_destroy(ctx->
image);
277 const int numcomps = image->numcomps;
279 for (compno = 0; compno < numcomps; ++compno) {
280 if (image->comps[compno].w > frame->
linesize[0] / numcomps) {
286 for (compno = 0; compno < numcomps; ++compno) {
287 for (y = 0; y < avctx->
height; ++
y) {
288 image_line = image->comps[compno].data + y * image->comps[compno].w;
289 frame_index = y * frame->
linesize[0] + compno;
290 for (x = 0; x < avctx->
width; ++x) {
291 image_line[x] = frame->
data[0][frame_index];
292 frame_index += numcomps;
294 for (; x < image->comps[compno].w; ++x) {
295 image_line[x] = image_line[x - 1];
298 for (; y < image->comps[compno].h; ++
y) {
299 image_line = image->comps[compno].data + y * image->comps[compno].w;
300 for (x = 0; x < image->comps[compno].w; ++x) {
301 image_line[x] = image_line[x - image->comps[compno].w];
316 const int numcomps = image->numcomps;
317 uint16_t *frame_ptr = (uint16_t *)frame->
data[0];
319 for (compno = 0; compno < numcomps; ++compno) {
320 if (image->comps[compno].w > frame->
linesize[0] / numcomps) {
326 for (compno = 0; compno < numcomps; ++compno) {
327 for (y = 0; y < avctx->
height; ++
y) {
328 image_line = image->comps[compno].data + y * image->comps[compno].w;
329 frame_index = y * (frame->
linesize[0] / 2) + compno;
330 for (x = 0; x < avctx->
width; ++x) {
331 image_line[x] = frame_ptr[frame_index] >> 4;
332 frame_index += numcomps;
334 for (; x < image->comps[compno].w; ++x) {
335 image_line[x] = image_line[x - 1];
338 for (; y < image->comps[compno].h; ++
y) {
339 image_line = image->comps[compno].data + y * image->comps[compno].w;
340 for (x = 0; x < image->comps[compno].w; ++x) {
341 image_line[x] = image_line[x - image->comps[compno].w];
356 const int numcomps = image->numcomps;
357 uint16_t *frame_ptr = (uint16_t*)frame->
data[0];
359 for (compno = 0; compno < numcomps; ++compno) {
360 if (image->comps[compno].w > frame->
linesize[0] / numcomps) {
366 for (compno = 0; compno < numcomps; ++compno) {
367 for (y = 0; y < avctx->
height; ++
y) {
368 image_line = image->comps[compno].data + y * image->comps[compno].w;
369 frame_index = y * (frame->
linesize[0] / 2) + compno;
370 for (x = 0; x < avctx->
width; ++x) {
371 image_line[x] = frame_ptr[frame_index];
372 frame_index += numcomps;
374 for (; x < image->comps[compno].w; ++x) {
375 image_line[x] = image_line[x - 1];
378 for (; y < image->comps[compno].h; ++
y) {
379 image_line = image->comps[compno].data + y * image->comps[compno].w;
380 for (x = 0; x < image->comps[compno].w; ++x) {
381 image_line[x] = image_line[x - image->comps[compno].w];
398 const int numcomps = image->numcomps;
400 for (compno = 0; compno < numcomps; ++compno) {
401 if (image->comps[compno].w > frame->
linesize[compno]) {
407 for (compno = 0; compno < numcomps; ++compno) {
408 width = avctx->
width / image->comps[compno].dx;
409 height = avctx->
height / image->comps[compno].dy;
411 image_line = image->comps[compno].data + y * image->comps[compno].w;
412 frame_index = y * frame->
linesize[compno];
413 for (x = 0; x <
width; ++x)
414 image_line[x] = frame->
data[compno][frame_index++];
415 for (; x < image->comps[compno].w; ++x) {
416 image_line[x] = image_line[x - 1];
419 for (; y < image->comps[compno].h; ++
y) {
420 image_line = image->comps[compno].data + y * image->comps[compno].w;
421 for (x = 0; x < image->comps[compno].w; ++x) {
422 image_line[x] = image_line[x - image->comps[compno].w];
439 const int numcomps = image->numcomps;
442 for (compno = 0; compno < numcomps; ++compno) {
443 if (image->comps[compno].w > frame->
linesize[compno]) {
449 for (compno = 0; compno < numcomps; ++compno) {
450 width = avctx->
width / image->comps[compno].dx;
451 height = avctx->
height / image->comps[compno].dy;
452 frame_ptr = (uint16_t *)frame->
data[compno];
454 image_line = image->comps[compno].data + y * image->comps[compno].w;
455 frame_index = y * (frame->
linesize[compno] / 2);
456 for (x = 0; x <
width; ++x)
457 image_line[x] = frame_ptr[frame_index++];
458 for (; x < image->comps[compno].w; ++x) {
459 image_line[x] = image_line[x - 1];
462 for (; y < image->comps[compno].h; ++
y) {
463 image_line = image->comps[compno].data + y * image->comps[compno].w;
464 for (x = 0; x < image->comps[compno].w; ++x) {
465 image_line[x] = image_line[x - image->comps[compno].w];
477 opj_cinfo_t *compress = ctx->
compress;
478 opj_image_t *image = ctx->
image;
479 opj_cio_t *stream = ctx->
stream;
560 "The frame's pixel format '%s' is not supported\n",
568 "Could not copy the frame data to the internal image buffer\n");
573 if (!opj_encode(compress, stream, image, NULL)) {
578 len = cio_tell(stream);
583 memcpy(pkt->
data, stream->buffer, len);
593 opj_cio_close(ctx->
stream);
595 opj_destroy_compress(ctx->
compress);
597 opj_image_destroy(ctx->
image);
603 #define OFFSET(x) offsetof(LibOpenJPEGContext, x)
604 #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
606 {
"format",
"Codec Format",
OFFSET(format),
AV_OPT_TYPE_INT, { .i64 = CODEC_JP2 }, CODEC_J2K, CODEC_JP2,
VE,
"format" },
613 {
"cinema_mode",
"Digital Cinema",
OFFSET(cinema_mode),
AV_OPT_TYPE_INT, { .i64 = OFF }, OFF, CINEMA4K_24,
VE,
"cinema_mode" },
618 {
"prog_order",
"Progression Order",
OFFSET(prog_order),
AV_OPT_TYPE_INT, { .i64 = LRCP }, LRCP, CPRL,
VE,
"prog_order" },
640 .
name =
"libopenjpeg",