Lines Matching refs:ctx
78 Mpeg4DecContext *const ctx = (Mpeg4DecContext*)s;
81 if (ctx->dpcm_direction == 0) {
82 s->idsp.idct_put(dest_y, dct_linesize, (int16_t*)ctx->block32[0]);
83 s->idsp.idct_put(dest_y + act_block_size, dct_linesize, (int16_t*)ctx->block32[1]);
84 s->idsp.idct_put(dest_y + dct_offset, dct_linesize, (int16_t*)ctx->block32[2]);
85 s->idsp.idct_put(dest_y + dct_offset + act_block_size, dct_linesize, (int16_t*)ctx->block32[3]);
90 s->idsp.idct_put(dest_cb, dct_linesize, (int16_t*)ctx->block32[4]);
91 s->idsp.idct_put(dest_cr, dct_linesize, (int16_t*)ctx->block32[5]);
92 s->idsp.idct_put(dest_cb + dct_offset, dct_linesize, (int16_t*)ctx->block32[6]);
93 s->idsp.idct_put(dest_cr + dct_offset, dct_linesize, (int16_t*)ctx->block32[7]);
95 s->idsp.idct_put(dest_cb + act_block_size, dct_linesize, (int16_t*)ctx->block32[8]);
96 s->idsp.idct_put(dest_cr + act_block_size, dct_linesize, (int16_t*)ctx->block32[9]);
97 s->idsp.idct_put(dest_cb + act_block_size + dct_offset, dct_linesize, (int16_t*)ctx->block32[10]);
98 s->idsp.idct_put(dest_cr + act_block_size + dct_offset, dct_linesize, (int16_t*)ctx->block32[11]);
100 } else if (ctx->dpcm_direction == 1) {
104 const uint16_t *src = ctx->dpcm_macroblock[i];
119 av_assert2(ctx->dpcm_direction == -1);
121 const uint16_t *src = ctx->dpcm_macroblock[i];
197 static inline int mpeg4_is_resync(Mpeg4DecContext *ctx)
199 MpegEncContext *s = &ctx->m;
203 if (s->workaround_bugs & FF_BUG_NO_PADDING && !ctx->resync_marker)
247 static int mpeg4_decode_sprite_trajectory(Mpeg4DecContext *ctx, GetBitContext *gb)
249 MpegEncContext *s = &ctx->m;
271 for (i = 0; i < ctx->num_sprite_warping_points; i++) {
279 if (!(ctx->divx_version == 500 && ctx->divx_build == 413))
287 ctx->sprite_traj[i][0] = d[i][0] = x;
288 ctx->sprite_traj[i][1] = d[i][1] = y;
291 ctx->sprite_traj[i][0] = ctx->sprite_traj[i][1] = 0;
301 if (ctx->divx_version == 500 && ctx->divx_build == 413) {
339 switch (ctx->num_sprite_warping_points) {
349 ctx->sprite_shift[0] =
350 ctx->sprite_shift[1] = 0;
363 ctx->sprite_shift[0] =
364 ctx->sprite_shift[1] = 0;
392 ctx->sprite_shift[0] = alpha + rho;
393 ctx->sprite_shift[1] = alpha + rho + 2;
420 ctx->sprite_shift[0] = alpha + beta + rho - min_ab;
421 ctx->sprite_shift[1] = alpha + beta + rho - min_ab + 2;
425 if (sprite_delta[0][0] == a << ctx->sprite_shift[0] &&
428 sprite_delta[1][1] == a << ctx->sprite_shift[0]) {
429 sprite_offset[0][0] >>= ctx->sprite_shift[0];
430 sprite_offset[0][1] >>= ctx->sprite_shift[0];
431 sprite_offset[1][0] >>= ctx->sprite_shift[1];
432 sprite_offset[1][1] >>= ctx->sprite_shift[1];
437 ctx->sprite_shift[0] = 0;
438 ctx->sprite_shift[1] = 0;
441 int shift_y = 16 - ctx->sprite_shift[0];
442 int shift_c = 16 - ctx->sprite_shift[1];
461 ctx->sprite_shift[i] = 16;
485 s->real_sprite_warping_points = ctx->num_sprite_warping_points;
500 static int decode_new_pred(Mpeg4DecContext *ctx, GetBitContext *gb) {
501 MpegEncContext *s = &ctx->m;
502 int len = FFMIN(ctx->time_increment_bits + 3, 15);
516 int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx)
518 MpegEncContext *s = &ctx->m;
536 if (ctx->shape != RECT_SHAPE) {
551 if (ctx->shape != BIN_ONLY_SHAPE) {
557 if (ctx->shape == RECT_SHAPE)
567 skip_bits(&s->gb, ctx->time_increment_bits); /* time_increment */
573 if (ctx->shape != BIN_ONLY_SHAPE) {
577 ctx->vol_sprite_usage == GMC_SPRITE) {
578 if (mpeg4_decode_sprite_trajectory(ctx, &s->gb) < 0)
599 if (ctx->new_pred)
600 decode_new_pred(ctx, &s->gb);
617 int ff_mpeg4_decode_studio_slice_header(Mpeg4DecContext *ctx)
619 MpegEncContext *s = &ctx->m;
634 if (ctx->shape != BIN_ONLY_SHAPE)
659 static inline int get_amv(Mpeg4DecContext *ctx, int n)
661 MpegEncContext *s = &ctx->m;
670 if (ctx->divx_version == 500 && ctx->divx_build == 413 && a >= s->quarter_sample)
677 shift = ctx->sprite_shift[0];
759 static int mpeg4_decode_partition_a(Mpeg4DecContext *ctx)
761 MpegEncContext *s = &ctx->m;
831 ctx->vol_sprite_usage == GMC_SPRITE) {
836 mx = get_amv(ctx, 0);
837 my = get_amv(ctx, 1);
887 ctx->vol_sprite_usage == GMC_SPRITE &&
908 mx = get_amv(ctx, 0);
909 my = get_amv(ctx, 1);
1046 int ff_mpeg4_decode_partitions(Mpeg4DecContext *ctx)
1048 MpegEncContext *s = &ctx->m;
1054 mb_num = mpeg4_decode_partition_a(ctx);
1111 static inline int mpeg4_decode_block(Mpeg4DecContext *ctx, int16_t *block,
1115 MpegEncContext *s = &ctx->m;
1385 Mpeg4DecContext *ctx = s->avctx->priv_data;
1389 av_assert2(s == (void*)ctx);
1394 use_intra_dc_vlc = s->qscale < ctx->intra_dc_threshold;
1415 && ctx->vol_sprite_usage == GMC_SPRITE) {
1444 if (mpeg4_decode_block(ctx, block[i], i, cbp & 32, s->mb_intra,
1445 use_intra_dc_vlc, ctx->rvlc) < 0) {
1457 if (mpeg4_is_resync(ctx))
1462 if (mpeg4_is_resync(ctx)) {
1473 Mpeg4DecContext *ctx = s->avctx->priv_data;
1479 av_assert2(s == (void*)ctx);
1493 ctx->vol_sprite_usage == GMC_SPRITE) {
1499 s->mv[0][0][0] = get_amv(ctx, 0);
1500 s->mv[0][0][1] = get_amv(ctx, 1);
1528 ctx->vol_sprite_usage == GMC_SPRITE && (cbpc & 16) == 0)
1554 mx = get_amv(ctx, 0);
1555 my = get_amv(ctx, 1);
1801 use_intra_dc_vlc = s->qscale < ctx->intra_dc_threshold;
1812 if (mpeg4_decode_block(ctx, block[i], i, cbp & 32,
1822 if (mpeg4_decode_block(ctx, block[i], i, cbp & 32, 0, 0, 0) < 0)
1830 int next = mpeg4_is_resync(ctx);
1893 Mpeg4DecContext *ctx = s->avctx->priv_data;
1915 if (ctx->rgb)
2091 Mpeg4DecContext *const ctx = (Mpeg4DecContext*)s;
2094 ctx->dpcm_direction = 0;
2108 if (mpeg4_decode_studio_block(s, ctx->block32[i], i) < 0)
2114 ctx->dpcm_direction = get_bits1(&s->gb) ? -1 : 1;
2116 if (mpeg4_decode_dpcm_macroblock(s, ctx->dpcm_macroblock[i], i) < 0)
2288 static int decode_studio_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
2290 MpegEncContext *s = &ctx->m;
2298 ctx->shape = get_bits(gb, 2); /* video_object_layer_shape */
2301 if (ctx->shape != RECT_SHAPE) {
2305 if (ctx->shape != BIN_ONLY_SHAPE) {
2324 if (rgb != ctx->rgb || s->chroma_format != chroma_format)
2327 ctx->rgb = rgb;
2330 if (ctx->shape == RECT_SHAPE) {
2374 static int decode_vol_header(Mpeg4DecContext *ctx, GetBitContext *gb)
2376 MpegEncContext *s = &ctx->m;
2381 ctx->vo_type = get_bits(gb, 8);
2388 if (ctx->vo_type == CORE_STUDIO_VO_TYPE ||
2389 ctx->vo_type == SIMPLE_STUDIO_VO_TYPE) {
2394 return decode_studio_vol_header(ctx, gb);
2413 if ((ctx->vol_control_parameters = get_bits1(gb))) { /* vol control parameter */
2436 switch (ctx->vo_type) {
2447 ctx->shape = get_bits(gb, 2); /* vol shape */
2448 if (ctx->shape != RECT_SHAPE)
2450 if (ctx->shape == GRAY_SHAPE && vo_ver_id != 1) {
2463 ctx->time_increment_bits = av_log2(s->avctx->framerate.num - 1) + 1;
2464 if (ctx->time_increment_bits < 1)
2465 ctx->time_increment_bits = 1;
2470 s->avctx->framerate.den = get_bits(gb, ctx->time_increment_bits);
2476 ctx->t_frame = 0;
2478 if (ctx->shape != BIN_ONLY_SHAPE) {
2479 if (ctx->shape == RECT_SHAPE) {
2502 ctx->vol_sprite_usage = get_bits1(gb); /* vol_sprite_usage */
2504 ctx->vol_sprite_usage = get_bits(gb, 2); /* vol_sprite_usage */
2506 if (ctx->vol_sprite_usage == STATIC_SPRITE)
2508 if (ctx->vol_sprite_usage == STATIC_SPRITE ||
2509 ctx->vol_sprite_usage == GMC_SPRITE) {
2510 if (ctx->vol_sprite_usage == STATIC_SPRITE) {
2520 ctx->num_sprite_warping_points = get_bits(gb, 6);
2521 if (ctx->num_sprite_warping_points > 3) {
2524 ctx->num_sprite_warping_points);
2525 ctx->num_sprite_warping_points = 0;
2529 ctx->sprite_brightness_change = get_bits1(gb);
2530 if (ctx->vol_sprite_usage == STATIC_SPRITE)
2628 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* opaque */
2629 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* transparent */
2630 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* intra_cae */
2631 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* inter_cae */
2632 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* no_update */
2633 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* upsampling */
2636 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* intra_blocks */
2637 ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* inter_blocks */
2638 ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* inter4v_blocks */
2639 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* not coded blocks */
2646 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* dct_coeffs */
2647 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* dct_lines */
2648 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* vlc_syms */
2649 ctx->cplx_estimation_trash_i += 4 * get_bits1(gb); /* vlc_bits */
2652 ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* apm */
2653 ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* npm */
2654 ctx->cplx_estimation_trash_b += 8 * get_bits1(gb); /* interpolate_mc_q */
2655 ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* forwback_mc_q */
2656 ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* halfpel2 */
2657 ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* halfpel4 */
2664 ctx->cplx_estimation_trash_i += 8 * get_bits1(gb); /* sadct */
2665 ctx->cplx_estimation_trash_p += 8 * get_bits1(gb); /* qpel */
2674 ctx->cplx_estimation_trash_i =
2675 ctx->cplx_estimation_trash_p =
2676 ctx->cplx_estimation_trash_b = 0;
2679 ctx->resync_marker = !get_bits1(gb); /* resync_marker_disabled */
2683 ctx->rvlc = get_bits1(gb);
2686 ctx->new_pred = get_bits1(gb);
2687 if (ctx->new_pred) {
2696 ctx->new_pred = 0;
2699 ctx->scalability = get_bits1(gb);
2701 if (ctx->scalability) {
2715 ctx->enhancement_type = get_bits1(gb);
2721 ctx->scalability = 0;
2733 ctx->time_increment_bits,
2737 ctx->scalability ? "scalability " :"" , s->quarter_sample ? "qpel " : "",
2738 s->data_partitioning ? "partition " : "", ctx->rvlc ? "rvlc " : ""
2749 static int decode_user_data(Mpeg4DecContext *ctx, GetBitContext *gb)
2751 MpegEncContext *s = &ctx->m;
2770 ctx->divx_version = ver;
2771 ctx->divx_build = build;
2793 ctx->lavc_build = 4600;
2796 ctx->lavc_build = build;
2801 ctx->xvid_build = build;
2808 Mpeg4DecContext *ctx = avctx->priv_data;
2809 MpegEncContext *s = &ctx->m;
2811 if (ctx->xvid_build == -1 && ctx->divx_version == -1 && ctx->lavc_build == -1) {
2817 ctx->xvid_build = 0;
2820 if (ctx->xvid_build == -1 && ctx->divx_version == -1 && ctx->lavc_build == -1)
2821 if (s->codec_tag == AV_RL32("DIVX") && ctx->vo_type == 0 &&
2822 ctx->vol_control_parameters == 0)
2823 ctx->divx_version = 400; // divx 4
2825 if (ctx->xvid_build >= 0 && ctx->divx_version >= 0) {
2826 ctx->divx_version =
2827 ctx->divx_build = -1;
2837 if (ctx->divx_version >= 500 && ctx->divx_build < 1814)
2840 if (ctx->divx_version > 502 && ctx->divx_build < 1814)
2843 if (ctx->xvid_build <= 3U)
2846 if (ctx->xvid_build <= 1U)
2849 if (ctx->xvid_build <= 12U)
2852 if (ctx->xvid_build <= 32U)
2860 if (ctx->lavc_build < 4653U)
2863 if (ctx->lavc_build < 4655U)
2866 if (ctx->lavc_build < 4670U)
2869 if (ctx->lavc_build <= 4712U)
2872 if ((ctx->lavc_build&0xFF) >= 100) {
2873 if (ctx->lavc_build > 3621476 && ctx->lavc_build < 3752552 &&
2874 (ctx->lavc_build < 3752037 || ctx->lavc_build > 3752191) // 3.2.1+
2879 if (ctx->divx_version >= 0)
2881 if (ctx->divx_version == 501 && ctx->divx_build == 20020416)
2884 if (ctx->divx_version < 500U)
2887 if (ctx->divx_version >= 0)
2910 s->workaround_bugs, ctx->lavc_build, ctx->xvid_build,
2911 ctx->divx_version, ctx->divx_build, s->divx_packed ? "p" : "");
2913 if (CONFIG_MPEG4_DECODER && ctx->xvid_build >= 0 &&
2924 static int decode_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb,
2927 MpegEncContext *s = &ctx->m;
2934 ctx->vol_control_parameters == 0 && !(s->avctx->flags & AV_CODEC_FLAG_LOW_DELAY)) {
2951 if (ctx->time_increment_bits == 0 ||
2952 !(show_bits(gb, ctx->time_increment_bits + 1) & 1)) {
2954 "time_increment_bits %d is invalid in relation to the current bitstream, this is likely caused by a missing VOL header\n", ctx->time_increment_bits);
2956 for (ctx->time_increment_bits = 1;
2957 ctx->time_increment_bits < 16;
2958 ctx->time_increment_bits++) {
2961 ctx->vol_sprite_usage == GMC_SPRITE)) {
2962 if ((show_bits(gb, ctx->time_increment_bits + 6) & 0x37) == 0x30)
2964 } else if ((show_bits(gb, ctx->time_increment_bits + 5) & 0x1F) == 0x18)
2969 "time_increment_bits set to %d bits, based on bitstream analysis\n", ctx->time_increment_bits);
2970 if (s->avctx->framerate.num && 4*s->avctx->framerate.num < 1<<ctx->time_increment_bits) {
2971 s->avctx->framerate.num = 1<<ctx->time_increment_bits;
2979 time_increment = get_bits(gb, ctx->time_increment_bits);
3006 if (ctx->t_frame == 0)
3007 ctx->t_frame = s->pb_time;
3008 if (ctx->t_frame == 0)
3009 ctx->t_frame = 1; // 1/0 protection
3010 s->pp_field_time = (ROUNDED_DIV(s->last_non_b_time, ctx->t_frame) -
3011 ROUNDED_DIV(s->last_non_b_time - s->pp_time, ctx->t_frame)) * 2;
3012 s->pb_field_time = (ROUNDED_DIV(s->time, ctx->t_frame) -
3013 ROUNDED_DIV(s->last_non_b_time - s->pp_time, ctx->t_frame)) * 2;
3036 if (ctx->new_pred)
3037 decode_new_pred(ctx, gb);
3039 if (ctx->shape != BIN_ONLY_SHAPE &&
3042 ctx->vol_sprite_usage == GMC_SPRITE))) {
3050 if (ctx->shape != RECT_SHAPE) {
3051 if (ctx->vol_sprite_usage != 1 || s->pict_type != AV_PICTURE_TYPE_I) {
3068 if (ctx->shape != BIN_ONLY_SHAPE) {
3069 skip_bits_long(gb, ctx->cplx_estimation_trash_i);
3071 skip_bits_long(gb, ctx->cplx_estimation_trash_p);
3073 skip_bits_long(gb, ctx->cplx_estimation_trash_b);
3079 ctx->intra_dc_threshold = ff_mpeg4_dc_threshold[get_bits(gb, 3)];
3106 if((ctx->vol_sprite_usage == STATIC_SPRITE ||
3107 ctx->vol_sprite_usage == GMC_SPRITE)) {
3108 if (mpeg4_decode_sprite_trajectory(ctx, gb) < 0)
3110 if (ctx->sprite_brightness_change)
3113 if (ctx->vol_sprite_usage == STATIC_SPRITE)
3121 if (ctx->shape != BIN_ONLY_SHAPE) {
3158 s->data_partitioning, ctx->resync_marker,
3159 ctx->num_sprite_warping_points, s->sprite_warping_accuracy,
3160 1 - s->no_rounding, ctx->vo_type,
3161 ctx->vol_control_parameters ? " VOLC" : " ", ctx->intra_dc_threshold,
3162 ctx->cplx_estimation_trash_i, ctx->cplx_estimation_trash_p,
3163 ctx->cplx_estimation_trash_b,
3169 if (!ctx->scalability) {
3170 if (ctx->shape != RECT_SHAPE && s->pict_type != AV_PICTURE_TYPE_I)
3173 if (ctx->enhancement_type) {
3187 if (ctx->vo_type == 0 && ctx->vol_control_parameters == 0 &&
3188 ctx->divx_version == -1 && s->picture_number == 0) {
3207 static void decode_smpte_tc(Mpeg4DecContext *ctx, GetBitContext *gb)
3209 MpegEncContext *s = &ctx->m;
3226 static int decode_studio_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb)
3228 MpegEncContext *s = &ctx->m;
3237 decode_smpte_tc(ctx, gb);
3253 if (ctx->shape != BIN_ONLY_SHAPE) {
3281 static int decode_studiovisualobject(Mpeg4DecContext *ctx, GetBitContext *gb)
3283 MpegEncContext *s = &ctx->m;
3309 int ff_mpeg4_decode_picture_header(Mpeg4DecContext *ctx, GetBitContext *gb,
3312 MpegEncContext *s = &ctx->m;
3336 (ctx->divx_version >= 0 || ctx->xvid_build >= 0) || s->codec_tag == AV_RL32("QMP4")) {
3418 if ((ret = decode_vol_header(ctx, gb)) < 0)
3421 decode_user_data(ctx, gb);
3440 if ((ret = decode_studiovisualobject(ctx, gb)) < 0)
3462 return decode_studio_vop_header(ctx, gb);
3464 return decode_vop_header(ctx, gb, parse_only);
3469 Mpeg4DecContext *ctx = avctx->priv_data;
3470 MpegEncContext *s = &ctx->m;
3494 if (!ctx->showed_packed_warning) {
3498 ctx->showed_packed_warning = 1;
3626 Mpeg4DecContext *ctx = avctx->priv_data;
3627 MpegEncContext *s = &ctx->m;
3630 ctx->divx_version =
3631 ctx->divx_build =
3632 ctx->xvid_build =
3633 ctx->lavc_build = -1;
3641 ctx->time_increment_bits = 4; /* default value for broken headers */