Lines Matching refs:pic

35 static void av_noinline free_picture_tables(Picture *pic)
37 pic->alloc_mb_width =
38 pic->alloc_mb_height = 0;
40 av_buffer_unref(&pic->mb_var_buf);
41 av_buffer_unref(&pic->mc_mb_var_buf);
42 av_buffer_unref(&pic->mb_mean_buf);
43 av_buffer_unref(&pic->mbskip_table_buf);
44 av_buffer_unref(&pic->qscale_table_buf);
45 av_buffer_unref(&pic->mb_type_buf);
48 av_buffer_unref(&pic->motion_val_buf[i]);
49 av_buffer_unref(&pic->ref_index_buf[i]);
53 static int make_tables_writable(Picture *pic)
58 if (pic->table &&\
59 (ret = av_buffer_make_writable(&pic->table)) < 0)\
118 static int alloc_frame_buffer(AVCodecContext *avctx, Picture *pic,
126 pic->tf.f = pic->f;
129 pic->f->width = avctx->width + 2 * EDGE_WIDTH;
130 pic->f->height = avctx->height + 2 * EDGE_WIDTH;
132 r = ff_encode_alloc_frame(avctx, pic->f);
136 r = ff_thread_get_ext_buffer(avctx, &pic->tf,
137 pic->reference ? AV_GET_BUFFER_FLAG_REF : 0);
139 pic->f->width = avctx->width;
140 pic->f->height = avctx->height;
141 pic->f->format = avctx->pix_fmt;
142 r = avcodec_default_get_buffer2(avctx, pic->f, 0);
145 if (r < 0 || !pic->f->buf[0]) {
147 r, pic->f->data[0]);
153 for (i = 0; pic->f->data[i]; i++) {
155 pic->f->linesize[i] +
157 pic->f->data[i] += offset;
159 pic->f->width = avctx->width;
160 pic->f->height = avctx->height;
164 assert(!pic->hwaccel_picture_private);
166 pic->hwaccel_priv_buf = av_buffer_allocz(avctx->hwaccel->frame_priv_data_size);
167 if (!pic->hwaccel_priv_buf) {
171 pic->hwaccel_picture_private = pic->hwaccel_priv_buf->data;
175 if ((linesize && linesize != pic->f->linesize[0]) ||
176 (uvlinesize && uvlinesize != pic->f->linesize[1])) {
179 linesize, pic->f->linesize[0],
180 uvlinesize, pic->f->linesize[1]);
181 ff_mpeg_unref_picture(avctx, pic);
185 if (av_pix_fmt_count_planes(pic->f->format) > 2 &&
186 pic->f->linesize[1] != pic->f->linesize[2]) {
189 ff_mpeg_unref_picture(avctx, pic);
195 pic->f->linesize[0])) < 0) {
198 ff_mpeg_unref_picture(avctx, pic);
205 static int alloc_picture_tables(AVCodecContext *avctx, Picture *pic, int encoding, int out_format,
214 pic->mbskip_table_buf = av_buffer_allocz(mb_array_size + 2);
215 pic->qscale_table_buf = av_buffer_allocz(big_mb_num + mb_stride);
216 pic->mb_type_buf = av_buffer_allocz((big_mb_num + mb_stride) *
218 if (!pic->mbskip_table_buf || !pic->qscale_table_buf || !pic->mb_type_buf)
222 pic->mb_var_buf = av_buffer_allocz(mb_array_size * sizeof(int16_t));
223 pic->mc_mb_var_buf = av_buffer_allocz(mb_array_size * sizeof(int16_t));
224 pic->mb_mean_buf = av_buffer_allocz(mb_array_size);
225 if (!pic->mb_var_buf || !pic->mc_mb_var_buf || !pic->mb_mean_buf)
235 pic->motion_val_buf[i] = av_buffer_allocz(mv_size);
236 pic->ref_index_buf[i] = av_buffer_allocz(ref_index_size);
237 if (!pic->motion_val_buf[i] || !pic->ref_index_buf[i])
242 pic->alloc_mb_width = mb_width;
243 pic->alloc_mb_height = mb_height;
244 pic->alloc_mb_stride = mb_stride;
253 int ff_alloc_picture(AVCodecContext *avctx, Picture *pic, MotionEstContext *me,
261 if (pic->qscale_table_buf)
262 if ( pic->alloc_mb_width != mb_width
263 || pic->alloc_mb_height != mb_height)
264 free_picture_tables(pic);
267 av_assert0(pic->f->data[0]);
268 pic->shared = 1;
270 av_assert0(!pic->f->buf[0]);
271 if (alloc_frame_buffer(avctx, pic, me, sc,
276 *linesize = pic->f->linesize[0];
277 *uvlinesize = pic->f->linesize[1];
280 if (!pic->qscale_table_buf)
281 ret = alloc_picture_tables(avctx, pic, encoding, out_format,
284 ret = make_tables_writable(pic);
289 pic->mb_var = (uint16_t*)pic->mb_var_buf->data;
290 pic->mc_mb_var = (uint16_t*)pic->mc_mb_var_buf->data;
291 pic->mb_mean = pic->mb_mean_buf->data;
294 pic->mbskip_table = pic->mbskip_table_buf->data;
295 pic->qscale_table = pic->qscale_table_buf->data + 2 * mb_stride + 1;
296 pic->mb_type = (uint32_t*)pic->mb_type_buf->data + 2 * mb_stride + 1;
298 if (pic->motion_val_buf[0]) {
300 pic->motion_val[i] = (int16_t (*)[2])pic->motion_val_buf[i]->data + 4;
301 pic->ref_index[i] = pic->ref_index_buf[i]->data;
308 ff_mpeg_unref_picture(avctx, pic);
309 free_picture_tables(pic);
317 void ff_mpeg_unref_picture(AVCodecContext *avctx, Picture *pic)
319 int off = offsetof(Picture, mb_mean) + sizeof(pic->mb_mean);
321 pic->tf.f = pic->f;
327 ff_thread_release_ext_buffer(avctx, &pic->tf);
328 else if (pic->f)
329 av_frame_unref(pic->f);
331 av_buffer_unref(&pic->hwaccel_priv_buf);
333 if (pic->needs_realloc)
334 free_picture_tables(pic);
336 memset((uint8_t*)pic + off, 0, sizeof(*pic) - off);
420 static inline int pic_is_unused(Picture *pic)
422 if (!pic->f->buf[0])
424 if (pic->needs_realloc)
474 void av_cold ff_mpv_picture_free(AVCodecContext *avctx, Picture *pic)
476 free_picture_tables(pic);
477 ff_mpeg_unref_picture(avctx, pic);
478 av_frame_free(&pic->f);