38 #include <libdirac_encoder/dirac_encoder.h>
82 for (idx = 0; idx < num_formats; ++idx)
94 VIDEO_FORMAT_QSIF525 ,
98 VIDEO_FORMAT_4SIF525 ,
100 VIDEO_FORMAT_SD_480I60 ,
101 VIDEO_FORMAT_SD_576I50 ,
102 VIDEO_FORMAT_HD_720P60 ,
103 VIDEO_FORMAT_HD_720P50 ,
104 VIDEO_FORMAT_HD_1080I60 ,
105 VIDEO_FORMAT_HD_1080I50 ,
106 VIDEO_FORMAT_HD_1080P60 ,
107 VIDEO_FORMAT_HD_1080P50 ,
108 VIDEO_FORMAT_DIGI_CINEMA_2K24 ,
109 VIDEO_FORMAT_DIGI_CINEMA_4K24 ,
123 return (idx < num_formats) ?
139 dirac_encoder_context_init(&p_dirac_params->
enc_ctx, preset);
143 if (p_dirac_params->
enc_ctx.src_params.chroma == formatNK) {
145 "Unsupported pixel format %d. This codec supports only "
146 "Planar YUV formats (yuv420p, yuv422p, yuv444p\n",
154 p_dirac_params->
enc_ctx.src_params.width = avccontext->
width;
155 p_dirac_params->
enc_ctx.src_params.height = avccontext->
height;
164 p_dirac_params->
enc_ctx.decode_flag = 0;
165 p_dirac_params->
enc_ctx.instr_flag = 0;
167 p_dirac_params->
enc_ctx.decode_flag = 1;
168 p_dirac_params->
enc_ctx.instr_flag = 1;
173 p_dirac_params->
enc_ctx.enc_params.num_L1 = 0;
175 p_dirac_params->
enc_ctx.enc_params.using_ac = 0;
189 p_dirac_params->
enc_ctx.enc_params.lossless = 1;
190 }
else if (avccontext->
bit_rate >= 1000)
191 p_dirac_params->
enc_ctx.enc_params.trate = avccontext->
bit_rate / 1000;
193 if ((preset > VIDEO_FORMAT_QCIF || preset < VIDEO_FORMAT_QSIF525) &&
195 p_dirac_params->
enc_ctx.enc_params.trate = 0;
200 p_dirac_params->
enc_ctx.enc_params.picture_coding_mode = 1;
207 "Unrecoverable Error: dirac_encoder_init failed. ");
229 unsigned char *frame,
230 int buf_size,
void *
data)
233 dirac_encoder_state_t
state;
238 int last_frame_in_sequence = 0;
243 dirac_encoder_end_sequence(p_dirac_params->
p_encoder);
258 if (dirac_encoder_load(p_dirac_params->
p_encoder,
262 " dirac_encoder_load failed...\n");
271 p_dirac_params->
p_encoder->enc_buf.buffer = frame;
272 p_dirac_params->
p_encoder->enc_buf.size = buf_size;
274 state = dirac_encoder_output(p_dirac_params->
p_encoder);
277 case ENC_STATE_AVAIL:
279 assert(p_dirac_params->
p_encoder->enc_buf.size > 0);
288 p_dirac_params->
p_encoder->enc_buf.size);
290 p_dirac_params->
p_encoder->enc_buf.buffer,
291 p_dirac_params->
p_encoder->enc_buf.size);
295 if (state == ENC_STATE_EOS) {
302 if (p_dirac_params->
p_encoder->enc_pparams.pnum == -1)
312 if (p_dirac_params->
p_encoder->enc_pparams.ptype == INTRA_PICTURE &&
313 p_dirac_params->
p_encoder->enc_pparams.rtype == REFERENCE_PICTURE)
323 case ENC_STATE_BUFFER:
327 case ENC_STATE_INVALID:
329 "Unrecoverable Dirac Encoder Error. Quitting...\n");
341 last_frame_in_sequence = 1;
345 if (!p_next_output_frame)
348 memcpy(frame, p_next_output_frame->
p_encbuf, p_next_output_frame->
size);
354 enc_size = p_next_output_frame->
size;
358 if (last_frame_in_sequence && p_dirac_params->
enc_buf_size > 0) {
359 memcpy(frame + enc_size, p_dirac_params->
enc_buf,
377 dirac_encoder_close(p_dirac_params->
p_encoder);