History

avcodec/h263dec: Don't use MpegEncContext.block

Instead add the necessary blocks directly to H263DecContext (only six are needed, not 12 as ff_mpv_common_init() currently allocates).

Andreas Rheinhardt committed 1 year ago

Commit 77add261 parent b2be3427 files · +26 −23Browse files

Unified · Split

7 files
  1. libavcodec/h263dec.c +2 −2
  2. libavcodec/h263dec.h +3 −0
  3. libavcodec/ituh263dec.c +4 −4
  4. libavcodec/mpeg4videodec.c +7 −7
  5. libavcodec/msmpeg4dec.c +4 −4
  6. libavcodec/rv10.c +1 −1
  7. libavcodec/wmv2dec.c +5 −5
libavcodec/h263dec.c+2−2
@@ -272,7 +272,7 @@ static int decode_slice(H263DecContext *const h) · 271 unmodified lines
272 if (ret < 0) {272 if (ret < 0) {
273 const int xy = h->c.mb_x + h->c.mb_y * h->c.mb_stride;273 const int xy = h->c.mb_x + h->c.mb_y * h->c.mb_stride;
274 if (ret == SLICE_END) {274 if (ret == SLICE_END) {
275 ff_mpv_reconstruct_mb(&h->c, h->c.block);275 ff_mpv_reconstruct_mb(&h->c, h->block);
276 if (h->c.loop_filter)276 if (h->c.loop_filter)
277 ff_h263_loop_filter(&h->c);277 ff_h263_loop_filter(&h->c);
278 278
@@ -305,7 +305,7 @@ static int decode_slice(H263DecContext *const h) · 26 unmodified lines
305 return AVERROR_INVALIDDATA;305 return AVERROR_INVALIDDATA;
306 }306 }
307 307
308 ff_mpv_reconstruct_mb(&h->c, h->c.block);308 ff_mpv_reconstruct_mb(&h->c, h->block);
309 if (h->c.loop_filter)309 if (h->c.loop_filter)
310 ff_h263_loop_filter(&h->c);310 ff_h263_loop_filter(&h->c);
311 }311 }
libavcodec/h263dec.h+3−0
@@ -22,6 +22,7 @@ · 21 unmodified lines
22 22
23#include "mpegvideo.h"23#include "mpegvideo.h"
24#include "vlc.h"24#include "vlc.h"
25#include "libavutil/mem_internal.h"
25 26
26/**27/**
27 * Return value for header parsers if frame is not coded.28 * Return value for header parsers if frame is not coded.
@@ -47,6 +48,8 @@ typedef struct H263DecContext { · 19 unmodified lines
47 MPVContext c;48 MPVContext c;
48 49
49 int (*decode_mb)(struct H263DecContext *h);50 int (*decode_mb)(struct H263DecContext *h);
51
52 DECLARE_ALIGNED_32(int16_t, block)[6][64];
50} H263DecContext;53} H263DecContext;
51 54
52int ff_h263_decode_motion(H263DecContext *const h, int pred, int f_code);55int ff_h263_decode_motion(H263DecContext *const h, int pred, int f_code);
libavcodec/ituh263dec.c+4−4
@@ -808,7 +808,7 @@ int ff_h263_decode_mb(H263DecContext *const h) · 807 unmodified lines
808 }808 }
809 }while(cbpc == 20);809 }while(cbpc == 20);
810 810
811 h->c.bdsp.clear_blocks(h->c.block[0]);811 h->c.bdsp.clear_blocks(h->block[0]);
812 812
813 dquant = cbpc & 8;813 dquant = cbpc & 8;
814 h->c.mb_intra = ((cbpc & 4) != 0);814 h->c.mb_intra = ((cbpc & 4) != 0);
@@ -910,7 +910,7 @@ int ff_h263_decode_mb(H263DecContext *const h) · 95 unmodified lines
910 910
911 h->c.mb_intra = IS_INTRA(mb_type);911 h->c.mb_intra = IS_INTRA(mb_type);
912 if(HAS_CBP(mb_type)){912 if(HAS_CBP(mb_type)){
913 h->c.bdsp.clear_blocks(h->c.block[0]);913 h->c.bdsp.clear_blocks(h->block[0]);
914 cbpc = get_vlc2(&h->c.gb, cbpc_b_vlc, CBPC_B_VLC_BITS, 1);914 cbpc = get_vlc2(&h->c.gb, cbpc_b_vlc, CBPC_B_VLC_BITS, 1);
915 if (h->c.mb_intra) {915 if (h->c.mb_intra) {
916 dquant = IS_QUANT(mb_type);916 dquant = IS_QUANT(mb_type);
@@ -1012,7 +1012,7 @@ int ff_h263_decode_mb(H263DecContext *const h) · 95 unmodified lines
1012 }1012 }
1013 }while(cbpc == 8);1013 }while(cbpc == 8);
1014 1014
1015 h->c.bdsp.clear_blocks(h->c.block[0]);1015 h->c.bdsp.clear_blocks(h->block[0]);
1016 1016
1017 dquant = cbpc & 4;1017 dquant = cbpc & 4;
1018 h->c.mb_intra = 1;1018 h->c.mb_intra = 1;
@@ -1051,7 +1051,7 @@ intra: · 32 unmodified lines
1051 1051
1052 /* decode each block */1052 /* decode each block */
1053 for (i = 0; i < 6; i++) {1053 for (i = 0; i < 6; i++) {
1054 if (h263_decode_block(h, h->c.block[i], i, cbp&32) < 0)1054 if (h263_decode_block(h, h->block[i], i, cbp&32) < 0)
1055 return -1;1055 return -1;
1056 cbp+=cbp;1056 cbp+=cbp;
1057 }1057 }
libavcodec/mpeg4videodec.c+7−7
@@ -1708,10 +1708,10 @@ static int mpeg4_decode_partitioned_mb(H263DecContext *const h) · 1707 unmodified lines
1708 1708
1709 if (!IS_SKIP(mb_type)) {1709 if (!IS_SKIP(mb_type)) {
1710 int i;1710 int i;
1711 h->c.bdsp.clear_blocks(h->c.block[0]);1711 h->c.bdsp.clear_blocks(h->block[0]);
1712 /* decode each block */1712 /* decode each block */
1713 for (i = 0; i < 6; i++) {1713 for (i = 0; i < 6; i++) {
1714 if (mpeg4_decode_block(ctx, h->c.block[i], i, cbp & 32, h->c.mb_intra,1714 if (mpeg4_decode_block(ctx, h->block[i], i, cbp & 32, h->c.mb_intra,
1715 use_intra_dc_vlc, ctx->rvlc) < 0) {1715 use_intra_dc_vlc, ctx->rvlc) < 0) {
1716 av_log(h->c.avctx, AV_LOG_ERROR,1716 av_log(h->c.avctx, AV_LOG_ERROR,
1717 "texture corrupted at %d %d %d\n",1717 "texture corrupted at %d %d %d\n",
@@ -1792,7 +1792,7 @@ static int mpeg4_decode_mb(H263DecContext *const h) · 74 unmodified lines
1792 h->c.mb_intra = ((cbpc & 4) != 0);1792 h->c.mb_intra = ((cbpc & 4) != 0);
1793 if (h->c.mb_intra)1793 if (h->c.mb_intra)
1794 goto intra;1794 goto intra;
1795 h->c.bdsp.clear_blocks(h->c.block[0]);1795 h->c.bdsp.clear_blocks(h->block[0]);
1796 1796
1797 if (h->c.pict_type == AV_PICTURE_TYPE_S &&1797 if (h->c.pict_type == AV_PICTURE_TYPE_S &&
1798 ctx->vol_sprite_usage == GMC_SPRITE && (cbpc & 16) == 0)1798 ctx->vol_sprite_usage == GMC_SPRITE && (cbpc & 16) == 0)
@@ -1936,7 +1936,7 @@ static int mpeg4_decode_mb(H263DecContext *const h) · 137 unmodified lines
1936 if (modb2) {1936 if (modb2) {
1937 cbp = 0;1937 cbp = 0;
1938 } else {1938 } else {
1939 h->c.bdsp.clear_blocks(h->c.block[0]);1939 h->c.bdsp.clear_blocks(h->block[0]);
1940 cbp = get_bits(&h->c.gb, 6);1940 cbp = get_bits(&h->c.gb, 6);
1941 }1941 }
1942 1942
@@ -2073,10 +2073,10 @@ intra: · 130 unmodified lines
2073 if (!h->c.progressive_sequence)2073 if (!h->c.progressive_sequence)
2074 h->c.interlaced_dct = get_bits1(&h->c.gb);2074 h->c.interlaced_dct = get_bits1(&h->c.gb);
2075 2075
2076 h->c.bdsp.clear_blocks(h->c.block[0]);2076 h->c.bdsp.clear_blocks(h->block[0]);
2077 /* decode each block */2077 /* decode each block */
2078 for (i = 0; i < 6; i++) {2078 for (i = 0; i < 6; i++) {
2079 if (mpeg4_decode_block(ctx, h->c.block[i], i, cbp & 32,2079 if (mpeg4_decode_block(ctx, h->block[i], i, cbp & 32,
2080 1, use_intra_dc_vlc, 0) < 0)2080 1, use_intra_dc_vlc, 0) < 0)
2081 return AVERROR_INVALIDDATA;2081 return AVERROR_INVALIDDATA;
2082 cbp += cbp;2082 cbp += cbp;
@@ -2086,7 +2086,7 @@ intra: · 3 unmodified lines
2086 2086
2087 /* decode each block */2087 /* decode each block */
2088 for (i = 0; i < 6; i++) {2088 for (i = 0; i < 6; i++) {
2089 if (mpeg4_decode_block(ctx, h->c.block[i], i, cbp & 32, 0, 0, 0) < 0)2089 if (mpeg4_decode_block(ctx, h->block[i], i, cbp & 32, 0, 0, 0) < 0)
2090 return AVERROR_INVALIDDATA;2090 return AVERROR_INVALIDDATA;
2091 cbp += cbp;2091 cbp += cbp;
2092 }2092 }
libavcodec/msmpeg4dec.c+4−4
@@ -201,9 +201,9 @@ static int msmpeg4v12_decode_mb(H263DecContext *const h) · 200 unmodified lines
201 *mb_type_ptr = MB_TYPE_INTRA;201 *mb_type_ptr = MB_TYPE_INTRA;
202 }202 }
203 203
204 h->c.bdsp.clear_blocks(h->c.block[0]);204 h->c.bdsp.clear_blocks(h->block[0]);
205 for (i = 0; i < 6; i++) {205 for (i = 0; i < 6; i++) {
206 if (ff_msmpeg4_decode_block(ms, h->c.block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)206 if (ff_msmpeg4_decode_block(ms, h->block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
207 {207 {
208 av_log(h->c.avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n",208 av_log(h->c.avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n",
209 h->c.mb_x, h->c.mb_y, i);209 h->c.mb_x, h->c.mb_y, i);
@@ -292,9 +292,9 @@ static int msmpeg4v34_decode_mb(H263DecContext *const h) · 82 unmodified lines
292 }292 }
293 }293 }
294 294
295 h->c.bdsp.clear_blocks(h->c.block[0]);295 h->c.bdsp.clear_blocks(h->block[0]);
296 for (i = 0; i < 6; i++) {296 for (i = 0; i < 6; i++) {
297 if (ff_msmpeg4_decode_block(ms, h->c.block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)297 if (ff_msmpeg4_decode_block(ms, h->block[i], i, (cbp >> (5 - i)) & 1, NULL) < 0)
298 {298 {
299 av_log(h->c.avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n",299 av_log(h->c.avctx, AV_LOG_ERROR, "\nerror while decoding block: %d x %d (%d)\n",
300 h->c.mb_x, h->c.mb_y, i);300 h->c.mb_x, h->c.mb_y, i);
libavcodec/rv10.c+1−1
@@ -516,7 +516,7 @@ static int rv10_decode_packet(AVCodecContext *avctx, const uint8_t *buf, · 515 unmodified lines
516 }516 }
517 if (h->c.pict_type != AV_PICTURE_TYPE_B)517 if (h->c.pict_type != AV_PICTURE_TYPE_B)
518 ff_h263_update_motion_val(&h->c);518 ff_h263_update_motion_val(&h->c);
519 ff_mpv_reconstruct_mb(&h->c, h->c.block);519 ff_mpv_reconstruct_mb(&h->c, h->block);
520 if (h->c.loop_filter)520 if (h->c.loop_filter)
521 ff_h263_loop_filter(&h->c);521 ff_h263_loop_filter(&h->c);
522 522
libavcodec/wmv2dec.c+5−5
@@ -500,7 +500,7 @@ static int wmv2_decode_mb(H263DecContext *const h) · 499 unmodified lines
500 wmv2_pred_motion(w, &mx, &my);500 wmv2_pred_motion(w, &mx, &my);
501 501
502 if (cbp) {502 if (cbp) {
503 h->c.bdsp.clear_blocks(h->c.block[0]);503 h->c.bdsp.clear_blocks(h->block[0]);
504 if (ms->per_mb_rl_table) {504 if (ms->per_mb_rl_table) {
505 ms->rl_table_index = decode012(&h->c.gb);505 ms->rl_table_index = decode012(&h->c.gb);
506 ms->rl_chroma_table_index = ms->rl_table_index;506 ms->rl_chroma_table_index = ms->rl_table_index;
@@ -522,7 +522,7 @@ static int wmv2_decode_mb(H263DecContext *const h) · 15 unmodified lines
522 h->c.mv[0][0][1] = my;522 h->c.mv[0][0][1] = my;
523 523
524 for (i = 0; i < 6; i++) {524 for (i = 0; i < 6; i++) {
525 if ((ret = wmv2_decode_inter_block(w, h->c.block[i], i, (cbp >> (5 - i)) & 1)) < 0) {525 if ((ret = wmv2_decode_inter_block(w, h->block[i], i, (cbp >> (5 - i)) & 1)) < 0) {
526 av_log(h->c.avctx, AV_LOG_ERROR,526 av_log(h->c.avctx, AV_LOG_ERROR,
527 "\nerror while decoding inter block: %d x %d (%d)\n",527 "\nerror while decoding inter block: %d x %d (%d)\n",
528 h->c.mb_x, h->c.mb_y, i);528 h->c.mb_x, h->c.mb_y, i);
@@ -547,9 +547,9 @@ static int wmv2_decode_mb(H263DecContext *const h) · 18 unmodified lines
547 ms->rl_chroma_table_index = ms->rl_table_index;547 ms->rl_chroma_table_index = ms->rl_table_index;
548 }548 }
549 549
550 h->c.bdsp.clear_blocks(h->c.block[0]);550 h->c.bdsp.clear_blocks(h->block[0]);
551 for (i = 0; i < 6; i++) {551 for (i = 0; i < 6; i++) {
552 ret = ff_msmpeg4_decode_block(ms, h->c.block[i], i, (cbp >> (5 - i)) & 1, NULL);552 ret = ff_msmpeg4_decode_block(ms, h->block[i], i, (cbp >> (5 - i)) & 1, NULL);
553 if (ret < 0) {553 if (ret < 0) {
554 av_log(h->c.avctx, AV_LOG_ERROR,554 av_log(h->c.avctx, AV_LOG_ERROR,
555 "\nerror while decoding intra block: %d x %d (%d)\n",555 "\nerror while decoding intra block: %d x %d (%d)\n",
@@ -580,7 +580,7 @@ static av_cold int wmv2_decode_init(AVCodecContext *avctx) · 24 unmodified lines
580 580
581 decode_ext_header(w);581 decode_ext_header(w);
582 582
583 return ff_intrax8_common_init(avctx, &w->x8, h->c.block[0],583 return ff_intrax8_common_init(avctx, &w->x8, h->block[0],
584 s->mb_width, s->mb_height);584 s->mb_width, s->mb_height);
585}585}
586 586

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t