• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/minidlna/ffmpeg-2.3.4/libavfilter/

Lines Matching defs:link

40 static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame);
131 AVFilterLink *link;
145 link = av_mallocz(sizeof(*link));
146 if (!link)
149 src->outputs[srcpad] = dst->inputs[dstpad] = link;
151 link->src = src;
152 link->dst = dst;
153 link->srcpad = &src->output_pads[srcpad];
154 link->dstpad = &dst->input_pads[dstpad];
155 link->type = src->output_pads[srcpad].type;
157 link->format = -1;
162 void avfilter_link_free(AVFilterLink **link)
164 if (!*link)
167 av_frame_free(&(*link)->partial_buf);
169 av_freep(link);
172 int avfilter_link_get_channels(AVFilterLink *link)
174 return link->channels;
177 void avfilter_link_set_closed(AVFilterLink *link, int closed)
179 link->closed = closed;
182 int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
186 unsigned dstpad_idx = link->dstpad - link->dst->input_pads;
188 av_log(link->dst, AV_LOG_VERBOSE, "auto-inserting filter '%s' "
190 filt->name, link->src->name, link->dst->name);
192 link->dst->inputs[dstpad_idx] = NULL;
193 if ((ret = avfilter_link(filt, filt_dstpad_idx, link->dst, dstpad_idx)) < 0) {
194 /* failed to link output filter to new filter */
195 link->dst->inputs[dstpad_idx] = link;
199 /* re-hookup the link to the new destination filter we inserted */
200 link->dst = filt;
201 link->dstpad = &filt->input_pads[filt_srcpad_idx];
202 filt->inputs[filt_srcpad_idx] = link;
205 * link, we need to preserve that */
206 if (link->out_formats)
207 ff_formats_changeref(&link->out_formats,
209 if (link->out_samplerates)
210 ff_formats_changeref(&link->out_samplerates,
212 if (link->out_channel_layouts)
213 ff_channel_layouts_changeref(&link->out_channel_layouts,
226 AVFilterLink *link = filter->inputs[i];
229 if (!link) continue;
231 inlink = link->src->nb_inputs ? link->src->inputs[0] : NULL;
232 link->current_pts = AV_NOPTS_VALUE;
234 switch (link->init_state) {
241 link->init_state = AVLINK_STARTINIT;
243 if ((ret = avfilter_config_links(link->src)) < 0)
246 if (!(config_link = link->srcpad->config_props)) {
247 if (link->src->nb_inputs != 1) {
248 av_log(link->src, AV_LOG_ERROR, "Source filters and filters "
254 } else if ((ret = config_link(link)) < 0) {
255 av_log(link->src, AV_LOG_ERROR,
257 link->src->name);
261 switch (link->type) {
263 if (!link->time_base.num && !link->time_base.den)
264 link->time_base = inlink ? inlink->time_base : AV_TIME_BASE_Q;
266 if (!link->sample_aspect_ratio.num && !link->sample_aspect_ratio.den)
267 link->sample_aspect_ratio = inlink ?
270 if (inlink && !link->frame_rate.num && !link->frame_rate.den)
271 link->frame_rate = inlink->frame_rate;
274 if (!link->w)
275 link->w = inlink->w;
276 if (!link->h)
277 link->h = inlink->h;
278 } else if (!link->w || !link->h) {
279 av_log(link->src, AV_LOG_ERROR,
280 "Video source filters must set their output link's "
288 if (!link->time_base.num && !link->time_base.den)
289 link->time_base = inlink->time_base;
292 if (!link->time_base.num && !link->time_base.den)
293 link->time_base = (AVRational) {1, link->sample_rate};
296 if ((config_link = link->dstpad->config_props))
297 if ((ret = config_link(link)) < 0) {
298 av_log(link->dst, AV_LOG_ERROR,
300 link->dst->name);
304 link->init_state = AVLINK_INIT;
311 void ff_tlog_link(void *ctx, AVFilterLink *link, int end)
313 if (link->type == AVMEDIA_TYPE_VIDEO) {
315 "link[%p s:%dx%d fmt:%s %s->%s]%s",
316 link, link->w, link->h,
317 av_get_pix_fmt_name(link->format),
318 link->src ? link->src->filter->name : "",
319 link->dst ? link->dst->filter->name : "",
323 av_get_channel_layout_string(buf, sizeof(buf), -1, link->channel_layout);
326 "link[%p r:%d cl:%s fmt:%s %s->%s]%s",
327 link, (int)link->sample_rate, buf,
328 av_get_sample_fmt_name(link->format),
329 link->src ? link->src->filter->name : "",
330 link->dst ? link->dst->filter->name : "",
335 int ff_request_frame(AVFilterLink *link)
338 FF_TPRINTF_START(NULL, request_frame); ff_tlog_link(NULL, link, 1);
340 if (link->closed)
342 av_assert0(!link->frame_requested);
343 link->frame_requested = 1;
344 while (link->frame_requested) {
345 if (link->srcpad->request_frame)
346 ret = link->srcpad->request_frame(link);
347 else if (link->src->inputs[0])
348 ret = ff_request_frame(link->src->inputs[0]);
349 if (ret == AVERROR_EOF && link->partial_buf) {
350 AVFrame *pbuf = link->partial_buf;
351 link->partial_buf = NULL;
352 ret = ff_filter_frame_framed(link, pbuf);
355 link->frame_requested = 0;
357 link->closed = 1;
359 av_assert0(!link->frame_requested ||
360 link->flags & FF_LINK_FLAG_REQUEST_LOOP);
366 int ff_poll_frame(AVFilterLink *link)
370 if (link->srcpad->poll_frame)
371 return link->srcpad->poll_frame(link);
373 for (i = 0; i < link->src->nb_inputs; i++) {
375 if (!link->src->inputs[i])
377 val = ff_poll_frame(link->src->inputs[i]);
427 void ff_update_link_current_pts(AVFilterLink *link, int64_t pts)
431 link->current_pts = av_rescale_q(pts, link->time_base, AV_TIME_BASE_Q);
433 if (link->graph && link->age_index >= 0)
434 ff_avfilter_graph_update_heap(link->graph, link);
679 static void free_link(AVFilterLink *link)
681 if (!link)
684 if (link->src)
685 link->src->outputs[link->srcpad - link->src->output_pads] = NULL;
686 if (link->dst)
687 link->dst->inputs[link->dstpad - link->dst->input_pads] = NULL;
689 ff_formats_unref(&link->in_formats);
690 ff_formats_unref(&link->out_formats);
691 ff_formats_unref(&link->in_samplerates);
692 ff_formats_unref(&link->out_samplerates);
693 ff_channel_layouts_unref(&link->in_channel_layouts);
694 ff_channel_layouts_unref(&link->out_channel_layouts);
695 avfilter_link_free(&link);
992 static int default_filter_frame(AVFilterLink *link, AVFrame *frame)
994 return ff_filter_frame(link->dst->outputs[0], frame);
997 static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame)
1000 AVFilterContext *dstctx = link->dst;
1001 AVFilterPad *dst = link->dstpad;
1004 AVFilterCommand *cmd= link->dst->command_queue;
1007 if (link->closed) {
1017 av_log(link->dst, AV_LOG_DEBUG, "Copying data in avfilter.\n");
1020 switch (link->type) {
1022 out = ff_get_video_buffer(link, link->w, link->h);
1025 out = ff_get_audio_buffer(link, frame->nb_samples);
1040 switch (link->type) {
1060 while(cmd && cmd->time <= out->pts * av_q2d(link->time_base)){
1061 av_log(link->dst, AV_LOG_DEBUG,
1064 avfilter_process_command(link->dst, cmd->command, cmd->arg, 0, 0, cmd->flags);
1065 ff_command_queue_pop(link->dst);
1066 cmd= link->dst->command_queue;
1072 dstctx->var_values[VAR_N] = link->frame_count;
1073 dstctx->var_values[VAR_T] = pts == AV_NOPTS_VALUE ? NAN : pts * av_q2d(link->time_base);
1081 ret = filter_frame(link, out);
1082 link->frame_count++;
1083 link->frame_requested = 0;
1084 ff_update_link_current_pts(link, pts);
1093 static int ff_filter_frame_needs_framing(AVFilterLink *link, AVFrame *frame)
1096 AVFrame *pbuf = link->partial_buf;
1100 link->flags |= FF_LINK_FLAG_REQUEST_LOOP;
1104 AVRational samples_tb = { 1, link->sample_rate };
1105 pbuf = ff_get_audio_buffer(link, link->partial_buf_size);
1107 av_log(link->dst, AV_LOG_WARNING,
1114 pbuf->pts += av_rescale_q(inpos, samples_tb, link->time_base);
1118 link->partial_buf_size - pbuf->nb_samples);
1121 nb_samples, nb_channels, link->format);
1125 if (pbuf->nb_samples >= link->min_samples) {
1126 ret = ff_filter_frame_framed(link, pbuf);
1131 link->partial_buf = pbuf;
1135 int ff_filter_frame(AVFilterLink *link, AVFrame *frame)
1137 FF_TPRINTF_START(NULL, filter_frame); ff_tlog_link(NULL, link, 1); ff_tlog(NULL, " "); ff_tlog_ref(NULL, frame, 1);
1140 if (link->type == AVMEDIA_TYPE_VIDEO) {
1141 if (strcmp(link->dst->filter->name, "scale")) {
1142 av_assert1(frame->format == link->format);
1143 av_assert1(frame->width == link->w);
1144 av_assert1(frame->height == link->h);
1147 av_assert1(frame->format == link->format);
1148 av_assert1(av_frame_get_channels(frame) == link->channels);
1149 av_assert1(frame->channel_layout == link->channel_layout);
1150 av_assert1(frame->sample_rate == link->sample_rate);
1154 if (link->type == AVMEDIA_TYPE_AUDIO &&
1155 link->min_samples &&
1156 (link->partial_buf ||
1157 frame->nb_samples < link->min_samples ||
1158 frame->nb_samples > link->max_samples)) {
1159 return ff_filter_frame_needs_framing(link, frame);
1161 return ff_filter_frame_framed(link, frame);