History

avcodec/mpegpicture: Cache AVFrame.data and linesize values

This avoids an indirection and is in preparation for removing the AVFrame from MpegEncContext.(cur|last|next)_pic altogether.

Andreas Rheinhardt committed 3 years ago

Commit 7814dd71 parent 1c40a1716 files · +114 −96Browse files

Showing the changes to libavcodec (16 of 16 files). Show all

Unified · Split

16 files
  1. libavcodec/motion_est.c +8 −8
  2. libavcodec/mpeg12dec.c +7 −7
  3. libavcodec/mpeg_er.c +3 −3
  4. libavcodec/mpegpicture.c +14 −0
  5. libavcodec/mpegpicture.h +4 −0
  6. libavcodec/mpegvideo.c +5 −5
  7. libavcodec/mpegvideo_dec.c +2 −2
  8. libavcodec/mpegvideo_enc.c +8 −8
  9. libavcodec/mpegvideo_motion.c +2 −2
  10. libavcodec/mpv_reconstruct_mb_template.c +6 −6
  11. libavcodec/msmpeg4.c +2 −2
  12. libavcodec/mss2.c +2 −2
  13. libavcodec/svq1enc.c +3 −3
  14. libavcodec/vc1_block.c +4 −4
  15. libavcodec/vc1_mc.c +30 −30
  16. libavcodec/vc1dec.c +14 −14
