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

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
703 offset= (s->mb_x*8 + (mx>>1)) + (s->mb_y*8 + (my>>1))*s->uvlinesize;703 offset= (s->mb_x*8 + (mx>>1)) + (s->mb_y*8 + (my>>1))*s->uvlinesize;
704 704
705 if(s->no_rounding){705 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);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.f->data[2] + 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);
708 }else{708 }else{
709 s->hdsp.put_pixels_tab [1][dxy](c->scratchpad , s->last_pic.f->data[1] + 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.f->data[2] + offset, s->uvlinesize, 8);710 s->hdsp.put_pixels_tab [1][dxy](c->scratchpad + 8, s->last_pic.data[2] + offset, s->uvlinesize, 8);
711 }711 }
712 712
713 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);713 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
899 const int shift= 1+s->quarter_sample;899 const int shift= 1+s->quarter_sample;
900 int mb_type=0;900 int mb_type=0;
901 901
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);
903 903
904 av_assert0(s->quarter_sample==0 || s->quarter_sample==1);904 av_assert0(s->quarter_sample==0 || s->quarter_sample==1);
905 av_assert0(s->linesize == c->stride);905 av_assert0(s->linesize == c->stride);
@@ -1070,7 +1070,7 @@ int ff_pre_estimate_p_frame_motion(MpegEncContext * s, · 164 unmodified lines
1070 int P[10][2];1070 int P[10][2];
1071 const int shift= 1+s->quarter_sample;1071 const int shift= 1+s->quarter_sample;
1072 const int xy= mb_x + mb_y*s->mb_stride;1072 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);
1074 1074
1075 av_assert0(s->quarter_sample==0 || s->quarter_sample==1);1075 av_assert0(s->quarter_sample==0 || s->quarter_sample==1);
1076 1076
@@ -1495,8 +1495,8 @@ void ff_estimate_b_frame_motion(MpegEncContext * s, · 418 unmodified lines
1495 int fmin, bmin, dmin, fbmin, bimin, fimin;1495 int fmin, bmin, dmin, fbmin, bimin, fimin;
1496 int type=0;1496 int type=0;
1497 const int xy = mb_y*s->mb_stride + mb_x;1497 const int xy = mb_y*s->mb_stride + mb_x;
1498 init_ref(c, s->new_pic->data, s->last_pic.f->data,1498 init_ref(c, s->new_pic->data, s->last_pic.data,
1499 s->next_pic.f->data, 16 * mb_x, 16 * mb_y, 2);1499 s->next_pic.data, 16 * mb_x, 16 * mb_y, 2);
1500 1500
1501 get_limits(s, 16*mb_x, 16*mb_y);1501 get_limits(s, 16*mb_x, 16*mb_y);
1502 1502
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
1297 1297
1298 for (int i = 0; i < 3; i++) {1298 for (int i = 0; i < 3; i++) {
1299 if (s->picture_structure == PICT_BOTTOM_FIELD) {1299 if (s->picture_structure == PICT_BOTTOM_FIELD) {
1300 s->cur_pic.f->data[i] = FF_PTR_ADD(s->cur_pic.f->data[i],1300 s->cur_pic.data[i] = FF_PTR_ADD(s->cur_pic.data[i],
1301 s->cur_pic.f->linesize[i]);1301 s->cur_pic.linesize[i]);
1302 }1302 }
1303 s->cur_pic.f->linesize[i] *= 2;1303 s->cur_pic.linesize[i] *= 2;
1304 s->last_pic.f->linesize[i] *= 2;1304 s->last_pic.linesize[i] *= 2;
1305 s->next_pic.f->linesize[i] *= 2;1305 s->next_pic.linesize[i] *= 2;
1306 }1306 }
1307 }1307 }
1308 1308
@@ -1377,9 +1377,9 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size) · 68 unmodified lines
1377 return ret;1377 return ret;
1378 1378
1379 for (int i = 0; i < 3; i++) {1379 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];
1381 if (s->picture_structure == PICT_BOTTOM_FIELD)1381 if (s->picture_structure == PICT_BOTTOM_FIELD)
1382 s->cur_pic.f->data[i] +=1382 s->cur_pic.data[i] +=
1383 s->cur_pic_ptr->f->linesize[i];1383 s->cur_pic_ptr->f->linesize[i];
1384 }1384 }
1385 }1385 }
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
84 if (!s->chroma_y_shift)84 if (!s->chroma_y_shift)
85 s->bdsp.clear_blocks(s->block[6]);85 s->bdsp.clear_blocks(s->block[6]);
86 86
87 s->dest[0] = s->cur_pic.f->data[0] +87 s->dest[0] = s->cur_pic.data[0] +
88 s->mb_y * 16 * s->linesize +88 s->mb_y * 16 * s->linesize +
89 s->mb_x * 16;89 s->mb_x * 16;
90 s->dest[1] = s->cur_pic.f->data[1] +90 s->dest[1] = s->cur_pic.data[1] +
91 s->mb_y * (16 >> s->chroma_y_shift) * s->uvlinesize +91 s->mb_y * (16 >> s->chroma_y_shift) * s->uvlinesize +
92 s->mb_x * (16 >> s->chroma_x_shift);92 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] +
94 s->mb_y * (16 >> s->chroma_y_shift) * s->uvlinesize +94 s->mb_y * (16 >> s->chroma_y_shift) * s->uvlinesize +
95 s->mb_x * (16 >> s->chroma_x_shift);95 s->mb_x * (16 >> s->chroma_x_shift);
96 96
libavcodec/mpegpicture.c+14−0
@@ -174,6 +174,11 @@ int ff_alloc_picture(AVCodecContext *avctx, Picture *pic, MotionEstContext *me, · 173 unmodified lines
174 *linesize = pic->f->linesize[0];174 *linesize = pic->f->linesize[0];
175 *uvlinesize = pic->f->linesize[1];175 *uvlinesize = pic->f->linesize[1];
176 176
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
177 ret = alloc_picture_tables(pools, pic, mb_height);182 ret = alloc_picture_tables(pools, pic, mb_height);
178 if (ret < 0)183 if (ret < 0)
179 goto fail;184 goto fail;
@@ -206,7 +211,11 @@ void ff_mpeg_unref_picture(Picture *pic) · 26 unmodified lines
206 211
207 free_picture_tables(pic);212 free_picture_tables(pic);
208 213
214 memset(pic->data, 0, sizeof(pic->data));
215 memset(pic->linesize, 0, sizeof(pic->linesize));
216
209 pic->dummy = 0;217 pic->dummy = 0;
218
210 pic->field_picture = 0;219 pic->field_picture = 0;
211 pic->b_frame_score = 0;220 pic->b_frame_score = 0;
212 pic->reference = 0;221 pic->reference = 0;
@@ -248,6 +257,11 @@ int ff_mpeg_ref_picture(Picture *dst, Picture *src) · 35 unmodified lines
248 if (ret < 0)257 if (ret < 0)
249 goto fail;258 goto fail;
250 259
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
251 update_picture_tables(dst, src);265 update_picture_tables(dst, src);
252 266
253 ff_refstruct_replace(&dst->hwaccel_picture_private,267 ff_refstruct_replace(&dst->hwaccel_picture_private,
libavcodec/mpegpicture.h+4−0
@@ -21,6 +21,7 @@ · 20 unmodified lines
21#ifndef AVCODEC_MPEGPICTURE_H21#ifndef AVCODEC_MPEGPICTURE_H
22#define AVCODEC_MPEGPICTURE_H22#define AVCODEC_MPEGPICTURE_H
23 23
24#include <stddef.h>
24#include <stdint.h>25#include <stdint.h>
25 26
26#include "avcodec.h"27#include "avcodec.h"
@@ -57,6 +58,9 @@ typedef struct Picture { · 30 unmodified lines
57 struct AVFrame *f;58 struct AVFrame *f;
58 ThreadFrame tf;59 ThreadFrame tf;
59 60
61 uint8_t *data[MPV_MAX_PLANES];
62 ptrdiff_t linesize[MPV_MAX_PLANES];
63
60 int8_t *qscale_table_base;64 int8_t *qscale_table_base;
61 int8_t *qscale_table;65 int8_t *qscale_table;
62 66
libavcodec/mpegvideo.c+5−5
@@ -881,8 +881,8 @@ void ff_clean_intra_table_entries(MpegEncContext *s) · 880 unmodified lines
881}881}
882 882
883void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename883void 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 pics884 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.f->linesize[1];885 const int uvlinesize = s->cur_pic.linesize[1];
886 const int width_of_mb = (4 + (s->avctx->bits_per_raw_sample > 8)) - s->avctx->lowres;886 const int width_of_mb = (4 + (s->avctx->bits_per_raw_sample > 8)) - s->avctx->lowres;
887 const int height_of_mb = 4 - s->avctx->lowres;887 const int height_of_mb = 4 - s->avctx->lowres;
888 888
@@ -894,9 +894,9 @@ void ff_init_block_index(MpegEncContext *s){ //FIXME maybe rename · 5 unmodified lines
894 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;894 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;
895 //block_index is not used by mpeg2, so it is not affected by chroma_format895 //block_index is not used by mpeg2, so it is not affected by chroma_format
896 896
897 s->dest[0] = s->cur_pic.f->data[0] + (int)((s->mb_x - 1U) << width_of_mb);897 s->dest[0] = s->cur_pic.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));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.f->data[2] + (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));
900 900
901 if (s->picture_structure == PICT_FRAME) {901 if (s->picture_structure == PICT_FRAME) {
902 s->dest[0] += s->mb_y * linesize << height_of_mb;902 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
613 const int h_edge_pos = s->h_edge_pos >> lowres;613 const int h_edge_pos = s->h_edge_pos >> lowres;
614 const int v_edge_pos = s->v_edge_pos >> lowres;614 const int v_edge_pos = s->v_edge_pos >> lowres;
615 int hc = s->chroma_y_shift ? (h+1-bottom_field)>>1 : h;615 int hc = s->chroma_y_shift ? (h+1-bottom_field)>>1 : h;
616 linesize = s->cur_pic.f->linesize[0] << field_based;616 linesize = s->cur_pic.linesize[0] << field_based;
617 uvlinesize = s->cur_pic.f->linesize[1] << field_based;617 uvlinesize = s->cur_pic.linesize[1] << field_based;
618 618
619 // FIXME obviously not perfect but qpel will not work in lowres anyway619 // FIXME obviously not perfect but qpel will not work in lowres anyway
620 if (s->quarter_sample) {620 if (s->quarter_sample) {
libavcodec/mpegvideo_enc.c+8−8
@@ -1655,20 +1655,20 @@ static void frame_end(MpegEncContext *s) · 1654 unmodified lines
1655 !s->intra_only) {1655 !s->intra_only) {
1656 int hshift = s->chroma_x_shift;1656 int hshift = s->chroma_x_shift;
1657 int vshift = s->chroma_y_shift;1657 int vshift = s->chroma_y_shift;
1658 s->mpvencdsp.draw_edges(s->cur_pic.f->data[0],1658 s->mpvencdsp.draw_edges(s->cur_pic.data[0],
1659 s->cur_pic.f->linesize[0],1659 s->cur_pic.linesize[0],
1660 s->h_edge_pos, s->v_edge_pos,1660 s->h_edge_pos, s->v_edge_pos,
1661 EDGE_WIDTH, EDGE_WIDTH,1661 EDGE_WIDTH, EDGE_WIDTH,
1662 EDGE_TOP | EDGE_BOTTOM);1662 EDGE_TOP | EDGE_BOTTOM);
1663 s->mpvencdsp.draw_edges(s->cur_pic.f->data[1],1663 s->mpvencdsp.draw_edges(s->cur_pic.data[1],
1664 s->cur_pic.f->linesize[1],1664 s->cur_pic.linesize[1],
1665 s->h_edge_pos >> hshift,1665 s->h_edge_pos >> hshift,
1666 s->v_edge_pos >> vshift,1666 s->v_edge_pos >> vshift,
1667 EDGE_WIDTH >> hshift,1667 EDGE_WIDTH >> hshift,
1668 EDGE_WIDTH >> vshift,1668 EDGE_WIDTH >> vshift,
1669 EDGE_TOP | EDGE_BOTTOM);1669 EDGE_TOP | EDGE_BOTTOM);
1670 s->mpvencdsp.draw_edges(s->cur_pic.f->data[2],1670 s->mpvencdsp.draw_edges(s->cur_pic.data[2],
1671 s->cur_pic.f->linesize[2],1671 s->cur_pic.linesize[2],
1672 s->h_edge_pos >> hshift,1672 s->h_edge_pos >> hshift,
1673 s->v_edge_pos >> vshift,1673 s->v_edge_pos >> vshift,
1674 EDGE_WIDTH >> hshift,1674 EDGE_WIDTH >> hshift,
@@ -2268,14 +2268,14 @@ static av_always_inline void encode_mb_internal(MpegEncContext *s, · 593 unmodified lines
2268 2268
2269 if (s->mv_dir & MV_DIR_FORWARD) {2269 if (s->mv_dir & MV_DIR_FORWARD) {
2270 ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 0,2270 ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 0,
2271 s->last_pic.f->data,2271 s->last_pic.data,
2272 op_pix, op_qpix);2272 op_pix, op_qpix);
2273 op_pix = s->hdsp.avg_pixels_tab;2273 op_pix = s->hdsp.avg_pixels_tab;
2274 op_qpix = s->qdsp.avg_qpel_pixels_tab;2274 op_qpix = s->qdsp.avg_qpel_pixels_tab;
2275 }2275 }
2276 if (s->mv_dir & MV_DIR_BACKWARD) {2276 if (s->mv_dir & MV_DIR_BACKWARD) {
2277 ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 1,2277 ff_mpv_motion(s, dest_y, dest_cb, dest_cr, 1,
2278 s->next_pic.f->data,2278 s->next_pic.data,
2279 op_pix, op_qpix);2279 op_pix, op_qpix);
2280 }2280 }
2281 2281
libavcodec/mpegvideo_motion.c+2−2
@@ -93,8 +93,8 @@ void mpeg_motion_internal(MpegEncContext *s, · 92 unmodified lines
93 ptrdiff_t uvlinesize, linesize;93 ptrdiff_t uvlinesize, linesize;
94 94
95 v_edge_pos = s->v_edge_pos >> field_based;95 v_edge_pos = s->v_edge_pos >> field_based;
96 linesize = s->cur_pic.f->linesize[0] << field_based;96 linesize = s->cur_pic.linesize[0] << field_based;
97 uvlinesize = s->cur_pic.f->linesize[1] << field_based;97 uvlinesize = s->cur_pic.linesize[1] << field_based;
98 block_y_half = (field_based | is_16x8);98 block_y_half = (field_based | is_16x8);
99 99
100 dxy = ((motion_y & 1) << 1) | (motion_x & 1);100 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
82 {82 {
83 uint8_t *dest_y, *dest_cb, *dest_cr;83 uint8_t *dest_y, *dest_cb, *dest_cr;
84 int dct_linesize, dct_offset;84 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 pics85 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.f->linesize[1];86 const int uvlinesize = s->cur_pic.linesize[1];
87 const int readable = IS_ENCODER || lowres_flag || s->pict_type != AV_PICTURE_TYPE_B;87 const int readable = IS_ENCODER || lowres_flag || s->pict_type != AV_PICTURE_TYPE_B;
88 const int block_size = lowres_flag ? 8 >> s->avctx->lowres : 8;88 const int block_size = lowres_flag ? 8 >> s->avctx->lowres : 8;
89 89
@@ -137,11 +137,11 @@ void mpv_reconstruct_mb_internal(MpegEncContext *s, int16_t block[12][64], · 47 unmodified lines
137 const h264_chroma_mc_func *op_pix = s->h264chroma.put_h264_chroma_pixels_tab;137 const h264_chroma_mc_func *op_pix = s->h264chroma.put_h264_chroma_pixels_tab;
138 138
139 if (s->mv_dir & MV_DIR_FORWARD) {139 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);
141 op_pix = s->h264chroma.avg_h264_chroma_pixels_tab;141 op_pix = s->h264chroma.avg_h264_chroma_pixels_tab;
142 }142 }
143 if (s->mv_dir & MV_DIR_BACKWARD) {143 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);
145 }145 }
146 } else {146 } else {
147 op_pixels_func (*op_pix)[4];147 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
155 op_qpix = s->qdsp.put_no_rnd_qpel_pixels_tab;155 op_qpix = s->qdsp.put_no_rnd_qpel_pixels_tab;
156 }156 }
157 if (s->mv_dir & MV_DIR_FORWARD) {157 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);
159 op_pix = s->hdsp.avg_pixels_tab;159 op_pix = s->hdsp.avg_pixels_tab;
160 op_qpix = s->qdsp.avg_qpel_pixels_tab;160 op_qpix = s->qdsp.avg_qpel_pixels_tab;
161 }161 }
162 if (s->mv_dir & MV_DIR_BACKWARD) {162 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);
164 }164 }
165 }165 }
166 166
libavcodec/msmpeg4.c+2−2
@@ -282,10 +282,10 @@ int ff_msmpeg4_pred_dc(MpegEncContext *s, int n, · 281 unmodified lines
282 int bs = 8 >> s->avctx->lowres;282 int bs = 8 >> s->avctx->lowres;
283 if(n<4){283 if(n<4){
284 wrap= s->linesize;284 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;
286 }else{286 }else{
287 wrap= s->uvlinesize;287 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;
289 }289 }
290 if(s->mb_x==0) a= (1024 + (scale>>1))/scale;290 if(s->mb_x==0) a= (1024 + (scale>>1))/scale;
291 else a= get_dc(dest-bs, wrap, scale*8>>(2*s->avctx->lowres), bs);291 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
382 MSS12Context *c = &ctx->c;382 MSS12Context *c = &ctx->c;
383 VC1Context *v = avctx->priv_data;383 VC1Context *v = avctx->priv_data;
384 MpegEncContext *s = &v->s;384 MpegEncContext *s = &v->s;
385 AVFrame *f;385 Picture *f;
386 int ret;386 int ret;
387 387
388 ff_mpeg_flush(avctx);388 ff_mpeg_flush(avctx);
@@ -431,7 +431,7 @@ static int decode_wmv9(AVCodecContext *avctx, const uint8_t *buf, int buf_size, · 42 unmodified lines
431 431
432 ff_mpv_frame_end(s);432 ff_mpv_frame_end(s);
433 433
434 f = s->cur_pic.f;434 f = &s->cur_pic;
435 435
436 if (v->respic == 3) {436 if (v->respic == 3) {
437 ctx->dsp.upsample_plane(f->data[0], f->linesize[0], w, h);437 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
328 s->m.avctx = s->avctx;328 s->m.avctx = s->avctx;
329 s->m.cur_pic_ptr = &s->m.cur_pic;329 s->m.cur_pic_ptr = &s->m.cur_pic;
330 s->m.last_pic_ptr = &s->m.last_pic;330 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;
332 s->m.linesize =332 s->m.linesize =
333 s->m.last_pic.f->linesize[0] =333 s->m.last_pic.linesize[0] =
334 s->m.new_pic->linesize[0] =334 s->m.new_pic->linesize[0] =
335 s->m.cur_pic.f->linesize[0] = stride;335 s->m.cur_pic.linesize[0] = stride;
336 s->m.width = width;336 s->m.width = width;
337 s->m.height = height;337 s->m.height = height;
338 s->m.mb_width = block_width;338 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
2943{2943{
2944 MpegEncContext *s = &v->s;2944 MpegEncContext *s = &v->s;
2945 2945
2946 if (!v->s.last_pic.f->data[0])2946 if (!v->s.last_pic.data[0])
2947 return;2947 return;
2948 2948
2949 ff_er_add_slice(&s->er, 0, s->start_mb_y, s->mb_width - 1, s->end_mb_y - 1, ER_MB_END);2949 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
2952 s->mb_x = 0;2952 s->mb_x = 0;
2953 init_block_index(v);2953 init_block_index(v);
2954 update_block_index(s);2954 update_block_index(s);
2955 memcpy(s->dest[0], s->last_pic.f->data[0] + s->mb_y * 16 * s->linesize, s->linesize * 16);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.f->data[1] + s->mb_y * 8 * s->uvlinesize, s->uvlinesize * 8);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.f->data[2] + 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);
2958 s->first_slice_line = 0;2958 s->first_slice_line = 0;
2959 }2959 }
2960}2960}
libavcodec/vc1_mc.c+30−30
@@ -184,7 +184,7 @@ void ff_vc1_mc_1mv(VC1Context *v, int dir) · 183 unmodified lines
184 184
185 if ((!v->field_mode ||185 if ((!v->field_mode ||
186 (v->ref_field_type[dir] == 1 && v->cur_field_type == 1)) &&186 (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])
188 return;188 return;
189 189
190 linesize = s->cur_pic_ptr->f->linesize[0];190 linesize = s->cur_pic_ptr->f->linesize[0];
@@ -219,26 +219,26 @@ void ff_vc1_mc_1mv(VC1Context *v, int dir) · 28 unmodified lines
219 }219 }
220 if (!dir) {220 if (!dir) {
221 if (v->field_mode && (v->cur_field_type != v->ref_field_type[dir]) && v->second_field) {221 if (v->field_mode && (v->cur_field_type != v->ref_field_type[dir]) && v->second_field) {
222 srcY = s->cur_pic.f->data[0];222 srcY = s->cur_pic.data[0];
223 srcU = s->cur_pic.f->data[1];223 srcU = s->cur_pic.data[1];
224 srcV = s->cur_pic.f->data[2];224 srcV = s->cur_pic.data[2];
225 luty = v->curr_luty;225 luty = v->curr_luty;
226 lutuv = v->curr_lutuv;226 lutuv = v->curr_lutuv;
227 use_ic = *v->curr_use_ic;227 use_ic = *v->curr_use_ic;
228 interlace = 1;228 interlace = 1;
229 } else {229 } else {
230 srcY = s->last_pic.f->data[0];230 srcY = s->last_pic.data[0];
231 srcU = s->last_pic.f->data[1];231 srcU = s->last_pic.data[1];
232 srcV = s->last_pic.f->data[2];232 srcV = s->last_pic.data[2];
233 luty = v->last_luty;233 luty = v->last_luty;
234 lutuv = v->last_lutuv;234 lutuv = v->last_lutuv;
235 use_ic = v->last_use_ic;235 use_ic = v->last_use_ic;
236 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);236 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
237 }237 }
238 } else {238 } else {
239 srcY = s->next_pic.f->data[0];239 srcY = s->next_pic.data[0];
240 srcU = s->next_pic.f->data[1];240 srcU = s->next_pic.data[1];
241 srcV = s->next_pic.f->data[2];241 srcV = s->next_pic.data[2];
242 luty = v->next_luty;242 luty = v->next_luty;
243 lutuv = v->next_lutuv;243 lutuv = v->next_lutuv;
244 use_ic = v->next_use_ic;244 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
464 464
465 if ((!v->field_mode ||465 if ((!v->field_mode ||
466 (v->ref_field_type[dir] == 1 && v->cur_field_type == 1)) &&466 (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])
468 return;468 return;
469 469
470 linesize = s->cur_pic_ptr->f->linesize[0];470 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
474 474
475 if (!dir) {475 if (!dir) {
476 if (v->field_mode && (v->cur_field_type != v->ref_field_type[dir]) && v->second_field) {476 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];
478 luty = v->curr_luty;478 luty = v->curr_luty;
479 use_ic = *v->curr_use_ic;479 use_ic = *v->curr_use_ic;
480 interlace = 1;480 interlace = 1;
481 } else {481 } else {
482 srcY = s->last_pic.f->data[0];482 srcY = s->last_pic.data[0];
483 luty = v->last_luty;483 luty = v->last_luty;
484 use_ic = v->last_use_ic;484 use_ic = v->last_use_ic;
485 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);485 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
486 }486 }
487 } else {487 } else {
488 srcY = s->next_pic.f->data[0];488 srcY = s->next_pic.data[0];
489 luty = v->next_luty;489 luty = v->next_luty;
490 use_ic = v->next_use_ic;490 use_ic = v->next_use_ic;
491 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);491 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
645 int interlace;645 int interlace;
646 int uvlinesize;646 int uvlinesize;
647 647
648 if (!v->field_mode && !v->s.last_pic.f->data[0])648 if (!v->field_mode && !v->s.last_pic.data[0])
649 return;649 return;
650 if (CONFIG_GRAY && s->avctx->flags & AV_CODEC_FLAG_GRAY)650 if (CONFIG_GRAY && s->avctx->flags & AV_CODEC_FLAG_GRAY)
651 return;651 return;
@@ -664,7 +664,7 @@ void ff_vc1_mc_4mv_chroma(VC1Context *v, int dir) · 12 unmodified lines
664 int opp_count = get_luma_mv(v, dir, &tx, &ty);664 int opp_count = get_luma_mv(v, dir, &tx, &ty);
665 chroma_ref_type = v->cur_field_type ^ (opp_count > 2);665 chroma_ref_type = v->cur_field_type ^ (opp_count > 2);
666 }666 }
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])
668 return;668 return;
669 s->cur_pic.motion_val[1][s->block_index[0] + v->blocks_off][0] = tx;669 s->cur_pic.motion_val[1][s->block_index[0] + v->blocks_off][0] = tx;
670 s->cur_pic.motion_val[1][s->block_index[0] + v->blocks_off][1] = ty;670 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
698 698
699 if (!dir) {699 if (!dir) {
700 if (v->field_mode && (v->cur_field_type != chroma_ref_type) && v->second_field) {700 if (v->field_mode && (v->cur_field_type != chroma_ref_type) && v->second_field) {
701 srcU = s->cur_pic.f->data[1];701 srcU = s->cur_pic.data[1];
702 srcV = s->cur_pic.f->data[2];702 srcV = s->cur_pic.data[2];
703 lutuv = v->curr_lutuv;703 lutuv = v->curr_lutuv;
704 use_ic = *v->curr_use_ic;704 use_ic = *v->curr_use_ic;
705 interlace = 1;705 interlace = 1;
706 } else {706 } else {
707 srcU = s->last_pic.f->data[1];707 srcU = s->last_pic.data[1];
708 srcV = s->last_pic.f->data[2];708 srcV = s->last_pic.data[2];
709 lutuv = v->last_lutuv;709 lutuv = v->last_lutuv;
710 use_ic = v->last_use_ic;710 use_ic = v->last_use_ic;
711 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);711 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
712 }712 }
713 } else {713 } else {
714 srcU = s->next_pic.f->data[1];714 srcU = s->next_pic.data[1];
715 srcV = s->next_pic.f->data[2];715 srcV = s->next_pic.data[2];
716 lutuv = v->next_lutuv;716 lutuv = v->next_lutuv;
717 use_ic = v->next_use_ic;717 use_ic = v->next_use_ic;
718 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);718 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
880 else880 else
881 uvsrc_y = av_clip(uvsrc_y, -8, s->avctx->coded_height >> 1);881 uvsrc_y = av_clip(uvsrc_y, -8, s->avctx->coded_height >> 1);
882 if (i < 2 ? dir : dir2) {882 if (i < 2 ? dir : dir2) {
883 srcU = s->next_pic.f->data[1];883 srcU = s->next_pic.data[1];
884 srcV = s->next_pic.f->data[2];884 srcV = s->next_pic.data[2];
885 lutuv = v->next_lutuv;885 lutuv = v->next_lutuv;
886 use_ic = v->next_use_ic;886 use_ic = v->next_use_ic;
887 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);887 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
888 } else {888 } else {
889 srcU = s->last_pic.f->data[1];889 srcU = s->last_pic.data[1];
890 srcV = s->last_pic.f->data[2];890 srcV = s->last_pic.data[2];
891 lutuv = v->last_lutuv;891 lutuv = v->last_lutuv;
892 use_ic = v->last_use_ic;892 use_ic = v->last_use_ic;
893 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);893 interlace = !!(s->last_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
@@ -1012,7 +1012,7 @@ void ff_vc1_interp_mc(VC1Context *v) · 118 unmodified lines
1012 int interlace;1012 int interlace;
1013 int linesize, uvlinesize;1013 int linesize, uvlinesize;
1014 1014
1015 if (!v->field_mode && !v->s.next_pic.f->data[0])1015 if (!v->field_mode && !v->s.next_pic.data[0])
1016 return;1016 return;
1017 1017
1018 linesize = s->cur_pic_ptr->f->linesize[0];1018 linesize = s->cur_pic_ptr->f->linesize[0];
@@ -1030,9 +1030,9 @@ void ff_vc1_interp_mc(VC1Context *v) · 11 unmodified lines
1030 uvmx = uvmx + ((uvmx < 0) ? -(uvmx & 1) : (uvmx & 1));1030 uvmx = uvmx + ((uvmx < 0) ? -(uvmx & 1) : (uvmx & 1));
1031 uvmy = uvmy + ((uvmy < 0) ? -(uvmy & 1) : (uvmy & 1));1031 uvmy = uvmy + ((uvmy < 0) ? -(uvmy & 1) : (uvmy & 1));
1032 }1032 }
1033 srcY = s->next_pic.f->data[0];1033 srcY = s->next_pic.data[0];
1034 srcU = s->next_pic.f->data[1];1034 srcU = s->next_pic.data[1];
1035 srcV = s->next_pic.f->data[2];1035 srcV = s->next_pic.data[2];
1036 1036
1037 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);1037 interlace = !!(s->next_pic.f->flags & AV_FRAME_FLAG_INTERLACED);
1038 1038
libavcodec/vc1dec.c+14−14
@@ -235,15 +235,15 @@ static void vc1_draw_sprites(VC1Context *v, SpriteData* sd) · 234 unmodified lines
235 v->sprite_output_frame->linesize[plane] * row;235 v->sprite_output_frame->linesize[plane] * row;
236 236
237 for (sprite = 0; sprite <= v->two_sprites; sprite++) {237 for (sprite = 0; sprite <= v->two_sprites; sprite++) {
238 uint8_t *iplane = s->cur_pic.f->data[plane];238 uint8_t *iplane = s->cur_pic.data[plane];
239 int iline = s->cur_pic.f->linesize[plane];239 int iline = s->cur_pic.linesize[plane];
240 int ycoord = yoff[sprite] + yadv[sprite] * row;240 int ycoord = yoff[sprite] + yadv[sprite] * row;
241 int yline = ycoord >> 16;241 int yline = ycoord >> 16;
242 int next_line;242 int next_line;
243 ysub[sprite] = ycoord & 0xFFFF;243 ysub[sprite] = ycoord & 0xFFFF;
244 if (sprite) {244 if (sprite) {
245 iplane = s->last_pic.f->data[plane];245 iplane = s->last_pic.data[plane];
246 iline = s->last_pic.f->linesize[plane];246 iline = s->last_pic.linesize[plane];
247 }247 }
248 next_line = FFMIN(yline + 1, (v->sprite_height >> !!plane) - 1) * iline;248 next_line = FFMIN(yline + 1, (v->sprite_height >> !!plane) - 1) * iline;
249 if (!(xoff[sprite] & 0xFFFF) && xadv[sprite] == 1 << 16) {249 if (!(xoff[sprite] & 0xFFFF) && xadv[sprite] == 1 << 16) {
@@ -317,12 +317,12 @@ static int vc1_decode_sprites(VC1Context *v, GetBitContext* gb) · 67 unmodified lines
317 if (ret < 0)317 if (ret < 0)
318 return ret;318 return ret;
319 319
320 if (!s->cur_pic.f || !s->cur_pic.f->data[0]) {320 if (!s->cur_pic.data[0]) {
321 av_log(avctx, AV_LOG_ERROR, "Got no sprites\n");321 av_log(avctx, AV_LOG_ERROR, "Got no sprites\n");
322 return AVERROR_UNKNOWN;322 return AVERROR_UNKNOWN;
323 }323 }
324 324
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])) {
326 av_log(avctx, AV_LOG_WARNING, "Need two sprites, only got one\n");326 av_log(avctx, AV_LOG_WARNING, "Need two sprites, only got one\n");
327 v->two_sprites = 0;327 v->two_sprites = 0;
328 }328 }
@@ -340,14 +340,14 @@ static void vc1_sprite_flush(AVCodecContext *avctx) · 11 unmodified lines
340{340{
341 VC1Context *v = avctx->priv_data;341 VC1Context *v = avctx->priv_data;
342 MpegEncContext *s = &v->s;342 MpegEncContext *s = &v->s;
343 AVFrame *f = s->cur_pic.f;343 Picture *f = &s->cur_pic;
344 int plane, i;344 int plane, i;
345 345
346 /* Windows Media Image codecs have a convergence interval of two keyframes.346 /* Windows Media Image codecs have a convergence interval of two keyframes.
347 Since we can't enforce it, clear to black the missing sprite. This is347 Since we can't enforce it, clear to black the missing sprite. This is
348 wrong but it looks better than doing nothing. */348 wrong but it looks better than doing nothing. */
349 349
350 if (f && f->data[0])350 if (f->data[0])
351 for (plane = 0; plane < (CONFIG_GRAY && s->avctx->flags & AV_CODEC_FLAG_GRAY ? 1 : 3); plane++)351 for (plane = 0; plane < (CONFIG_GRAY && s->avctx->flags & AV_CODEC_FLAG_GRAY ? 1 : 3); plane++)
352 for (i = 0; i < v->sprite_height>>!!plane; i++)352 for (i = 0; i < v->sprite_height>>!!plane; i++)
353 memset(f->data[plane] + i * f->linesize[plane],353 memset(f->data[plane] + i * f->linesize[plane],
@@ -1230,9 +1230,9 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, · 876 unmodified lines
1230 1230
1231 v->end_mb_x = s->mb_width;1231 v->end_mb_x = s->mb_width;
1232 if (v->field_mode) {1232 if (v->field_mode) {
1233 s->cur_pic.f->linesize[0] <<= 1;1233 s->cur_pic.linesize[0] <<= 1;
1234 s->cur_pic.f->linesize[1] <<= 1;1234 s->cur_pic.linesize[1] <<= 1;
1235 s->cur_pic.f->linesize[2] <<= 1;1235 s->cur_pic.linesize[2] <<= 1;
1236 s->linesize <<= 1;1236 s->linesize <<= 1;
1237 s->uvlinesize <<= 1;1237 s->uvlinesize <<= 1;
1238 }1238 }
@@ -1307,9 +1307,9 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, · 68 unmodified lines
1307 }1307 }
1308 if (v->field_mode) {1308 if (v->field_mode) {
1309 v->second_field = 0;1309 v->second_field = 0;
1310 s->cur_pic.f->linesize[0] >>= 1;1310 s->cur_pic.linesize[0] >>= 1;
1311 s->cur_pic.f->linesize[1] >>= 1;1311 s->cur_pic.linesize[1] >>= 1;
1312 s->cur_pic.f->linesize[2] >>= 1;1312 s->cur_pic.linesize[2] >>= 1;
1313 s->linesize >>= 1;1313 s->linesize >>= 1;
1314 s->uvlinesize >>= 1;1314 s->uvlinesize >>= 1;
1315 if (v->s.pict_type != AV_PICTURE_TYPE_BI && v->s.pict_type != AV_PICTURE_TYPE_B) {1315 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