Go to the documentation of this file.
82 ht[
i].bits, ht[
i].values,
83 ht[
i].class == 1,
s->avctx);
87 if (ht[
i].
class < 2) {
88 memcpy(
s->raw_huffman_lengths[ht[
i].class][ht[
i].index],
90 memcpy(
s->raw_huffman_values[ht[
i].class][ht[
i].index],
91 ht[
i].values, ht[
i].length);
101 if (
len > 14 && buf[12] == 1)
102 s->interlace_polarity = 1;
103 if (
len > 14 && buf[12] == 2)
104 s->interlace_polarity = 0;
123 if (!
s->picture_ptr) {
127 s->picture_ptr =
s->picture;
139 s->first_picture = 1;
149 if (
s->extern_huff) {
155 "error using external huffman table, switching back to internal\n");
161 s->interlace_polarity = 1;
165 s->interlace_polarity = 1;
172 if (
s->smv_frames_per_jpeg <= 0) {
216 for (
i = 0;
i < 64;
i++) {
218 if (
s->quant_matrixes[
index][
i] == 0) {
220 av_log(
s->avctx, log_level,
"dqt: 0 quant value\n");
228 s->quant_matrixes[
index][8]) >> 1;
231 len -= 1 + 64 * (1+pr);
240 uint8_t bits_table[17];
241 uint8_t val_table[256];
261 for (
i = 1;
i <= 16;
i++) {
266 if (len < n || n > 256)
269 for (
i = 0;
i < n;
i++) {
280 val_table,
class > 0,
s->avctx)) < 0)
286 val_table, 0,
s->avctx)) < 0)
290 for (
i = 0;
i < 16;
i++)
291 s->raw_huffman_lengths[
class][
index][
i] = bits_table[
i + 1];
293 s->raw_huffman_values[
class][
index][
i] = val_table[
i];
306 memset(
s->upscale_h, 0,
sizeof(
s->upscale_h));
307 memset(
s->upscale_v, 0,
sizeof(
s->upscale_v));
317 if (
s->avctx->bits_per_raw_sample !=
bits) {
319 s->avctx->bits_per_raw_sample =
bits;
324 if (
bits == 9 && !
s->pegasus_rct)
327 if(
s->lossless &&
s->avctx->lowres){
336 if (
s->interlaced &&
s->width ==
width &&
s->height ==
height + 1)
342 if (
s->buf_size && (
width + 7) / 8 * ((
height + 7) / 8) >
s->buf_size * 4LL)
346 if (nb_components <= 0 ||
349 if (
s->interlaced && (
s->bottom_field == !
s->interlace_polarity)) {
350 if (nb_components !=
s->nb_components) {
352 "nb_components changing in interlaced picture\n");
356 if (
s->ls && !(
bits <= 8 || nb_components == 1)) {
358 "JPEG-LS that is not <= 8 "
359 "bits/component or 16-bit gray");
362 if (
len != 8 + 3 * nb_components) {
363 av_log(
s->avctx,
AV_LOG_ERROR,
"decode_sof0: error, len(%d) mismatch %d components\n",
len, nb_components);
367 s->nb_components = nb_components;
370 for (
i = 0;
i < nb_components;
i++) {
376 if (h_count[
i] >
s->h_max)
377 s->h_max = h_count[
i];
378 if (v_count[
i] >
s->v_max)
379 s->v_max = v_count[
i];
381 if (
s->quant_index[
i] >= 4) {
385 if (!h_count[
i] || !v_count[
i]) {
387 "Invalid sampling factor in component %d %d:%d\n",
388 i, h_count[
i], v_count[
i]);
393 i, h_count[
i], v_count[
i],
394 s->component_id[
i],
s->quant_index[
i]);
396 if ( nb_components == 4
397 &&
s->component_id[0] ==
'C' - 1
398 &&
s->component_id[1] ==
'M' - 1
399 &&
s->component_id[2] ==
'Y' - 1
400 &&
s->component_id[3] ==
'K' - 1)
401 s->adobe_transform = 0;
403 if (
s->ls && (
s->h_max > 1 ||
s->v_max > 1)) {
409 if (nb_components == 2) {
423 memcmp(
s->h_count, h_count,
sizeof(h_count)) ||
424 memcmp(
s->v_count, v_count,
sizeof(v_count))) {
430 memcpy(
s->h_count, h_count,
sizeof(h_count));
431 memcpy(
s->v_count, v_count,
sizeof(v_count));
436 if (
s->first_picture &&
437 (
s->multiscope != 2 ||
s->avctx->time_base.den >= 25 *
s->avctx->time_base.num) &&
438 s->orig_height != 0 &&
439 s->height < ((
s->orig_height * 3) / 4)) {
441 s->bottom_field =
s->interlace_polarity;
442 s->picture_ptr->interlaced_frame = 1;
443 s->picture_ptr->top_field_first = !
s->interlace_polarity;
451 if ((
s->avctx->codec_tag ==
MKTAG(
'A',
'V',
'R',
'n') ||
452 s->avctx->codec_tag ==
MKTAG(
'A',
'V',
'D',
'J')) &&
456 s->first_picture = 0;
462 s->avctx->height =
s->avctx->coded_height /
s->smv_frames_per_jpeg;
463 if (
s->avctx->height <= 0)
467 if (
s->got_picture &&
s->interlaced && (
s->bottom_field == !
s->interlace_polarity)) {
468 if (
s->progressive) {
473 if (
s->v_max == 1 &&
s->h_max == 1 &&
s->lossless==1 && (nb_components==3 || nb_components==4))
475 else if (!
s->lossless)
478 pix_fmt_id = ((unsigned)
s->h_count[0] << 28) | (
s->v_count[0] << 24) |
479 (
s->h_count[1] << 20) | (
s->v_count[1] << 16) |
480 (
s->h_count[2] << 12) | (
s->v_count[2] << 8) |
481 (
s->h_count[3] << 4) |
s->v_count[3];
485 if (!(pix_fmt_id & 0xD0D0D0D0))
486 pix_fmt_id -= (pix_fmt_id & 0xF0F0F0F0) >> 1;
487 if (!(pix_fmt_id & 0x0D0D0D0D))
488 pix_fmt_id -= (pix_fmt_id & 0x0F0F0F0F) >> 1;
490 for (
i = 0;
i < 8;
i++) {
491 int j = 6 + (
i&1) - (
i&6);
492 int is = (pix_fmt_id >> (4*
i)) & 0xF;
493 int js = (pix_fmt_id >> (4*j)) & 0xF;
495 if (
is == 1 && js != 2 && (i < 2 || i > 5))
496 js = (pix_fmt_id >> ( 8 + 4*(
i&1))) & 0xF;
497 if (
is == 1 && js != 2 && (i < 2 || i > 5))
498 js = (pix_fmt_id >> (16 + 4*(
i&1))) & 0xF;
500 if (
is == 1 && js == 2) {
501 if (
i & 1)
s->upscale_h[j/2] = 1;
502 else s->upscale_v[j/2] = 1;
507 if (pix_fmt_id != 0x11110000 && pix_fmt_id != 0x11000000)
511 switch (pix_fmt_id) {
521 if (
s->adobe_transform == 0
522 ||
s->component_id[0] ==
'R' - 1 &&
s->component_id[1] ==
'G' - 1 &&
s->component_id[2] ==
'B' - 1) {
536 if (
s->adobe_transform == 0 &&
s->bits <= 8) {
547 if (
s->adobe_transform == 0 &&
s->bits <= 8) {
549 s->upscale_v[1] =
s->upscale_v[2] = 1;
550 s->upscale_h[1] =
s->upscale_h[2] = 1;
551 }
else if (
s->adobe_transform == 2 &&
s->bits <= 8) {
553 s->upscale_v[1] =
s->upscale_v[2] = 1;
554 s->upscale_h[1] =
s->upscale_h[2] = 1;
595 if (
s->component_id[0] ==
'Q' &&
s->component_id[1] ==
'F' &&
s->component_id[2] ==
'A') {
599 s->upscale_v[0] =
s->upscale_v[1] = 1;
601 if (pix_fmt_id == 0x14111100)
602 s->upscale_v[1] =
s->upscale_v[2] = 1;
610 if (
s->component_id[0] ==
'Q' &&
s->component_id[1] ==
'F' &&
s->component_id[2] ==
'A') {
614 s->upscale_h[0] =
s->upscale_h[1] = 1;
626 s->upscale_h[1] =
s->upscale_h[2] = 2;
642 if (pix_fmt_id == 0x42111100) {
645 s->upscale_h[1] =
s->upscale_h[2] = 1;
646 }
else if (pix_fmt_id == 0x24111100) {
649 s->upscale_v[1] =
s->upscale_v[2] = 1;
650 }
else if (pix_fmt_id == 0x23111100) {
653 s->upscale_v[1] =
s->upscale_v[2] = 2;
665 memset(
s->upscale_h, 0,
sizeof(
s->upscale_h));
666 memset(
s->upscale_v, 0,
sizeof(
s->upscale_v));
678 memset(
s->upscale_h, 0,
sizeof(
s->upscale_h));
679 memset(
s->upscale_v, 0,
sizeof(
s->upscale_v));
680 if (
s->nb_components == 3) {
682 }
else if (
s->nb_components != 1) {
685 }
else if ((
s->palette_index ||
s->force_pal8) &&
s->bits <= 8)
687 else if (
s->bits <= 8)
699 if (
s->avctx->pix_fmt ==
s->hwaccel_sw_pix_fmt && !size_change) {
700 s->avctx->pix_fmt =
s->hwaccel_pix_fmt;
703 #if CONFIG_MJPEG_NVDEC_HWACCEL
706 #if CONFIG_MJPEG_VAAPI_HWACCEL
713 if (
s->hwaccel_pix_fmt < 0)
716 s->hwaccel_sw_pix_fmt =
s->avctx->pix_fmt;
717 s->avctx->pix_fmt =
s->hwaccel_pix_fmt;
722 s->picture_ptr->key_frame = 1;
731 s->picture_ptr->key_frame = 1;
736 memset(
s->picture_ptr->data[1], 0, 1024);
738 for (
i = 0;
i < 4;
i++)
739 s->linesize[
i] =
s->picture_ptr->linesize[
i] <<
s->interlaced;
741 ff_dlog(
s->avctx,
"%d %d %d %d %d %d\n",
742 s->width,
s->height,
s->linesize[0],
s->linesize[1],
743 s->interlaced,
s->avctx->height);
747 if ((
s->rgb && !
s->lossless && !
s->ls) ||
748 (!
s->rgb &&
s->ls &&
s->nb_components > 1) ||
756 if (
s->progressive) {
757 int bw = (
width +
s->h_max * 8 - 1) / (
s->h_max * 8);
758 int bh = (
height +
s->v_max * 8 - 1) / (
s->v_max * 8);
759 for (
i = 0;
i <
s->nb_components;
i++) {
760 int size = bw * bh *
s->h_count[
i] *
s->v_count[
i];
765 if (!
s->blocks[
i] || !
s->last_nnz[
i])
767 s->block_stride[
i] = bw *
s->h_count[
i];
769 memset(
s->coefs_finished, 0,
sizeof(
s->coefs_finished));
772 if (
s->avctx->hwaccel) {
773 s->hwaccel_picture_private =
774 av_mallocz(
s->avctx->hwaccel->frame_priv_data_size);
775 if (!
s->hwaccel_picture_private)
778 ret =
s->avctx->hwaccel->start_frame(
s->avctx,
s->raw_image_buffer,
779 s->raw_image_buffer_size);
791 if (code < 0 || code > 16) {
793 "mjpeg_decode_dc: bad vlc: %d:%d (%p)\n",
794 0, dc_index, &
s->vlcs[0][dc_index]);
806 int dc_index,
int ac_index, uint16_t *quant_matrix)
812 if (
val == 0xfffff) {
816 val =
val * (unsigned)quant_matrix[0] +
s->last_dc[component];
818 s->last_dc[component] =
val;
827 i += ((unsigned)
code) >> 4;
835 int sign = (~cache) >> 31;
845 j =
s->scantable.permutated[
i];
855 int component,
int dc_index,
856 uint16_t *quant_matrix,
int Al)
859 s->bdsp.clear_block(
block);
861 if (
val == 0xfffff) {
865 val = (
val * (quant_matrix[0] << Al)) +
s->last_dc[component];
866 s->last_dc[component] =
val;
873 uint8_t *last_nnz,
int ac_index,
874 uint16_t *quant_matrix,
875 int ss,
int se,
int Al,
int *EOBRUN)
887 for (
i =
ss; ;
i++) {
900 int sign = (~cache) >> 31;
908 j =
s->scantable.permutated[
se];
915 j =
s->scantable.permutated[
i];
945 #define REFINE_BIT(j) { \
946 UPDATE_CACHE(re, &s->gb); \
947 sign = block[j] >> 15; \
948 block[j] += SHOW_UBITS(re, &s->gb, 1) * \
949 ((quant_matrix[i] ^ sign) - sign) << Al; \
950 LAST_SKIP_BITS(re, &s->gb, 1); \
958 av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i); \
963 j = s->scantable.permutated[i]; \
966 else if (run-- == 0) \
973 int ac_index, uint16_t *quant_matrix,
974 int ss,
int se,
int Al,
int *EOBRUN)
977 int last =
FFMIN(
se, *last_nnz);
993 j =
s->scantable.permutated[
i];
1024 for (;
i <= last;
i++) {
1025 j =
s->scantable.permutated[
i];
1041 if (
s->restart_interval) {
1045 for (
i = 0;
i < nb_components;
i++)
1046 s->last_dc[
i] = (4 <<
s->bits);
1051 if (
s->restart_count == 0) {
1059 for (
i = 0;
i < nb_components;
i++)
1060 s->last_dc[
i] = (4 <<
s->bits);
1076 int left[4], top[4], topleft[4];
1077 const int linesize =
s->linesize[0];
1078 const int mask = ((1 <<
s->bits) - 1) << point_transform;
1079 int resync_mb_y = 0;
1080 int resync_mb_x = 0;
1083 if (!
s->bayer &&
s->nb_components < 3)
1085 if (
s->bayer &&
s->nb_components > 2)
1087 if (
s->nb_components <= 0 ||
s->nb_components > 4)
1089 if (
s->v_max != 1 ||
s->h_max != 1 || !
s->lossless)
1093 s->restart_count =
s->restart_interval;
1095 if (
s->restart_interval == 0)
1096 s->restart_interval = INT_MAX;
1099 width =
s->mb_width / nb_components;
1104 if (!
s->ljpeg_buffer)
1109 for (
i = 0;
i < 4;
i++)
1112 for (mb_y = 0; mb_y <
s->mb_height; mb_y++) {
1113 uint8_t *ptr =
s->picture_ptr->data[0] + (linesize * mb_y);
1115 if (
s->interlaced &&
s->bottom_field)
1116 ptr += linesize >> 1;
1118 for (
i = 0;
i < 4;
i++)
1121 if ((mb_y *
s->width) %
s->restart_interval == 0) {
1122 for (
i = 0;
i < 6;
i++)
1123 vpred[
i] = 1 << (
s->bits-1);
1126 for (mb_x = 0; mb_x <
width; mb_x++) {
1134 if (
s->restart_interval && !
s->restart_count){
1135 s->restart_count =
s->restart_interval;
1139 top[
i] =
left[
i]= topleft[
i]= 1 << (
s->bits - 1);
1141 if (mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x || !mb_x)
1142 modified_predictor = 1;
1144 for (
i=0;
i<nb_components;
i++) {
1147 topleft[
i] = top[
i];
1154 if (!
s->bayer || mb_x) {
1164 mask & (
pred + (unsigned)(
dc * (1 << point_transform)));
1167 if (
s->restart_interval && !--
s->restart_count) {
1172 if (
s->rct &&
s->nb_components == 4) {
1173 for (mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1174 ptr[4*mb_x + 2] =
buffer[mb_x][0] - ((
buffer[mb_x][1] +
buffer[mb_x][2] - 0x200) >> 2);
1175 ptr[4*mb_x + 1] =
buffer[mb_x][1] + ptr[4*mb_x + 2];
1176 ptr[4*mb_x + 3] =
buffer[mb_x][2] + ptr[4*mb_x + 2];
1177 ptr[4*mb_x + 0] =
buffer[mb_x][3];
1179 }
else if (
s->nb_components == 4) {
1180 for(
i=0;
i<nb_components;
i++) {
1181 int c=
s->comp_index[
i];
1183 for(mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1186 }
else if(
s->bits == 9) {
1189 for(mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1190 ((uint16_t*)ptr)[4*mb_x+
c] =
buffer[mb_x][
i];
1194 }
else if (
s->rct) {
1195 for (mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1196 ptr[3*mb_x + 1] =
buffer[mb_x][0] - ((
buffer[mb_x][1] +
buffer[mb_x][2] - 0x200) >> 2);
1197 ptr[3*mb_x + 0] =
buffer[mb_x][1] + ptr[3*mb_x + 1];
1198 ptr[3*mb_x + 2] =
buffer[mb_x][2] + ptr[3*mb_x + 1];
1200 }
else if (
s->pegasus_rct) {
1201 for (mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1203 ptr[3*mb_x + 0] =
buffer[mb_x][1] + ptr[3*mb_x + 1];
1204 ptr[3*mb_x + 2] =
buffer[mb_x][2] + ptr[3*mb_x + 1];
1206 }
else if (
s->bayer) {
1207 if (nb_components == 1) {
1209 for (mb_x = 0; mb_x <
width; mb_x++)
1210 ((uint16_t*)ptr)[mb_x] =
buffer[mb_x][0];
1211 }
else if (nb_components == 2) {
1212 for (mb_x = 0; mb_x <
width; mb_x++) {
1213 ((uint16_t*)ptr)[2*mb_x + 0] =
buffer[mb_x][0];
1214 ((uint16_t*)ptr)[2*mb_x + 1] =
buffer[mb_x][1];
1218 for(
i=0;
i<nb_components;
i++) {
1219 int c=
s->comp_index[
i];
1221 for(mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1224 }
else if(
s->bits == 9) {
1227 for(mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1228 ((uint16_t*)ptr)[3*mb_x+2-
c] =
buffer[mb_x][
i];
1238 int point_transform,
int nb_components)
1240 int i, mb_x, mb_y,
mask;
1241 int bits= (
s->bits+7)&~7;
1242 int resync_mb_y = 0;
1243 int resync_mb_x = 0;
1245 point_transform +=
bits -
s->bits;
1246 mask = ((1 <<
s->bits) - 1) << point_transform;
1248 av_assert0(nb_components>=1 && nb_components<=4);
1250 for (mb_y = 0; mb_y <
s->mb_height; mb_y++) {
1251 for (mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1256 if (
s->restart_interval && !
s->restart_count){
1257 s->restart_count =
s->restart_interval;
1262 if(!mb_x || mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x || s->
interlaced){
1263 int toprow = mb_y == resync_mb_y || mb_y == resync_mb_y+1 && mb_x < resync_mb_x;
1264 int leftcol = !mb_x || mb_y == resync_mb_y && mb_x == resync_mb_x;
1265 for (
i = 0;
i < nb_components;
i++) {
1268 int n,
h, v, x, y,
c, j, linesize;
1269 n =
s->nb_blocks[
i];
1270 c =
s->comp_index[
i];
1275 linesize=
s->linesize[
c];
1277 if(
bits>8) linesize /= 2;
1279 for(j=0; j<n; j++) {
1285 if (
h * mb_x + x >=
s->width
1286 || v * mb_y + y >=
s->height) {
1288 }
else if (
bits<=8) {
1289 ptr =
s->picture_ptr->data[
c] + (linesize * (v * mb_y + y)) + (
h * mb_x + x);
1291 if(x==0 && leftcol){
1297 if(x==0 && leftcol){
1298 pred= ptr[-linesize];
1304 if (
s->interlaced &&
s->bottom_field)
1305 ptr += linesize >> 1;
1307 *ptr=
pred + ((unsigned)
dc << point_transform);
1309 ptr16 = (uint16_t*)(
s->picture_ptr->data[
c] + 2*(linesize * (v * mb_y + y)) + 2*(
h * mb_x + x));
1311 if(x==0 && leftcol){
1317 if(x==0 && leftcol){
1318 pred= ptr16[-linesize];
1324 if (
s->interlaced &&
s->bottom_field)
1325 ptr16 += linesize >> 1;
1327 *ptr16=
pred + ((unsigned)
dc << point_transform);
1336 for (
i = 0;
i < nb_components;
i++) {
1339 int n,
h, v, x, y,
c, j, linesize,
dc;
1340 n =
s->nb_blocks[
i];
1341 c =
s->comp_index[
i];
1346 linesize =
s->linesize[
c];
1348 if(
bits>8) linesize /= 2;
1350 for (j = 0; j < n; j++) {
1356 if (
h * mb_x + x >=
s->width
1357 || v * mb_y + y >=
s->height) {
1359 }
else if (
bits<=8) {
1360 ptr =
s->picture_ptr->data[
c] +
1361 (linesize * (v * mb_y + y)) +
1366 *ptr =
pred + ((unsigned)
dc << point_transform);
1368 ptr16 = (uint16_t*)(
s->picture_ptr->data[
c] + 2*(linesize * (v * mb_y + y)) + 2*(
h * mb_x + x));
1372 *ptr16=
pred + ((unsigned)
dc << point_transform);
1382 if (
s->restart_interval && !--
s->restart_count) {
1392 uint8_t *dst,
const uint8_t *
src,
1393 int linesize,
int lowres)
1396 case 0:
s->hdsp.put_pixels_tab[1][0](dst,
src, linesize, 8);
1402 case 3: *dst = *
src;
1409 int block_x, block_y;
1410 int size = 8 >>
s->avctx->lowres;
1412 for (block_y=0; block_y<
size; block_y++)
1413 for (block_x=0; block_x<
size; block_x++)
1414 *(uint16_t*)(ptr + 2*block_x + block_y*linesize) <<= 16 -
s->bits;
1416 for (block_y=0; block_y<
size; block_y++)
1417 for (block_x=0; block_x<
size; block_x++)
1418 *(ptr + block_x + block_y*linesize) <<= 8 -
s->bits;
1423 int Al,
const uint8_t *mb_bitmask,
1424 int mb_bitmask_size,
1427 int i, mb_x, mb_y, chroma_h_shift, chroma_v_shift, chroma_width, chroma_height;
1432 int bytes_per_pixel = 1 + (
s->bits > 8);
1435 if (mb_bitmask_size != (
s->mb_width *
s->mb_height + 7)>>3) {
1439 init_get_bits(&mb_bitmask_gb, mb_bitmask,
s->mb_width *
s->mb_height);
1442 s->restart_count = 0;
1449 for (
i = 0;
i < nb_components;
i++) {
1450 int c =
s->comp_index[
i];
1451 data[
c] =
s->picture_ptr->data[
c];
1452 reference_data[
c] = reference ? reference->
data[
c] :
NULL;
1453 linesize[
c] =
s->linesize[
c];
1454 s->coefs_finished[
c] |= 1;
1457 for (mb_y = 0; mb_y <
s->mb_height; mb_y++) {
1458 for (mb_x = 0; mb_x <
s->mb_width; mb_x++) {
1461 if (
s->restart_interval && !
s->restart_count)
1462 s->restart_count =
s->restart_interval;
1469 for (
i = 0;
i < nb_components;
i++) {
1471 int n,
h, v, x, y,
c, j;
1473 n =
s->nb_blocks[
i];
1474 c =
s->comp_index[
i];
1479 for (j = 0; j < n; j++) {
1480 block_offset = (((linesize[
c] * (v * mb_y + y) * 8) +
1481 (
h * mb_x + x) * 8 * bytes_per_pixel) >>
s->avctx->lowres);
1483 if (
s->interlaced &&
s->bottom_field)
1484 block_offset += linesize[
c] >> 1;
1485 if ( 8*(
h * mb_x + x) < ((
c == 1) || (
c == 2) ? chroma_width :
s->width)
1486 && 8*(v * mb_y + y) < ((
c == 1) || (
c == 2) ? chroma_height :
s->height)) {
1487 ptr =
data[
c] + block_offset;
1490 if (!
s->progressive) {
1494 linesize[
c],
s->avctx->lowres);
1497 s->bdsp.clear_block(
s->block);
1499 s->dc_index[
i],
s->ac_index[
i],
1500 s->quant_matrixes[
s->quant_sindex[
i]]) < 0) {
1502 "error y=%d x=%d\n", mb_y, mb_x);
1506 s->idsp.idct_put(ptr, linesize[
c],
s->block);
1512 int block_idx =
s->block_stride[
c] * (v * mb_y + y) +
1514 int16_t *
block =
s->blocks[
c][block_idx];
1517 s->quant_matrixes[
s->quant_sindex[
i]][0] << Al;
1519 s->quant_matrixes[
s->quant_sindex[
i]],
1522 "error y=%d x=%d\n", mb_y, mb_x);
1526 ff_dlog(
s->avctx,
"mb: %d %d processed\n", mb_y, mb_x);
1527 ff_dlog(
s->avctx,
"%d %d %d %d %d %d %d %d \n",
1528 mb_x, mb_y, x, y,
c,
s->bottom_field,
1529 (v * mb_y + y) * 8, (
h * mb_x + x) * 8);
1544 int se,
int Ah,
int Al)
1548 int c =
s->comp_index[0];
1549 uint16_t *quant_matrix =
s->quant_matrixes[
s->quant_sindex[0]];
1552 if (se < ss || se > 63) {
1559 s->coefs_finished[
c] |= (2ULL <<
se) - (1ULL <<
ss);
1561 s->restart_count = 0;
1563 for (mb_y = 0; mb_y <
s->mb_height; mb_y++) {
1564 int block_idx = mb_y *
s->block_stride[
c];
1565 int16_t (*
block)[64] = &
s->blocks[
c][block_idx];
1566 uint8_t *last_nnz = &
s->last_nnz[
c][block_idx];
1568 av_log(
s->avctx,
AV_LOG_ERROR,
"bitstream truncated in mjpeg_decode_scan_progressive_ac\n");
1571 for (mb_x = 0; mb_x <
s->mb_width; mb_x++,
block++, last_nnz++) {
1573 if (
s->restart_interval && !
s->restart_count)
1574 s->restart_count =
s->restart_interval;
1578 quant_matrix,
ss,
se, Al, &EOBRUN);
1581 quant_matrix,
ss,
se, Al, &EOBRUN);
1587 "error y=%d x=%d\n", mb_y, mb_x);
1602 const int bytes_per_pixel = 1 + (
s->bits > 8);
1603 const int block_size =
s->lossless ? 1 : 8;
1605 for (
c = 0;
c <
s->nb_components;
c++) {
1606 uint8_t *
data =
s->picture_ptr->data[
c];
1607 int linesize =
s->linesize[
c];
1608 int h =
s->h_max /
s->h_count[
c];
1609 int v =
s->v_max /
s->v_count[
c];
1610 int mb_width = (
s->width +
h * block_size - 1) / (
h * block_size);
1611 int mb_height = (
s->height + v * block_size - 1) / (v * block_size);
1613 if (~
s->coefs_finished[
c])
1616 if (
s->interlaced &&
s->bottom_field)
1617 data += linesize >> 1;
1619 for (mb_y = 0; mb_y < mb_height; mb_y++) {
1620 uint8_t *ptr =
data + (mb_y * linesize * 8 >>
s->avctx->lowres);
1621 int block_idx = mb_y *
s->block_stride[
c];
1622 int16_t (*
block)[64] = &
s->blocks[
c][block_idx];
1623 for (mb_x = 0; mb_x < mb_width; mb_x++,
block++) {
1624 s->idsp.idct_put(ptr, linesize, *
block);
1627 ptr += bytes_per_pixel*8 >>
s->avctx->lowres;
1634 int mb_bitmask_size,
const AVFrame *reference)
1638 const int block_size =
s->lossless ? 1 : 8;
1639 int ilv, prev_shift;
1641 if (!
s->got_picture) {
1643 "Can not process SOS before SOF, skipping\n");
1648 if (reference->
width !=
s->picture_ptr->width ||
1649 reference->
height !=
s->picture_ptr->height ||
1650 reference->
format !=
s->picture_ptr->format) {
1661 "decode_sos: nb_components (%d)",
1665 if (
len != 6 + 2 * nb_components) {
1669 for (
i = 0;
i < nb_components;
i++) {
1674 if (
id ==
s->component_id[
index])
1676 if (
index ==
s->nb_components) {
1678 "decode_sos: index(%d) out of components\n",
index);
1682 if (
s->avctx->codec_tag ==
MKTAG(
'M',
'T',
'S',
'J')
1683 && nb_components == 3 &&
s->nb_components == 3 &&
i)
1686 s->quant_sindex[
i] =
s->quant_index[
index];
1688 s->h_scount[
i] =
s->h_count[
index];
1689 s->v_scount[
i] =
s->v_count[
index];
1691 if((nb_components == 1 || nb_components == 3) &&
s->nb_components == 3 &&
s->avctx->pix_fmt ==
AV_PIX_FMT_GBR24P)
1699 if (
s->dc_index[
i] < 0 ||
s->ac_index[
i] < 0 ||
1700 s->dc_index[
i] >= 4 ||
s->ac_index[
i] >= 4)
1702 if (!
s->vlcs[0][
s->dc_index[
i]].table || !(
s->progressive ?
s->vlcs[2][
s->ac_index[0]].table :
s->vlcs[1][
s->ac_index[
i]].table))
1708 if(
s->avctx->codec_tag !=
AV_RL32(
"CJPG")){
1712 prev_shift = point_transform = 0;
1714 if (nb_components > 1) {
1716 s->mb_width = (
s->width +
s->h_max * block_size - 1) / (
s->h_max * block_size);
1717 s->mb_height = (
s->height +
s->v_max * block_size - 1) / (
s->v_max * block_size);
1718 }
else if (!
s->ls) {
1719 h =
s->h_max /
s->h_scount[0];
1720 v =
s->v_max /
s->v_scount[0];
1721 s->mb_width = (
s->width +
h * block_size - 1) / (
h * block_size);
1722 s->mb_height = (
s->height + v * block_size - 1) / (v * block_size);
1723 s->nb_blocks[0] = 1;
1730 s->lossless ?
"lossless" :
"sequential DCT",
s->rgb ?
"RGB" :
"",
1731 predictor, point_transform, ilv,
s->bits,
s->mjpb_skiptosod,
1732 s->pegasus_rct ?
"PRCT" : (
s->rct ?
"RCT" :
""), nb_components);
1736 for (
i =
s->mjpb_skiptosod;
i > 0;
i--)
1740 for (
i = 0;
i < nb_components;
i++)
1741 s->last_dc[
i] = (4 <<
s->bits);
1743 if (
s->avctx->hwaccel) {
1746 s->raw_scan_buffer_size >= bytes_to_start);
1748 ret =
s->avctx->hwaccel->decode_slice(
s->avctx,
1749 s->raw_scan_buffer + bytes_to_start,
1750 s->raw_scan_buffer_size - bytes_to_start);
1754 }
else if (
s->lossless) {
1756 if (CONFIG_JPEGLS_DECODER &&
s->ls) {
1761 point_transform, ilv)) < 0)
1764 if (
s->rgb ||
s->bayer) {
1770 nb_components)) < 0)
1779 point_transform)) < 0)
1783 prev_shift, point_transform,
1784 mb_bitmask, mb_bitmask_size, reference)) < 0)
1789 if (
s->interlaced &&
1798 s->bottom_field ^= 1;
1816 s->restart_count = 0;
1818 s->restart_interval);
1865 int t_w, t_h, v1, v2;
1873 s->avctx->sample_aspect_ratio.num =
get_bits(&
s->gb, 16);
1874 s->avctx->sample_aspect_ratio.den =
get_bits(&
s->gb, 16);
1875 if (
s->avctx->sample_aspect_ratio.num <= 0
1876 ||
s->avctx->sample_aspect_ratio.den <= 0) {
1877 s->avctx->sample_aspect_ratio.num = 0;
1878 s->avctx->sample_aspect_ratio.den = 1;
1883 "mjpeg: JFIF header found (version: %x.%x) SAR=%d/%d\n",
1885 s->avctx->sample_aspect_ratio.num,
1886 s->avctx->sample_aspect_ratio.den);
1894 if (
len -10 - (t_w * t_h * 3) > 0)
1895 len -= t_w * t_h * 3;
1912 av_log(
s->avctx,
AV_LOG_INFO,
"mjpeg: Adobe header found, transform=%d\n",
s->adobe_transform);
1919 int pegasus_rct =
s->pegasus_rct;
1922 "Pegasus lossless jpeg header found\n");
1942 if (
rgb !=
s->rgb || pegasus_rct !=
s->pegasus_rct) {
1948 s->pegasus_rct = pegasus_rct;
1988 }
else if (
type == 1) {
2000 if (!(
flags & 0x04)) {
2010 int ret, le, ifd_offset, bytes_read;
2043 if ((
s->start_code ==
APP1) && (
len > (0x28 - 8))) {
2066 unsigned nummarkers;
2086 if (nummarkers == 0) {
2089 }
else if (
s->iccnum != 0 && nummarkers !=
s->iccnum) {
2092 }
else if (seqno > nummarkers) {
2098 if (
s->iccnum == 0) {
2103 s->iccnum = nummarkers;
2106 if (
s->iccentries[seqno - 1].data) {
2111 s->iccentries[seqno - 1].length =
len;
2113 if (!
s->iccentries[seqno - 1].data) {
2123 if (
s->iccread >
s->iccnum)
2131 "mjpeg: error, decode_app parser read over the end\n");
2147 for (
i = 0;
i <
len - 2;
i++)
2149 if (
i > 0 && cbuf[
i - 1] ==
'\n')
2158 if (!strncmp(cbuf,
"AVID", 4)) {
2160 }
else if (!strcmp(cbuf,
"CS=ITU601"))
2162 else if ((!strncmp(cbuf,
"Intel(R) JPEG Library, version 1", 32) &&
s->avctx->codec_tag) ||
2163 (!strncmp(cbuf,
"Metasoft MJPEG Codec", 20)))
2165 else if (!strcmp(cbuf,
"MULTISCOPE II")) {
2166 s->avctx->sample_aspect_ratio = (
AVRational) { 1, 2 };
2178 static int find_marker(
const uint8_t **pbuf_ptr,
const uint8_t *buf_end)
2180 const uint8_t *buf_ptr;
2185 buf_ptr = *pbuf_ptr;
2186 while (buf_end - buf_ptr > 1) {
2189 if ((v == 0xff) && (v2 >=
SOF0) && (v2 <=
COM) && buf_ptr < buf_end) {
2198 ff_dlog(
NULL,
"find_marker skipped %d bytes\n", skipped);
2199 *pbuf_ptr = buf_ptr;
2204 const uint8_t **buf_ptr,
const uint8_t *buf_end,
2205 const uint8_t **unescaped_buf_ptr,
2206 int *unescaped_buf_size)
2217 const uint8_t *
src = *buf_ptr;
2218 const uint8_t *ptr =
src;
2219 uint8_t *dst =
s->buffer;
2221 #define copy_data_segment(skip) do { \
2222 ptrdiff_t length = (ptr - src) - (skip); \
2224 memcpy(dst, src, length); \
2234 while (ptr < buf_end) {
2235 uint8_t x = *(ptr++);
2239 while (ptr < buf_end && x == 0xff) {
2254 if (x < RST0 || x >
RST7) {
2264 #undef copy_data_segment
2266 *unescaped_buf_ptr =
s->buffer;
2267 *unescaped_buf_size = dst -
s->buffer;
2268 memset(
s->buffer + *unescaped_buf_size, 0,
2272 (buf_end - *buf_ptr) - (dst -
s->buffer));
2274 const uint8_t *
src = *buf_ptr;
2275 uint8_t *dst =
s->buffer;
2281 while (
src + t < buf_end) {
2282 uint8_t x =
src[t++];
2284 while ((
src + t < buf_end) && x == 0xff)
2297 uint8_t x =
src[
b++];
2299 if (x == 0xFF &&
b < t) {
2311 *unescaped_buf_ptr = dst;
2312 *unescaped_buf_size = (bit_count + 7) >> 3;
2313 memset(
s->buffer + *unescaped_buf_size, 0,
2316 *unescaped_buf_ptr = *buf_ptr;
2317 *unescaped_buf_size = buf_end - *buf_ptr;
2327 if (
s->iccentries) {
2328 for (
i = 0;
i <
s->iccnum;
i++)
2344 if (
s->smv_next_frame > 0) {
2365 s->smv_next_frame = (
s->smv_next_frame + 1) %
s->smv_frames_per_jpeg;
2367 if (
s->smv_next_frame == 0)
2383 #if CONFIG_SP5X_DECODER || CONFIG_AMV_DECODER
2392 s->buf_size =
s->pkt->size;
2400 const uint8_t *buf_end, *buf_ptr;
2401 const uint8_t *unescaped_buf_ptr;
2403 int unescaped_buf_size;
2417 s->adobe_transform = -1;
2426 buf_ptr =
s->pkt->data;
2427 buf_end =
s->pkt->data +
s->pkt->size;
2428 while (buf_ptr < buf_end) {
2432 &unescaped_buf_size);
2436 }
else if (unescaped_buf_size > INT_MAX / 8) {
2438 "MJPEG packet 0x%x too big (%d/%d), corrupt data?\n",
2478 if (!CONFIG_JPEGLS_DECODER &&
2502 s->restart_interval = 0;
2503 s->restart_count = 0;
2504 s->raw_image_buffer = buf_ptr;
2505 s->raw_image_buffer_size = buf_end - buf_ptr;
2553 if (!CONFIG_JPEGLS_DECODER ||
2562 s->progressive &&
s->cur_scan &&
s->got_picture)
2565 if (!
s->got_picture) {
2567 "Found EOI before any SOF, ignoring\n");
2570 if (
s->interlaced) {
2571 s->bottom_field ^= 1;
2573 if (
s->bottom_field == !
s->interlace_polarity)
2579 goto the_end_no_picture;
2581 if (
s->avctx->hwaccel) {
2582 ret =
s->avctx->hwaccel->end_frame(
s->avctx);
2592 frame->pkt_dts =
s->pkt->dts;
2604 s->raw_scan_buffer = buf_ptr;
2605 s->raw_scan_buffer_size = buf_end - buf_ptr;
2632 "mjpeg: unsupported coding type (%x)\n",
start_code);
2640 "marker parser used %d bytes (%d bits)\n",
2643 if (
s->got_picture &&
s->cur_scan) {
2676 for (p = 0; p<
s->nb_components; p++) {
2677 uint8_t *
line =
s->picture_ptr->data[p];
2680 if (!
s->upscale_h[p])
2686 if (
s->upscale_v[p] == 1)
2689 for (
i = 0;
i <
h;
i++) {
2690 if (
s->upscale_h[p] == 1) {
2691 if (is16bit) ((uint16_t*)
line)[
w - 1] = ((uint16_t*)
line)[(
w - 1) / 2];
2699 }
else if (
s->upscale_h[p] == 2) {
2701 ((uint16_t*)
line)[
w - 1] = ((uint16_t*)
line)[(
w - 1) / 3];
2703 ((uint16_t*)
line)[
w - 2] = ((uint16_t*)
line)[
w - 1];
2713 line +=
s->linesize[p];
2738 for (p = 0; p <
s->nb_components; p++) {
2742 if (!
s->upscale_v[p])
2748 dst = &((uint8_t *)
s->picture_ptr->data[p])[(
h - 1) *
s->linesize[p]];
2750 uint8_t *
src1 = &((uint8_t *)
s->picture_ptr->data[p])[
i *
s->upscale_v[p] / (
s->upscale_v[p] + 1) *
s->linesize[p]];
2751 uint8_t *src2 = &((uint8_t *)
s->picture_ptr->data[p])[(
i + 1) *
s->upscale_v[p] / (
s->upscale_v[p] + 1) *
s->linesize[p]];
2752 if (
s->upscale_v[p] != 2 && (
src1 == src2 ||
i ==
h - 1)) {
2753 memcpy(dst,
src1,
w);
2758 dst -=
s->linesize[p];
2762 if (
s->flipped && !
s->rgb) {
2770 uint8_t *dst =
s->picture_ptr->data[
index];
2771 int w =
s->picture_ptr->width;
2772 int h =
s->picture_ptr->height;
2778 uint8_t *dst2 = dst +
s->picture_ptr->linesize[
index]*(
h-1);
2779 for (
i=0;
i<
h/2;
i++) {
2781 FFSWAP(
int, dst[j], dst2[j]);
2782 dst +=
s->picture_ptr->linesize[
index];
2783 dst2 -=
s->picture_ptr->linesize[
index];
2789 int w =
s->picture_ptr->width;
2790 int h =
s->picture_ptr->height;
2792 for (
i=0;
i<
h;
i++) {
2797 +
s->picture_ptr->linesize[
index]*
i;
2799 for (j=0; j<
w; j++) {
2801 int r = dst[0][j] * k;
2802 int g = dst[1][j] * k;
2803 int b = dst[2][j] * k;
2804 dst[0][j] =
g*257 >> 16;
2805 dst[1][j] =
b*257 >> 16;
2806 dst[2][j] =
r*257 >> 16;
2812 int w =
s->picture_ptr->width;
2813 int h =
s->picture_ptr->height;
2815 for (
i=0;
i<
h;
i++) {
2820 +
s->picture_ptr->linesize[
index]*
i;
2822 for (j=0; j<
w; j++) {
2824 int r = (255 - dst[0][j]) * k;
2825 int g = (128 - dst[1][j]) * k;
2826 int b = (128 - dst[2][j]) * k;
2827 dst[0][j] =
r*257 >> 16;
2828 dst[1][j] = (
g*257 >> 16) + 128;
2829 dst[2][j] = (
b*257 >> 16) + 128;
2838 stereo->
type =
s->stereo3d->type;
2839 stereo->
flags =
s->stereo3d->flags;
2844 if (
s->iccnum != 0 &&
s->iccnum ==
s->iccread) {
2851 for (
i = 0;
i <
s->iccnum;
i++)
2852 total_size +=
s->iccentries[
i].length;
2861 for (
i = 0;
i <
s->iccnum;
i++) {
2862 memcpy(sd->
data +
offset,
s->iccentries[
i].data,
s->iccentries[
i].length);
2869 int orientation = strtol(
value, &endptr, 0);
2874 if (orientation >= 2 && orientation <= 8) {
2885 switch (orientation) {
2951 if (
s->interlaced &&
s->bottom_field == !
s->interlace_polarity &&
s->got_picture && !avctx->
frame_number) {
2957 s->picture_ptr =
NULL;
2958 }
else if (
s->picture_ptr)
2966 s->ljpeg_buffer_size = 0;
2968 for (
i = 0;
i < 3;
i++) {
2969 for (j = 0; j < 4; j++)
2991 s->smv_next_frame = 0;
2995 #if CONFIG_MJPEG_DECODER
2996 #define OFFSET(x) offsetof(MJpegDecodeContext, x)
2997 #define VD AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_DECODING_PARAM
2999 {
"extern_huff",
"Use external huffman table.",
3004 static const AVClass mjpegdec_class = {
3023 .priv_class = &mjpegdec_class,
3028 #if CONFIG_MJPEG_NVDEC_HWACCEL
3031 #if CONFIG_MJPEG_VAAPI_HWACCEL
3038 #if CONFIG_THP_DECODER
3056 #if CONFIG_SMVJPEG_DECODER
#define FF_ALLOCZ_TYPED_ARRAY(p, nelem)
void av_packet_unref(AVPacket *pkt)
Wipe the packet.
const struct AVHWAccel * hwaccel
Hardware accelerator in use.
static void skip_bits_long(GetBitContext *s, int n)
Skips the specified number of bits.
int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt)
Called by decoders to get the next packet for decoding.
#define AV_LOG_WARNING
Something somehow does not look correct.
#define FF_CODEC_CAP_INIT_THREADSAFE
The codec does not modify any global variables in the init function, allowing to call the init functi...
@ AV_PIX_FMT_CUDA
HW acceleration through CUDA.
av_cold void ff_init_scantable(uint8_t *permutation, ScanTable *st, const uint8_t *src_scantable)
AVPixelFormat
Pixel format.
#define FF_CODEC_CAP_SETS_PKT_DTS
Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set AVFrame.pkt_dts manually.
static unsigned int show_bits_long(GetBitContext *s, int n)
Show 0-32 bits.
static int get_bits_left(GetBitContext *gb)
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
enum AVColorSpace colorspace
YUV colorspace type.
int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
Select the (possibly hardware accelerated) pixel format.
static av_always_inline void mjpeg_copy_block(MJpegDecodeContext *s, uint8_t *dst, const uint8_t *src, int linesize, int lowres)
The official guide to swscale for confused that is
AVFrameSideData * av_frame_new_side_data(AVFrame *frame, enum AVFrameSideDataType type, size_t size)
Add a new side data to a frame.
static void decode_flush(AVCodecContext *avctx)
const AVPixFmtDescriptor * av_pix_fmt_desc_get(enum AVPixelFormat pix_fmt)
int err_recognition
Error recognition; may misdetect some more or less valid parts as errors.
#define GET_VLC(code, name, gb, table, bits, max_depth)
If the vlc code is invalid and max_depth=1, then no bits will be removed.
static unsigned int get_bits_long(GetBitContext *s, int n)
Read 0-32 bits.
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
#define se(name, range_min, range_max)
static int get_bits_count(const GetBitContext *s)
static void init_idct(AVCodecContext *avctx)
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
static av_always_inline int bytestream2_seek(GetByteContext *g, int offset, int whence)
This structure describes decoded (raw) audio or video data.
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
#define AV_PIX_FMT_YUVA420P16
@ AVCOL_RANGE_JPEG
Full range content.
#define FF_PROFILE_MJPEG_JPEG_LS
static int smv_process_frame(AVCodecContext *avctx, AVFrame *frame)
void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip)
Flip the input matrix horizontally and/or vertically.
enum AVFieldOrder field_order
Field order.
static int mjpeg_decode_dc(MJpegDecodeContext *s, int dc_index)
int step
Number of elements between 2 horizontally consecutive pixels.
#define AV_DICT_IGNORE_SUFFIX
Return first entry in a dictionary whose first part corresponds to the search key,...
const uint8_t ff_mjpeg_val_dc[]
static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE(*table)[2], int bits, int max_depth)
Parse a vlc code.
static int mjpeg_get_packet(AVCodecContext *avctx)
@ AV_PIX_FMT_BGR24
packed RGB 8:8:8, 24bpp, BGRBGR...
void av_display_rotation_set(int32_t matrix[9], double angle)
Initialize a transformation matrix describing a pure clockwise rotation by the specified angle (in de...
@ AV_FRAME_DATA_DISPLAYMATRIX
This side data contains a 3x3 transformation matrix describing an affine transformation that needs to...
@ AV_PIX_FMT_YUV440P
planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
#define UPDATE_CACHE(name, gb)
const uint8_t ff_mjpeg_bits_ac_chrominance[]
static int init_get_bits(GetBitContext *s, const uint8_t *buffer, int bit_size)
Initialize GetBitContext.
#define FF_DEBUG_PICT_INFO
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
#define GET_CACHE(name, gb)
static void skip_bits(GetBitContext *s, int n)
@ AV_STEREO3D_SIDEBYSIDE
Views are next to each other.
int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt)
@ AVCOL_SPC_BT470BG
also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
static unsigned int get_bits(GetBitContext *s, int n)
Read 1-25 bits.
int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor, int point_transform, int nb_components)
static void shift_output(MJpegDecodeContext *s, uint8_t *ptr, int linesize)
@ AV_PIX_FMT_GBRAP
planar GBRA 4:4:4:4 32bpp
const struct AVCodec * codec
av_cold int ff_mjpeg_decode_init(AVCodecContext *avctx)
enum AVDiscard skip_frame
Skip decoding for selected frames.
@ AV_STEREO3D_2D
Video is not stereoscopic (and metadata has to be there).
#define AV_PIX_FMT_YUVA444P16
#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT
static int mjpeg_decode_com(MJpegDecodeContext *s)
static int init_default_huffman_tables(MJpegDecodeContext *s)
int flags
AV_CODEC_FLAG_*.
static double val(void *priv, double ch)
int av_pix_fmt_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift)
Utility function to access log2_chroma_w log2_chroma_h from the pixel format AVPixFmtDescriptor.
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf type
#define AV_PIX_FMT_GRAY16
int ff_sp5x_process_packet(AVCodecContext *avctx, AVPacket *avpkt)
#define ss(width, name, subs,...)
#define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM
The decoder extracts and fills its parameters even if the frame is skipped due to the skip_frame sett...
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
@ AV_PIX_FMT_YUVJ411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor ...
const AVProfile ff_mjpeg_profiles[]
int ff_exif_decode_ifd(void *logctx, GetByteContext *gbytes, int le, int depth, AVDictionary **metadata)
static int aligned(int val)
#define AV_LOG_ERROR
Something went wrong and cannot losslessly be recovered.
#define FF_ARRAY_ELEMS(a)
static int decode_dc_progressive(MJpegDecodeContext *s, int16_t *block, int component, int dc_index, uint16_t *quant_matrix, int Al)
#define AV_PIX_FMT_YUV422P16
static int init_get_bits8(GetBitContext *s, const uint8_t *buffer, int byte_size)
Initialize GetBitContext.
#define FF_CODEC_PROPERTY_LOSSLESS
#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT
static const uint16_t mask[17]
AVDictionaryEntry * av_dict_get(const AVDictionary *m, const char *key, const AVDictionaryEntry *prev, int flags)
Get a dictionary entry with matching key.
static int handle_rstn(MJpegDecodeContext *s, int nb_components)
@ AV_PIX_FMT_YUVJ422P
planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting col...
#define CLOSE_READER(name, gb)
@ AV_STEREO3D_LINES
Views are packed per line, as if interlaced.
@ AV_PIX_FMT_YUVA420P
planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
static void parse_avid(MJpegDecodeContext *s, uint8_t *buf, int len)
#define AV_PIX_FMT_YUV444P16
#define AV_CEIL_RSHIFT(a, b)
#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS
#define AV_GET_BUFFER_FLAG_REF
The decoder will keep a reference to the frame and may reuse it later.
int ff_jpegls_decode_picture(MJpegDecodeContext *s, int near, int point_transform, int ilv)
#define av_assert0(cond)
assert() equivalent, that is always enabled.
static enum AVPixelFormat pix_fmts[]
#define AV_LOG_DEBUG
Stuff which is only useful for libav* developers.
#define AV_PIX_FMT_YUV420P16
const AVCodec ff_thp_decoder
static void reset_icc_profile(MJpegDecodeContext *s)
av_cold int ff_mjpeg_decode_end(AVCodecContext *avctx)
void ff_free_vlc(VLC *vlc)
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
@ AV_PIX_FMT_YUVJ444P
planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting col...
av_cold void ff_hpeldsp_init(HpelDSPContext *c, int flags)
int flags
Additional information about the frame packing.
int ff_mjpeg_receive_frame(AVCodecContext *avctx, AVFrame *frame)
@ AVDISCARD_ALL
discard all
#define AV_PIX_FMT_GBRP16
#define AV_PIX_FMT_RGBA64
#define LIBAVUTIL_VERSION_INT
Describe the class of an AVClass context structure.
#define PTRDIFF_SPECIFIER
const AVCodec ff_smvjpeg_decoder
static void flush(AVCodecContext *avctx)
static void mjpeg_idct_scan_progressive_ac(MJpegDecodeContext *s)
static void copy_block2(uint8_t *dst, const uint8_t *src, ptrdiff_t dstStride, ptrdiff_t srcStride, int h)
#define AVERROR_PATCHWELCOME
Not yet implemented in FFmpeg, patches welcome.
Rational number (pair of numerator and denominator).
int ff_mjpeg_decode_dqt(MJpegDecodeContext *s)
struct AVCodecInternal * internal
Private context used for internal data.
static CopyRet receive_frame(AVCodecContext *avctx, AVFrame *frame, int *got_frame)
@ AV_PIX_FMT_YUVJ420P
planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting col...
const char * av_default_item_name(void *ptr)
Return the context name.
static unsigned int get_bits1(GetBitContext *s)
@ AV_PICTURE_TYPE_I
Intra.
@ AV_FRAME_DATA_ICC_PROFILE
The data contains an ICC profile as an opaque octet buffer following the format described by ISO 1507...
#define LAST_SKIP_BITS(name, gb, num)
static int mjpeg_decode_scan(MJpegDecodeContext *s, int nb_components, int Ah, int Al, const uint8_t *mb_bitmask, int mb_bitmask_size, const AVFrame *reference)
static int decode_block_refinement(MJpegDecodeContext *s, int16_t *block, uint8_t *last_nnz, int ac_index, uint16_t *quant_matrix, int ss, int se, int Al, int *EOBRUN)
static int mjpeg_decode_scan_progressive_ac(MJpegDecodeContext *s, int ss, int se, int Ah, int Al)
const uint8_t ff_mjpeg_val_ac_chrominance[]
@ AV_PIX_FMT_GRAY8
Y , 8bpp.
#define AV_EF_EXPLODE
abort decoding on minor error detection
#define FF_CODEC_CAP_EXPORTS_CROPPING
The decoder sets the cropping fields in the output frames manually.
@ AV_PIX_FMT_ABGR
packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
static av_always_inline int bytestream2_tell(GetByteContext *g)
#define copy_data_segment(skip)
int lowres
low resolution decoding, 1-> 1/2 size, 2->1/4 size
const OptionDef options[]
static void copy_mb(CinepakEncContext *s, uint8_t *a_data[4], int a_linesize[4], uint8_t *b_data[4], int b_linesize[4])
int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
Get a buffer for a frame.
@ AV_PIX_FMT_RGB24
packed RGB 8:8:8, 24bpp, RGBRGB...
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
static int ljpeg_decode_rgb_scan(MJpegDecodeContext *s, int nb_components, int predictor, int point_transform)
const uint8_t ff_mjpeg_val_ac_luminance[]
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled top and top right vectors is used as motion vector prediction the used motion vector is the sum of the predictor and(mvx_diff, mvy_diff) *mv_scale Intra DC Prediction block[y][x] dc[1]
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
int av_frame_ref(AVFrame *dst, const AVFrame *src)
Set up a new reference to the data described by the source frame.
int ff_jpegls_decode_lse(MJpegDecodeContext *s)
Decode LSE block with initialization parameters.
static int decode_block_progressive(MJpegDecodeContext *s, int16_t *block, uint8_t *last_nnz, int ac_index, uint16_t *quant_matrix, int ss, int se, int Al, int *EOBRUN)
#define av_err2str(errnum)
Convenience macro, the return value should be used only directly in function arguments but never stan...
int ff_mjpeg_decode_sos(MJpegDecodeContext *s, const uint8_t *mb_bitmask, int mb_bitmask_size, const AVFrame *reference)
const uint8_t ff_mjpeg_bits_ac_luminance[]
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_RB32
void avpriv_report_missing_feature(void *avc, const char *msg,...) av_printf_format(2
Log a generic warning message about a missing feature.
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
const uint8_t ff_mjpeg_bits_dc_luminance[]
#define OPEN_READER(name, gb)
@ AV_PIX_FMT_YUVA444P
planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf offset
static int get_xbits(GetBitContext *s, int n)
Read MPEG-1 dc-style VLC (sign bit + mantissa with no MSB).
void av_dict_free(AVDictionary **pm)
Free all the memory allocated for an AVDictionary struct and all keys and values.
#define HWACCEL_NVDEC(codec)
static void predictor(uint8_t *src, ptrdiff_t size)
static int find_marker(const uint8_t **pbuf_ptr, const uint8_t *buf_end)
#define AV_STEREO3D_FLAG_INVERT
Inverted views, Right/Bottom represents the left view.
@ AV_PIX_FMT_VAAPI
Hardware acceleration through VA-API, data[3] contains a VASurfaceID.
#define AV_LOG_INFO
Standard information.
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel layout
static void copy_block4(uint8_t *dst, const uint8_t *src, ptrdiff_t dstStride, ptrdiff_t srcStride, int h)
static int decode_block(MJpegDecodeContext *s, int16_t *block, int component, int dc_index, int ac_index, uint16_t *quant_matrix)
#define i(width, name, range_min, range_max)
and forward the test the status of outputs and forward it to the corresponding return FFERROR_NOT_READY If the filters stores internally one or a few frame for some it can consider them to be part of the FIFO and delay acknowledging a status change accordingly Example code
uint8_t * extradata
some codecs need / can use extradata like Huffman tables.
static unsigned int show_bits(GetBitContext *s, int n)
Show 1-25 bits.
#define FF_CODEC_CAP_INIT_CLEANUP
The codec allows calling the close function for deallocation even if the init function returned a fai...
#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT
@ AV_STEREO3D_TOPBOTTOM
Views are on top of each other.
static int mjpeg_decode_dri(MJpegDecodeContext *s)
AVPacket * in_pkt
This packet is used to hold the packet given to decoders implementing the .decode API; it is unused b...
void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size)
Same behaviour av_fast_malloc but the buffer has additional AV_INPUT_BUFFER_PADDING_SIZE at the end w...
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default value
#define FF_DEBUG_STARTCODE
@ AV_PIX_FMT_YUVJ440P
planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
void av_frame_unref(AVFrame *frame)
Unreference all the buffers referenced by frame and reset the frame fields.
av_cold void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx)
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
const char * name
Name of the codec implementation.
enum AVChromaLocation chroma_sample_location
This defines the location of chroma samples.
enum AVPixelFormat pix_fmt
Pixel format, see AV_PIX_FMT_xxx.
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
void * av_calloc(size_t nmemb, size_t size)
const uint8_t ff_zigzag_direct[64]
@ AV_PIX_FMT_PAL8
8 bits with AV_PIX_FMT_RGB32 palette
#define AV_LOG_FATAL
Something went wrong and recovery is not possible.
static const float pred[4]
AVStereo3D * av_stereo3d_alloc(void)
Allocate an AVStereo3D structure and set its fields to default values.
#define FFSWAP(type, a, b)
const char * class_name
The name of the class; usually it is the same name as the context structure type to which the AVClass...
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
enum AVStereo3DType type
How views are packed within the video.
static const uint8_t * align_get_bits(GetBitContext *s)
@ LSE
JPEG-LS extension parameters.
#define AV_INPUT_BUFFER_PADDING_SIZE
Tag MUST be and< 10hcoeff half pel interpolation filter coefficients, hcoeff[0] are the 2 middle coefficients[1] are the next outer ones and so on, resulting in a filter like:...eff[2], hcoeff[1], hcoeff[0], hcoeff[0], hcoeff[1], hcoeff[2] ... the sign of the coefficients is not explicitly stored but alternates after each coeff and coeff[0] is positive, so ...,+,-,+,-,+,+,-,+,-,+,... hcoeff[0] is not explicitly stored but found by subtracting the sum of all stored coefficients with signs from 32 hcoeff[0]=32 - hcoeff[1] - hcoeff[2] - ... a good choice for hcoeff and htaps is htaps=6 hcoeff={40,-10, 2} an alternative which requires more computations at both encoder and decoder side and may or may not be better is htaps=8 hcoeff={42,-14, 6,-2}ref_frames minimum of the number of available reference frames and max_ref_frames for example the first frame after a key frame always has ref_frames=1spatial_decomposition_type wavelet type 0 is a 9/7 symmetric compact integer wavelet 1 is a 5/3 symmetric compact integer wavelet others are reserved stored as delta from last, last is reset to 0 if always_reset||keyframeqlog quality(logarithmic quantizer scale) stored as delta from last, last is reset to 0 if always_reset||keyframemv_scale stored as delta from last, last is reset to 0 if always_reset||keyframe FIXME check that everything works fine if this changes between framesqbias dequantization bias stored as delta from last, last is reset to 0 if always_reset||keyframeblock_max_depth maximum depth of the block tree stored as delta from last, last is reset to 0 if always_reset||keyframequant_table quantization tableHighlevel bitstream structure:==============================--------------------------------------------|Header|--------------------------------------------|------------------------------------|||Block0||||split?||||yes no||||......... intra?||||:Block01 :yes no||||:Block02 :....... ..........||||:Block03 ::y DC ::ref index:||||:Block04 ::cb DC ::motion x :||||......... :cr DC ::motion y :||||....... ..........|||------------------------------------||------------------------------------|||Block1|||...|--------------------------------------------|------------ ------------ ------------|||Y subbands||Cb subbands||Cr subbands||||--- ---||--- ---||--- ---|||||LL0||HL0||||LL0||HL0||||LL0||HL0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||LH0||HH0||||LH0||HH0||||LH0||HH0|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HL1||LH1||||HL1||LH1||||HL1||LH1|||||--- ---||--- ---||--- ---||||--- ---||--- ---||--- ---|||||HH1||HL2||||HH1||HL2||||HH1||HL2|||||...||...||...|||------------ ------------ ------------|--------------------------------------------Decoding process:=================------------|||Subbands|------------||||------------|Intra DC||||LL0 subband prediction ------------|\ Dequantization ------------------- \||Reference frames|\ IDWT|------- -------|Motion \|||Frame 0||Frame 1||Compensation . OBMC v -------|------- -------|--------------. \------> Frame n output Frame Frame<----------------------------------/|...|------------------- Range Coder:============Binary Range Coder:------------------- The implemented range coder is an adapted version based upon "Range encoding: an algorithm for removing redundancy from a digitised message." by G. N. N. Martin. The symbols encoded by the Snow range coder are bits(0|1). The associated probabilities are not fix but change depending on the symbol mix seen so far. bit seen|new state ---------+----------------------------------------------- 0|256 - state_transition_table[256 - old_state];1|state_transition_table[old_state];state_transition_table={ 0, 0, 0, 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 190, 191, 192, 194, 194, 195, 196, 197, 198, 199, 200, 201, 202, 202, 204, 205, 206, 207, 208, 209, 209, 210, 211, 212, 213, 215, 215, 216, 217, 218, 219, 220, 220, 222, 223, 224, 225, 226, 227, 227, 229, 229, 230, 231, 232, 234, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 248, 0, 0, 0, 0, 0, 0, 0};FIXME Range Coding of integers:------------------------- FIXME Neighboring Blocks:===================left and top are set to the respective blocks unless they are outside of the image in which case they are set to the Null block top-left is set to the top left block unless it is outside of the image in which case it is set to the left block if this block has no larger parent block or it is at the left side of its parent block and the top right block is not outside of the image then the top right block is used for top-right else the top-left block is used Null block y, cb, cr are 128 level, ref, mx and my are 0 Motion Vector Prediction:=========================1. the motion vectors of all the neighboring blocks are scaled to compensate for the difference of reference frames scaled_mv=(mv *(256 *(current_reference+1)/(mv.reference+1))+128)> the median of the scaled left
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
int ff_mjpeg_find_marker(MJpegDecodeContext *s, const uint8_t **buf_ptr, const uint8_t *buf_end, const uint8_t **unescaped_buf_ptr, int *unescaped_buf_size)
it s the only field you need to keep assuming you have a context There is some magic you don t need to care about around this just let it vf default minimum maximum flags name is the option keep it simple and lowercase description are in without and describe what they for example set the foo of the bar offset is the offset of the field in your see the OFFSET() macro
main external API structure.
#define SHOW_UBITS(name, gb, num)
the frame and frame reference mechanism is intended to as much as expensive copies of that data while still allowing the filters to produce correct results The data is stored in buffers represented by AVFrame structures Several references can point to the same frame buffer
@ AVCHROMA_LOC_CENTER
MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0.
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return values
AVComponentDescriptor comp[4]
Parameters that describe how pixels are packed.
int ff_tdecode_header(GetByteContext *gb, int *le, int *ifd_offset)
Decodes a TIFF header from the input bytestream and sets the endianness in *le and the offset to the ...
static const AVProfile profiles[]
@ AV_PIX_FMT_YUV444P
planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
const uint8_t ff_mjpeg_bits_dc_chrominance[]
int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
@ AV_PIX_FMT_GBRP
planar GBR 4:4:4 24bpp
int coded_width
Bitstream width / height, may be different from width/height e.g.
@ AV_PIX_FMT_GRAY16LE
Y , 16bpp, little-endian.
@ AV_PIX_FMT_YUV422P
planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
int ff_set_dimensions(AVCodecContext *s, int width, int height)
Check that the provided frame dimensions are valid and set them on the codec context.
const AVCodec ff_mjpeg_decoder
static int mjpeg_decode_app(MJpegDecodeContext *s)
int frame_number
Frame counter, set by libavcodec.
AVStereo3D * av_stereo3d_create_side_data(AVFrame *frame)
Allocate a complete AVFrameSideData and add it to the frame.
#define avpriv_request_sample(...)
Structure to hold side data for an AVFrame.
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
unsigned int codec_tag
fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
int ff_mjpeg_build_vlc(VLC *vlc, const uint8_t *bits_table, const uint8_t *val_table, int is_ac, void *logctx)
void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size)
Allocate a buffer, reusing the given one if large enough.
int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags)
Copy entries from one AVDictionary struct into another.
@ AV_PIX_FMT_YUV411P
planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
#define HWACCEL_VAAPI(codec)
static av_always_inline void bytestream2_init(GetByteContext *g, const uint8_t *buf, int buf_size)
#define flags(name, subs,...)
#define AVERROR_BUG
Internal bug, also see AVERROR_BUG2.
static const SheerTable rgb[2]
The exact code depends on how similar the blocks are and how related they are to the block
#define AVERROR_INVALIDDATA
Invalid data found when processing input.
#define MKTAG(a, b, c, d)
Stereo 3D type: this structure describes how two videos are packed within a single video surface,...
int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx)
Check if the given dimension of an image is valid, meaning that all bytes of the image can be address...
av_cold void ff_blockdsp_init(BlockDSPContext *c, AVCodecContext *avctx)
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_WL32 unsigned int_TMPL AV_WL24 unsigned int_TMPL AV_WL16 uint64_t_TMPL AV_WB64 unsigned int_TMPL AV_WB32 unsigned int_TMPL AV_RB24
#define PREDICT(ret, topleft, top, left, predictor)
#define av_fourcc2str(fourcc)