libavcodec/motion_est.c+8−8
@@ -703,11 +703,11 @@ static inline int h263_mv4_search(MpegEncContext *s, int mx, int my, int shift) · 702 unmodified lines
703703 offset= (s->mb_x*8 + (mx>>1)) + (s->mb_y*8 + (my>>1))*s->uvlinesize;
704704
705705 if(s->no_rounding){
706− s->hdsp.put_no_rnd_pixels_tab[1][dxy](c->scratchpad , s->last_pic.f->data[1] + offset, s->uvlinesize, 8);
707− s->hdsp.put_no_rnd_pixels_tab[1][dxy](c->scratchpad + 8, s->last_pic.f->data[2] + offset, s->uvlinesize, 8);
706+ s->hdsp.put_no_rnd_pixels_tab[1][dxy](c->scratchpad , s->last_pic.data[1] + offset, s->uvlinesize, 8);
707+ s->hdsp.put_no_rnd_pixels_tab[1][dxy](c->scratchpad + 8, s->last_pic.data[2] + offset, s->uvlinesize, 8);
708708 }else{
709− s->hdsp.put_pixels_tab [1][dxy](c->scratchpad , s->last_pic.f->data[1] + offset, s->uvlinesize, 8);
710− s->hdsp.put_pixels_tab [1][dxy](c->scratchpad + 8, s->last_pic.f->data[2] + offset, s->uvlinesize, 8);
709+ s->hdsp.put_pixels_tab [1][dxy](c->scratchpad , s->last_pic.data[1] + offset, s->uvlinesize, 8);
710+ s->hdsp.put_pixels_tab [1][dxy](c->scratchpad + 8, s->last_pic.data[2] + offset, s->uvlinesize, 8);
711711 }
712712
713713 dmin_sum += s->mecc.mb_cmp[1](s, s->new_pic->data[1] + s->mb_x * 8 + s->mb_y * 8 * s->uvlinesize, c->scratchpad, s->uvlinesize, 8);
@@ -899,7 +899,7 @@ void ff_estimate_p_frame_motion(MpegEncContext * s, · 185 unmodified lines
899899 const int shift= 1+s->quarter_sample;
900900 int mb_type=0;
901901
902− init_ref(c, s->new_pic->data, s->last_pic.f->data, NULL, 16*mb_x, 16*mb_y, 0);
902+ init_ref(c, s->new_pic->data, s->last_pic.data, NULL, 16*mb_x, 16*mb_y, 0);
903903
904904 av_assert0(s->quarter_sample==0 || s->quarter_sample==1);
905905 av_assert0(s->linesize == c->stride);
@@ -1070,7 +1070,7 @@ int ff_pre_estimate_p_frame_motion(MpegEncContext * s, · 164 unmodified lines
10701070 int P[10][2];
10711071 const int shift= 1+s->quarter_sample;
10721072 const int xy= mb_x + mb_y*s->mb_stride;
1073− init_ref(c, s->new_pic->data, s->last_pic.f->data, NULL, 16*mb_x, 16*mb_y, 0);
1073+ init_ref(c, s->new_pic->data, s->last_pic.data, NULL, 16*mb_x, 16*mb_y, 0);
10741074
10751075 av_assert0(s->quarter_sample==0 || s->quarter_sample==1);
10761076
@@ -1495,8 +1495,8 @@ void ff_estimate_b_frame_motion(MpegEncContext * s, · 418 unmodified lines
14951495 int fmin, bmin, dmin, fbmin, bimin, fimin;
14961496 int type=0;
14971497 const int xy = mb_y*s->mb_stride + mb_x;
1498− init_ref(c, s->new_pic->data, s->last_pic.f->data,
1499− s->next_pic.f->data, 16 * mb_x, 16 * mb_y, 2);
1498+ init_ref(c, s->new_pic->data, s->last_pic.data,
1499+ s->next_pic.data, 16 * mb_x, 16 * mb_y, 2);
15001500
15011501 get_limits(s, 16*mb_x, 16*mb_y);
15021502
libavcodec/mpeg12dec.c+7−7
@@ -1297,12 +1297,12 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) · 1296 unmodified lines
12971297
12981298 for (int i = 0; i < 3; i++) {
12991299 if (s->picture_structure == PICT_BOTTOM_FIELD) {
1300− s->cur_pic.f->data[i] = FF_PTR_ADD(s->cur_pic.f->data[i],
1301− s->cur_pic.f->linesize[i]);
1300+ s->cur_pic.data[i] = FF_PTR_ADD(s->cur_pic.data[i],
1301+ s->cur_pic.linesize[i]);
13021302 }
1303− s->cur_pic.f->linesize[i] *= 2;
1304− s->last_pic.f->linesize[i] *= 2;
1305− s->next_pic.f->linesize[i] *= 2;
1303+ s->cur_pic.linesize[i] *= 2;
1304+ s->last_pic.linesize[i] *= 2;
1305+ s->next_pic.linesize[i] *= 2;
13061306 }
13071307 }
13081308
@@ -1377,9 +1377,9 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) · 68 unmodified lines
13771377 return ret;
13781378
13791379 for (int i = 0; i < 3; i++) {
1380− s->cur_pic.f->data[i] = s->cur_pic_ptr->f->data[i];
1380+ s->cur_pic.data[i] = s->cur_pic_ptr->f->data[i];
13811381 if (s->picture_structure == PICT_BOTTOM_FIELD)
1382− s->cur_pic.f->data[i] +=
1382+ s->cur_pic.data[i] +=
13831383 s->cur_pic_ptr->f->linesize[i];
13841384 }
13851385 }
libavcodec/mpeg_er.c+3−3
@@ -84,13 +84,13 @@ static void mpeg_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type, · 83 unmodified lines
8484 if (!s->chroma_y_shift)
8585 s->bdsp.clear_blocks(s->block[6]);
8686
87− s->dest[0] = s->cur_pic.f->data[0] +
87+ s->dest[0] = s->cur_pic.data[0] +
8888 s->mb_y * 16 * s->linesize +
8989 s->mb_x * 16;
90− s->dest[1] = s->cur_pic.f->data[1] +
90+ s->dest[1] = s->cur_pic.data[1] +
9191 s->mb_y * (16 >> s->chroma_y_shift) * s->uvlinesize +
9292 s->mb_x * (16 >> s->chroma_x_shift);
93− s->dest[2] = s->cur_pic.f->data[2] +
93+ s->dest[2] = s->cur_pic.data[2] +
9494 s->mb_y * (16 >> s->chroma_y_shift) * s->uvlinesize +
9595 s->mb_x * (16 >> s->chroma_x_shift);
9696
libavcodec/mpegpicture.c+14−0
@@ -174,6 +174,11 @@ int ff_alloc_picture(AVCodecContext *avctx, Picture *pic, MotionEstContext *me, · 173 unmodified lines
174174 *linesize = pic->f->linesize[0];
175175 *uvlinesize = pic->f->linesize[1];
176176
177+ for (int i = 0; i < MPV_MAX_PLANES; i++) {
178+ pic->data[i] = pic->f->data[i];
179+ pic->linesize[i] = pic->f->linesize[i];
180+ }
181+
177182 ret = alloc_picture_tables(pools, pic, mb_height);
178183 if (ret < 0)
179184 goto fail;
@@ -206,7 +211,11 @@ void ff_mpeg_unref_picture(Picture *pic) · 26 unmodified lines
206211
207212 free_picture_tables(pic);
208213
214+ memset(pic->data, 0, sizeof(pic->data));
215+ memset(pic->linesize, 0, sizeof(pic->linesize));
216+
209217 pic->dummy = 0;
218+
210219 pic->field_picture = 0;
211220 pic->b_frame_score = 0;
212221 pic->reference = 0;
@@ -248,6 +257,11 @@ int ff_mpeg_ref_picture(Picture *dst, Picture *src) · 35 unmodified lines
248257 if (ret < 0)
249258 goto fail;
250259
260+ for (int i = 0; i < MPV_MAX_PLANES; i++) {
261+ dst->data[i] = src->data[i];
262+ dst->linesize[i] = src->linesize[i];
263+ }
264+
251265 update_picture_tables(dst, src);
252266
253267 ff_refstruct_replace(&dst->hwaccel_picture_private,
libavcodec/mpegpicture.h+4−0
@@ -21,6 +21,7 @@ · 20 unmodified lines
2121 #ifndef AVCODEC_MPEGPICTURE_H
2222 #define AVCODEC_MPEGPICTURE_H
2323
24+#include <stddef.h>
2425 #include <stdint.h>
2526
2627 #include "avcodec.h"
@@ -57,6 +58,9 @@ typedef struct Picture { · 30 unmodified lines
5758 struct AVFrame *f;
5859 ThreadFrame tf;
5960
61+ uint8_t *data[MPV_MAX_PLANES];
62+ ptrdiff_t linesize[MPV_MAX_PLANES];
63+
6064 int8_t *qscale_table_base;
6165 int8_t *qscale_table;
6266
libavcodec/mpegvideo.c+5−5
@@ -881,8 +881,8 @@ void ff_clean_intra_table_entries(MpegEncContext *s) · 880 unmodified lines
881881 }
882882
883883 void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename
884− const int linesize = s->cur_pic.f->linesize[0]; //not s->linesize as this would be wrong for field pics
885− const int uvlinesize = s->cur_pic.f->linesize[1];
884+ const int linesize = s->cur_pic.linesize[0]; //not s->linesize as this would be wrong for field pics
885+ const int uvlinesize = s->cur_pic.linesize[1];
886886 const int width_of_mb = (4 + (s->avctx->bits_per_raw_sample > 8)) - s->avctx->lowres;
887887 const int height_of_mb = 4 - s->avctx->lowres;
888888
@@ -894,9 +894,9 @@ void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename · 5 unmodified lines
894894 s->block_index[5]= s->mb_stride*(s->mb_y + s->mb_height + 2) + s->b8_stride*s->mb_height*2 + s->mb_x - 1;
895895 //block_index is not used by mpeg2, so it is not affected by chroma_format
896896
897− s->dest[0] = s->cur_pic.f->data[0] + (int)((s->mb_x - 1U) << width_of_mb);
898− s->dest[1] = s->cur_pic.f->data[1] + (int)((s->mb_x - 1U) << (width_of_mb - s->chroma_x_shift));
899− s->dest[2] = s->cur_pic.f->data[2] + (int)((s->mb_x - 1U) << (width_of_mb - s->chroma_x_shift));
897+ s->dest[0] = s->cur_pic.data[0] + (int)((s->mb_x - 1U) << width_of_mb);
898+ s->dest[1] = s->cur_pic.data[1] + (int)((s->mb_x - 1U) << (width_of_mb - s->chroma_x_shift));
899+ s->dest[2] = s->cur_pic.data[2] + (int)((s->mb_x - 1U) << (width_of_mb - s->chroma_x_shift));
900900
901901 if (s->picture_structure == PICT_FRAME) {
902902 s->dest[0] += s->mb_y * linesize << height_of_mb;
libavcodec/mpegvideo_dec.c+2−2
@@ -613,8 +613,8 @@ static av_always_inline void mpeg_motion_lowres(MpegEncContext *s, · 612 unmodified lines
613613 const int h_edge_pos = s->h_edge_pos >> lowres;
614614 const int v_edge_pos = s->v_edge_pos >> lowres;
615615 int hc = s->chroma_y_shift ? (h+1-bottom_field)>>1 : h;
616− linesize = s->cur_pic.f->linesize[0] << field_based;
617− uvlinesize = s->cur_pic.f->linesize[1] << field_based;
616+ linesize = s->cur_pic.linesize[0] << field_based;
617+ uvlinesize = s->cur_pic.linesize[1] << field_based;
618618
619619 // FIXME obviously not perfect but qpel will not work in lowres anyway
620620 if (s->quarter_sample) {
libavcodec/mpegvideo_enc.c+8−8
@@ -1655,20 +1655,20 @@ static void frame_end(MpegEncContext *s) · 1654 unmodified lines
16551655 !s->intra_only) {
16561656 int hshift = s->chroma_x_shift;
16571657 int vshift = s->chroma_y_shift;
1658− s->mpvencdsp.draw_edges(s->cur_pic.f->data[0],
1659− s->cur_pic.f->linesize[0],
1658+ s->mpvencdsp.draw_edges(s->cur_pic.data[0],
1659+ s->cur_pic.linesize[0],
16601660 s->h_edge_pos, s->v_edge_pos,
16611661 EDGE_WIDTH, EDGE_WIDTH,
16621662 EDGE_TOP | EDGE_BOTTOM);
1663− s->mpvencdsp.draw_edges(s->cur_pic.f->data[1],
1664− s->cur_pic.f->linesize[1],
1663+ s->mpvencdsp.draw_edges(s->cur_pic.data[1],
1664+ s->cur_pic.linesize[1],
16651665 s->h_edge_pos >> hshift,
16661666 s->v_edge_pos >> vshift,
16671667 EDGE_WIDTH >> hshift,
16681668 EDGE_WIDTH >> vshift,
16691669 EDGE_TOP | EDGE_BOTTOM);
1670− s->mpvencdsp.draw_edges(s->cur_pic.f->data[2],
1671− s->cur_pic.f->linesize[2],
1670+ s->mpvencdsp.draw_edges(s->cur_pic.data[2],
1671+ s->cur_pic.linesize[2],
16721672 s->h_edge_pos >> hshift,
16731673 s->v_edge_pos >> vshift,
16741674 EDGE_WIDTH >> hshift,
@@ -2268,14 +2268,14 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, · 593 unmodified lines
22682268
22692269 if (s->mv_dir & MV_DIR_FORWARD) {
22702270 ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 0,
2271− s->last_pic.f->data,
2271+ s->last_pic.data,
22722272 op_pix, op_qpix);
22732273 op_pix = s->hdsp.avg_pixels_tab;
22742274 op_qpix = s->qdsp.avg_qpel_pixels_tab;
22752275 }
22762276 if (s->mv_dir & MV_DIR_BACKWARD) {
22772277 ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 1,
2278− s->next_pic.f->data,
2278+ s->next_pic.data,
22792279 op_pix, op_qpix);
22802280 }
22812281
libavcodec/mpegvideo_motion.c+2−2
@@ -93,8 +93,8 @@ void mpeg_motion_internal(MpegEncContext *s, · 92 unmodified lines
9393 ptrdiff_t uvlinesize, linesize;
9494
9595 v_edge_pos = s->v_edge_pos >> field_based;
96− linesize = s->cur_pic.f->linesize[0] << field_based;
97− uvlinesize = s->cur_pic.f->linesize[1] << field_based;
96+ linesize = s->cur_pic.linesize[0] << field_based;
97+ uvlinesize = s->cur_pic.linesize[1] << field_based;
9898 block_y_half = (field_based | is_16x8);
9999
100100 dxy = ((motion_y & 1) << 1) | (motion_x & 1);
libavcodec/mpv_reconstruct_mb_template.c+6−6
@@ -82,8 +82,8 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], · 81 unmodified lines
8282 {
8383 uint8_t *dest_y, *dest_cb, *dest_cr;
8484 int dct_linesize, dct_offset;
85− const int linesize = s->cur_pic.f->linesize[0]; //not s->linesize as this would be wrong for field pics
86− const int uvlinesize = s->cur_pic.f->linesize[1];
85+ const int linesize = s->cur_pic.linesize[0]; //not s->linesize as this would be wrong for field pics
86+ const int uvlinesize = s->cur_pic.linesize[1];
8787 const int readable = IS_ENCODER || lowres_flag || s->pict_type != AV_PICTURE_TYPE_B;
8888 const int block_size = lowres_flag ? 8 >> s->avctx->lowres : 8;
8989
@@ -137,11 +137,11 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], · 47 unmodified lines
137137 const h264_chroma_mc_func *op_pix = s->h264chroma.put_h264_chroma_pixels_tab;
138138
139139 if (s->mv_dir & MV_DIR_FORWARD) {
140− MPV_motion_lowres(s, dest_y, dest_cb, dest_cr, 0, s->last_pic.f->data, op_pix);
140+ MPV_motion_lowres(s, dest_y, dest_cb, dest_cr, 0, s->last_pic.data, op_pix);
141141 op_pix = s->h264chroma.avg_h264_chroma_pixels_tab;
142142 }
143143 if (s->mv_dir & MV_DIR_BACKWARD) {
144− MPV_motion_lowres(s, dest_y, dest_cb, dest_cr, 1, s->next_pic.f->data, op_pix);
144+ MPV_motion_lowres(s, dest_y, dest_cb, dest_cr, 1, s->next_pic.data, op_pix);
145145 }
146146 } else {
147147 op_pixels_func (*op_pix)[4];
@@ -155,12 +155,12 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], · 7 unmodified lines
155155 op_qpix = s->qdsp.put_no_rnd_qpel_pixels_tab;
156156 }
157157 if (s->mv_dir & MV_DIR_FORWARD) {
158− ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 0, s->last_pic.f->data, op_pix, op_qpix);
158+ ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 0, s->last_pic.data, op_pix, op_qpix);
159159 op_pix = s->hdsp.avg_pixels_tab;
160160 op_qpix = s->qdsp.avg_qpel_pixels_tab;
161161 }
162162 if (s->mv_dir & MV_DIR_BACKWARD) {
163− ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 1, s->next_pic.f->data, op_pix, op_qpix);
163+ ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 1, s->next_pic.data, op_pix, op_qpix);
164164 }
165165 }
166166
libavcodec/msmpeg4.c+2−2
@@ -282,10 +282,10 @@ int ff_msmpeg4_pred_dc(MpegEncContext *s, int n, · 281 unmodified lines
282282 int bs = 8 >> s->avctx->lowres;
283283 if(n<4){
284284 wrap= s->linesize;
285− dest = s->cur_pic.f->data[0] + (((n >> 1) + 2*s->mb_y) * bs* wrap ) + ((n & 1) + 2*s->mb_x) * bs;
285+ dest = s->cur_pic.data[0] + (((n >> 1) + 2*s->mb_y) * bs* wrap ) + ((n & 1) + 2*s->mb_x) * bs;
286286 }else{
287287 wrap= s->uvlinesize;
288− dest = s->cur_pic.f->data[n - 3] + (s->mb_y * bs * wrap) + s->mb_x * bs;
288+ dest = s->cur_pic.data[n - 3] + (s->mb_y * bs * wrap) + s->mb_x * bs;
289289 }
290290 if(s->mb_x==0) a= (1024 + (scale>>1))/scale;
291291 else a= get_dc(dest-bs, wrap, scale*8>>(2*s->avctx->lowres), bs);
libavcodec/mss2.c+2−2
@@ -382,7 +382,7 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, · 381 unmodified lines
382382 MSS12Context *c = &ctx->c;
383383 VC1Context *v = avctx->priv_data;
384384 MpegEncContext *s = &v->s;
385− AVFrame *f;
385+ Picture *f;
386386 int ret;
387387
388388 ff_mpeg_flush(avctx);
@@ -431,7 +431,7 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, · 42 unmodified lines
431431
432432 ff_mpv_frame_end(s);
433433
434− f = s->cur_pic.f;
434+ f = &s->cur_pic;
435435
436436 if (v->respic == 3) {
437437 ctx->dsp.upsample_plane(f->data[0], f->linesize[0], w, h);
libavcodec/svq1enc.c+3−3
@@ -328,11 +328,11 @@ static int svq1_encode_plane(SVQ1EncContext *s, int plane, · 327 unmodified lines
328328 s->m.avctx = s->avctx;
329329 s->m.cur_pic_ptr = &s->m.cur_pic;
330330 s->m.last_pic_ptr = &s->m.last_pic;
331− s->m.last_pic.f->data[0] = ref_plane;
331+ s->m.last_pic.data[0] = ref_plane;
332332 s->m.linesize =
333− s->m.last_pic.f->linesize[0] =
333+ s->m.last_pic.linesize[0] =
334334 s->m.new_pic->linesize[0] =
335− s->m.cur_pic.f->linesize[0] = stride;
335+ s->m.cur_pic.linesize[0] = stride;
336336 s->m.width = width;
337337 s->m.height = height;
338338 s->m.mb_width = block_width;
libavcodec/vc1_block.c+4−4
@@ -2943,7 +2943,7 @@ static void vc1_decode_skip_blocks(VC1Context *v) · 2942 unmodified lines
29432943 {
29442944 MpegEncContext *s = &v->s;
29452945
2946− if (!v->s.last_pic.f->data[0])
2946+ if (!v->s.last_pic.data[0])
29472947 return;
29482948
29492949 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, ER_MB_END);
@@ -2952,9 +2952,9 @@ static void vc1_decode_skip_blocks(VC1Context *v) · 2 unmodified lines
29522952 s->mb_x = 0;
29532953 init_block_index(v);
29542954 update_block_index(s);
2955− memcpy(s->dest[0], s->last_pic.f->data[0] + s->mb_y * 16 * s->linesize, s->linesize * 16);
2956− memcpy(s->dest[1], s->last_pic.f->data[1] + s->mb_y * 8 * s->uvlinesize, s->uvlinesize * 8);
2957− memcpy(s->dest[2], s->last_pic.f->data[2] + s->mb_y * 8 * s->uvlinesize, s->uvlinesize * 8);
2955+ memcpy(s->dest[0], s->last_pic.data[0] + s->mb_y * 16 * s->linesize, s->linesize * 16);
2956+ memcpy(s->dest[1], s->last_pic.data[1] + s->mb_y * 8 * s->uvlinesize, s->uvlinesize * 8);
2957+ memcpy(s->dest[2], s->last_pic.data[2] + s->mb_y * 8 * s->uvlinesize, s->uvlinesize * 8);
29582958 s->first_slice_line = 0;
29592959 }
29602960 }
libavcodec/vc1_mc.c+30−30
@@ -184,7 +184,7 @@ void ff_vc1_mc_1mv(VC1Context *v, int dir) · 183 unmodified lines
184184
185185 if ((!v->field_mode ||
186186 (v->ref_field_type[dir] == 1 && v->cur_field_type == 1)) &&
187− !v->s.last_pic.f->data[0])
187+ !v->s.last_pic.data[0])
188188 return;
189189
190190 linesize = s->cur_pic_ptr->f->linesize[0];
@@ -219,26 +219,26 @@ void ff_vc1_mc_1mv(VC1Context *v, int dir) · 28 unmodified lines
219219 }
220220 if (!dir) {
221221 if (v->field_mode && (v->cur_field_type != v->ref_field_type[dir]) && v->second_field) {
222− srcY = s->cur_pic.f->data[0];
223− srcU = s->cur_pic.f->data[1];
224− srcV = s->cur_pic.f->data[2];
222+ srcY = s->cur_pic.data[0];
223+ srcU = s->cur_pic.data[1];
224+ srcV = s->cur_pic.data[2];
225225 luty = v->curr_luty;
226226 lutuv = v->curr_lutuv;
227227 use_ic = *v->curr_use_ic;
228228 interlace = 1;
229229 } else {
230− srcY = s->last_pic.f->data[0];
231− srcU = s->last_pic.f->data[1];
232− srcV = s->last_pic.f->data[2];
230+ srcY = s->last_pic.data[0];
231+ srcU = s->last_pic.data[1];
232+ srcV = s->last_pic.data[2];
233233 luty = v->last_luty;
234234 lutuv = v->last_lutuv;
235235 use_ic = v->last_use_ic;
236236 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
237237 }
238238 } else {
239− srcY = s->next_pic.f->data[0];
240− srcU = s->next_pic.f->data[1];
241− srcV = s->next_pic.f->data[2];
239+ srcY = s->next_pic.data[0];
240+ srcU = s->next_pic.data[1];
241+ srcV = s->next_pic.data[2];
242242 luty = v->next_luty;
243243 lutuv = v->next_lutuv;
244244 use_ic = v->next_use_ic;
@@ -464,7 +464,7 @@ void ff_vc1_mc_4mv_luma(VC1Context *v, int n, int dir, int avg) · 219 unmodified lines
464464
465465 if ((!v->field_mode ||
466466 (v->ref_field_type[dir] == 1 && v->cur_field_type == 1)) &&
467− !v->s.last_pic.f->data[0])
467+ !v->s.last_pic.data[0])
468468 return;
469469
470470 linesize = s->cur_pic_ptr->f->linesize[0];
@@ -474,18 +474,18 @@ void ff_vc1_mc_4mv_luma(VC1Context *v, int n, int dir, int avg) · 3 unmodified lines
474474
475475 if (!dir) {
476476 if (v->field_mode && (v->cur_field_type != v->ref_field_type[dir]) && v->second_field) {
477− srcY = s->cur_pic.f->data[0];
477+ srcY = s->cur_pic.data[0];
478478 luty = v->curr_luty;
479479 use_ic = *v->curr_use_ic;
480480 interlace = 1;
481481 } else {
482− srcY = s->last_pic.f->data[0];
482+ srcY = s->last_pic.data[0];
483483 luty = v->last_luty;
484484 use_ic = v->last_use_ic;
485485 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
486486 }
487487 } else {
488− srcY = s->next_pic.f->data[0];
488+ srcY = s->next_pic.data[0];
489489 luty = v->next_luty;
490490 use_ic = v->next_use_ic;
491491 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
@@ -645,7 +645,7 @@ void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir) · 153 unmodified lines
645645 int interlace;
646646 int uvlinesize;
647647
648− if (!v->field_mode && !v->s.last_pic.f->data[0])
648+ if (!v->field_mode && !v->s.last_pic.data[0])
649649 return;
650650 if (CONFIG_GRAY && s->avctx->flags & AV_CODEC_FLAG_GRAY)
651651 return;
@@ -664,7 +664,7 @@ void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir) · 12 unmodified lines
664664 int opp_count = get_luma_mv(v, dir, &tx, &ty);
665665 chroma_ref_type = v->cur_field_type ^ (opp_count > 2);
666666 }
667− if (v->field_mode && chroma_ref_type == 1 && v->cur_field_type == 1 && !v->s.last_pic.f->data[0])
667+ if (v->field_mode && chroma_ref_type == 1 && v->cur_field_type == 1 && !v->s.last_pic.data[0])
668668 return;
669669 s->cur_pic.motion_val[1][s->block_index[0] + v->blocks_off][0] = tx;
670670 s->cur_pic.motion_val[1][s->block_index[0] + v->blocks_off][1] = ty;
@@ -698,21 +698,21 @@ void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir) · 27 unmodified lines
698698
699699 if (!dir) {
700700 if (v->field_mode && (v->cur_field_type != chroma_ref_type) && v->second_field) {
701− srcU = s->cur_pic.f->data[1];
702− srcV = s->cur_pic.f->data[2];
701+ srcU = s->cur_pic.data[1];
702+ srcV = s->cur_pic.data[2];
703703 lutuv = v->curr_lutuv;
704704 use_ic = *v->curr_use_ic;
705705 interlace = 1;
706706 } else {
707− srcU = s->last_pic.f->data[1];
708− srcV = s->last_pic.f->data[2];
707+ srcU = s->last_pic.data[1];
708+ srcV = s->last_pic.data[2];
709709 lutuv = v->last_lutuv;
710710 use_ic = v->last_use_ic;
711711 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
712712 }
713713 } else {
714− srcU = s->next_pic.f->data[1];
715− srcV = s->next_pic.f->data[2];
714+ srcU = s->next_pic.data[1];
715+ srcV = s->next_pic.data[2];
716716 lutuv = v->next_lutuv;
717717 use_ic = v->next_use_ic;
718718 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
@@ -880,14 +880,14 @@ void ff_vc1_mc_4mv_chroma4(VC1Context *v, int dir, int dir2, int avg) · 161 unmodified lines
880880 else
881881 uvsrc_y = av_clip(uvsrc_y, -8, s->avctx->coded_height >> 1);
882882 if (i < 2 ? dir : dir2) {
883− srcU = s->next_pic.f->data[1];
884− srcV = s->next_pic.f->data[2];
883+ srcU = s->next_pic.data[1];
884+ srcV = s->next_pic.data[2];
885885 lutuv = v->next_lutuv;
886886 use_ic = v->next_use_ic;
887887 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
888888 } else {
889− srcU = s->last_pic.f->data[1];
890− srcV = s->last_pic.f->data[2];
889+ srcU = s->last_pic.data[1];
890+ srcV = s->last_pic.data[2];
891891 lutuv = v->last_lutuv;
892892 use_ic = v->last_use_ic;
893893 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
@@ -1012,7 +1012,7 @@ void ff_vc1_interp_mc(VC1Context *v) · 118 unmodified lines
10121012 int interlace;
10131013 int linesize, uvlinesize;
10141014
1015− if (!v->field_mode && !v->s.next_pic.f->data[0])
1015+ if (!v->field_mode && !v->s.next_pic.data[0])
10161016 return;
10171017
10181018 linesize = s->cur_pic_ptr->f->linesize[0];
@@ -1030,9 +1030,9 @@ void ff_vc1_interp_mc(VC1Context *v) · 11 unmodified lines
10301030 uvmx = uvmx + ((uvmx < 0) ? -(uvmx & 1) : (uvmx & 1));
10311031 uvmy = uvmy + ((uvmy < 0) ? -(uvmy & 1) : (uvmy & 1));
10321032 }
1033− srcY = s->next_pic.f->data[0];
1034− srcU = s->next_pic.f->data[1];
1035− srcV = s->next_pic.f->data[2];
1033+ srcY = s->next_pic.data[0];
1034+ srcU = s->next_pic.data[1];
1035+ srcV = s->next_pic.data[2];
10361036
10371037 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
10381038
libavcodec/vc1dec.c+14−14
@@ -235,15 +235,15 @@ static void vc1_draw_sprites(VC1Context *v, SpriteData* sd) · 234 unmodified lines
235235 v->sprite_output_frame->linesize[plane] * row;
236236
237237 for (sprite = 0; sprite <= v->two_sprites; sprite++) {
238− uint8_t *iplane = s->cur_pic.f->data[plane];
239− int iline = s->cur_pic.f->linesize[plane];
238+ uint8_t *iplane = s->cur_pic.data[plane];
239+ int iline = s->cur_pic.linesize[plane];
240240 int ycoord = yoff[sprite] + yadv[sprite] * row;
241241 int yline = ycoord >> 16;
242242 int next_line;
243243 ysub[sprite] = ycoord & 0xFFFF;
244244 if (sprite) {
245− iplane = s->last_pic.f->data[plane];
246− iline = s->last_pic.f->linesize[plane];
245+ iplane = s->last_pic.data[plane];
246+ iline = s->last_pic.linesize[plane];
247247 }
248248 next_line = FFMIN(yline + 1, (v->sprite_height >> !!plane) - 1) * iline;
249249 if (!(xoff[sprite] & 0xFFFF) && xadv[sprite] == 1 << 16) {
@@ -317,12 +317,12 @@ static int vc1_decode_sprites(VC1Context *v, GetBitContext* gb) · 67 unmodified lines
317317 if (ret < 0)
318318 return ret;
319319
320− if (!s->cur_pic.f || !s->cur_pic.f->data[0]) {
320+ if (!s->cur_pic.data[0]) {
321321 av_log(avctx, AV_LOG_ERROR, "Got no sprites\n");
322322 return AVERROR_UNKNOWN;
323323 }
324324
325− if (v->two_sprites && (!s->last_pic_ptr || !s->last_pic.f->data[0])) {
325+ if (v->two_sprites && (!s->last_pic_ptr || !s->last_pic.data[0])) {
326326 av_log(avctx, AV_LOG_WARNING, "Need two sprites, only got one\n");
327327 v->two_sprites = 0;
328328 }
@@ -340,14 +340,14 @@ static void vc1_sprite_flush(AVCodecContext *avctx) · 11 unmodified lines
340340 {
341341 VC1Context *v = avctx->priv_data;
342342 MpegEncContext *s = &v->s;
343− AVFrame *f = s->cur_pic.f;
343+ Picture *f = &s->cur_pic;
344344 int plane, i;
345345
346346 /* Windows Media Image codecs have a convergence interval of two keyframes.
347347 Since we can't enforce it, clear to black the missing sprite. This is
348348 wrong but it looks better than doing nothing. */
349349
350− if (f && f->data[0])
350+ if (f->data[0])
351351 for (plane = 0; plane < (CONFIG_GRAY && s->avctx->flags & AV_CODEC_FLAG_GRAY ? 1 : 3); plane++)
352352 for (i = 0; i < v->sprite_height>>!!plane; i++)
353353 memset(f->data[plane] + i * f->linesize[plane],
@@ -1230,9 +1230,9 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, · 876 unmodified lines
12301230
12311231 v->end_mb_x = s->mb_width;
12321232 if (v->field_mode) {
1233− s->cur_pic.f->linesize[0] <<= 1;
1234− s->cur_pic.f->linesize[1] <<= 1;
1235− s->cur_pic.f->linesize[2] <<= 1;
1233+ s->cur_pic.linesize[0] <<= 1;
1234+ s->cur_pic.linesize[1] <<= 1;
1235+ s->cur_pic.linesize[2] <<= 1;
12361236 s->linesize <<= 1;
12371237 s->uvlinesize <<= 1;
12381238 }
@@ -1307,9 +1307,9 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, · 68 unmodified lines
13071307 }
13081308 if (v->field_mode) {
13091309 v->second_field = 0;
1310− s->cur_pic.f->linesize[0] >>= 1;
1311− s->cur_pic.f->linesize[1] >>= 1;
1312− s->cur_pic.f->linesize[2] >>= 1;
1310+ s->cur_pic.linesize[0] >>= 1;
1311+ s->cur_pic.linesize[1] >>= 1;
1312+ s->cur_pic.linesize[2] >>= 1;
13131313 s->linesize >>= 1;
13141314 s->uvlinesize >>= 1;
13151315 if (v->s.pict_type != AV_PICTURE_TYPE_BI && v->s.pict_type != AV_PICTURE_TYPE_B) {

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