MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / alloc_frame

Function alloc_frame

libavcodec/hevc/refs.c:110–210  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

108}
109
110static HEVCFrame *alloc_frame(HEVCContext *s, HEVCLayerContext *l)
111{
112 const HEVCVPS *vps = l->sps->vps;
113 const int view_id = vps->view_id[s->cur_layer];
114 int i, j, ret;
115 for (i = 0; i < FF_ARRAY_ELEMS(l->DPB); i++) {
116 HEVCFrame *frame = &l->DPB[i];
117 if (frame->f)
118 continue;
119
120 ret = ff_progress_frame_alloc(s->avctx, &frame->tf);
121 if (ret < 0)
122 return NULL;
123
124 // Add LCEVC SEI metadata here, as it's needed in get_buffer()
125 if (s->sei.common.lcevc.info) {
126 HEVCSEILCEVC *lcevc = &s->sei.common.lcevc;
127 ret = ff_frame_new_side_data_from_buf(s->avctx, frame->tf.f,
128 AV_FRAME_DATA_LCEVC, &lcevc->info);
129 if (ret < 0)
130 goto fail;
131 }
132
133 // add view ID side data if it's nontrivial
134 if (!ff_hevc_is_alpha_video(s) && (vps->nb_layers > 1 || view_id)) {
135 HEVCSEITDRDI *tdrdi = &s->sei.tdrdi;
136 AVFrameSideData *sd = av_frame_side_data_new(&frame->f->side_data,
137 &frame->f->nb_side_data,
138 AV_FRAME_DATA_VIEW_ID,
139 sizeof(int), 0);
140 if (!sd)
141 goto fail;
142 *(int*)sd->data = view_id;
143
144 if (tdrdi->num_ref_displays) {
145 AVStereo3D *stereo_3d;
146
147 stereo_3d = av_stereo3d_create_side_data(frame->f);
148 if (!stereo_3d)
149 goto fail;
150
151 stereo_3d->type = AV_STEREO3D_FRAMESEQUENCE;
152 if (tdrdi->left_view_id[0] == view_id)
153 stereo_3d->view = AV_STEREO3D_VIEW_LEFT;
154 else if (tdrdi->right_view_id[0] == view_id)
155 stereo_3d->view = AV_STEREO3D_VIEW_RIGHT;
156 else
157 stereo_3d->view = AV_STEREO3D_VIEW_UNSPEC;
158 }
159 }
160
161 ret = ff_thread_get_buffer(s->avctx, frame->f, AV_GET_BUFFER_FLAG_REF);
162 if (ret < 0)
163 goto fail;
164
165 size_t rpl_bytes;
166 if (av_size_mult(s->pkt.nb_nals, sizeof(*frame->rpl), &rpl_bytes) < 0)
167 goto fail;

Callers 2

ff_hevc_set_new_refFunction · 0.70
generate_missing_refFunction · 0.70

Calls 14

ff_progress_frame_allocFunction · 0.85
ff_hevc_is_alpha_videoFunction · 0.85
av_frame_side_data_newFunction · 0.85
av_size_multFunction · 0.85
av_refstruct_alloczFunction · 0.85
av_refstruct_pool_getFunction · 0.85
av_refstruct_ref_cFunction · 0.85
replace_alpha_planeFunction · 0.85
ff_hevc_unref_frameFunction · 0.85

Tested by

no test coverage detected