summaryrefslogtreecommitdiff
path: root/cmdutils.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2013-03-12 13:40:42 +0100
committerMichael Niedermayer <michaelni@gmx.at>2013-03-12 14:16:02 +0100
commit32fdfdfbdac64c57b12910521af1379a24d01f73 (patch)
tree865ec201a41ac45d0ce0c58b3d7ea9a438d20d08 /cmdutils.c
parent3c1326411d6ffd2f30c0d6e8cc32d34b5ed5a518 (diff)
parent354468fc12dcf93e7fb4af552e18906771913273 (diff)
Merge commit '354468fc12dcf93e7fb4af552e18906771913273'
* commit '354468fc12dcf93e7fb4af552e18906771913273': avplay: switch to new refcounted frames API avconv: convert to new refcounted AVFrame API Conflicts: cmdutils.c ffmpeg.c ffmpeg.h ffplay.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'cmdutils.c')
-rw-r--r--cmdutils.c141
1 files changed, 0 insertions, 141 deletions
diff --git a/cmdutils.c b/cmdutils.c
index 3a094f0b6a..9bbb837148 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -1826,144 +1826,3 @@ void *grow_array(void *array, int elem_size, int *size, int new_size)
}
return array;
}
-
-static int alloc_buffer(FrameBuffer **pool, AVCodecContext *s, FrameBuffer **pbuf)
-{
- const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(s->pix_fmt);
- FrameBuffer *buf;
- int i, ret;
- int pixel_size;
- int h_chroma_shift, v_chroma_shift;
- int edge = 32; // XXX should be avcodec_get_edge_width(), but that fails on svq1
- int w = s->width, h = s->height;
-
- if (!desc)
- return AVERROR(EINVAL);
- pixel_size = desc->comp[0].step_minus1 + 1;
-
- buf = av_mallocz(sizeof(*buf));
- if (!buf)
- return AVERROR(ENOMEM);
-
- avcodec_align_dimensions(s, &w, &h);
-
- if (!(s->flags & CODEC_FLAG_EMU_EDGE)) {
- w += 2*edge;
- h += 2*edge;
- }
-
- if ((ret = av_image_alloc(buf->base, buf->linesize, w, h,
- s->pix_fmt, 32)) < 0) {
- av_freep(&buf);
- av_log(s, AV_LOG_ERROR, "alloc_buffer: av_image_alloc() failed\n");
- return ret;
- }
-
- avcodec_get_chroma_sub_sample(s->pix_fmt, &h_chroma_shift, &v_chroma_shift);
- for (i = 0; i < FF_ARRAY_ELEMS(buf->data); i++) {
- const int h_shift = i==0 ? 0 : h_chroma_shift;
- const int v_shift = i==0 ? 0 : v_chroma_shift;
- if ((s->flags & CODEC_FLAG_EMU_EDGE) || !buf->linesize[i] || !buf->base[i])
- buf->data[i] = buf->base[i];
- else
- buf->data[i] = buf->base[i] +
- FFALIGN((buf->linesize[i]*edge >> v_shift) +
- (pixel_size*edge >> h_shift), 32);
- }
- buf->w = s->width;
- buf->h = s->height;
- buf->pix_fmt = s->pix_fmt;
- buf->pool = pool;
-
- *pbuf = buf;
- return 0;
-}
-
-int codec_get_buffer(AVCodecContext *s, AVFrame *frame)
-{
- FrameBuffer **pool = s->opaque;
- FrameBuffer *buf;
- int ret, i;
-
- if(av_image_check_size(s->width, s->height, 0, s) || s->pix_fmt<0) {
- av_log(s, AV_LOG_ERROR, "codec_get_buffer: image parameters invalid\n");
- return -1;
- }
-
- if (!*pool && (ret = alloc_buffer(pool, s, pool)) < 0)
- return ret;
-
- buf = *pool;
- *pool = buf->next;
- buf->next = NULL;
- if (buf->w != s->width || buf->h != s->height || buf->pix_fmt != s->pix_fmt) {
- av_freep(&buf->base[0]);
- av_free(buf);
- if ((ret = alloc_buffer(pool, s, &buf)) < 0)
- return ret;
- }
- av_assert0(!buf->refcount);
- buf->refcount++;
-
- frame->opaque = buf;
- frame->type = FF_BUFFER_TYPE_USER;
- frame->extended_data = frame->data;
-
- for (i = 0; i < FF_ARRAY_ELEMS(buf->data); i++) {
- frame->base[i] = buf->base[i]; // XXX h264.c uses base though it shouldn't
- frame->data[i] = buf->data[i];
- frame->linesize[i] = buf->linesize[i];
- }
-
- return 0;
-}
-
-static void unref_buffer(FrameBuffer *buf)
-{
- FrameBuffer **pool = buf->pool;
-
- av_assert0(buf->refcount > 0);
- buf->refcount--;
- if (!buf->refcount) {
- FrameBuffer *tmp;
- for(tmp= *pool; tmp; tmp= tmp->next)
- av_assert1(tmp != buf);
-
- buf->next = *pool;
- *pool = buf;
- }
-}
-
-void codec_release_buffer(AVCodecContext *s, AVFrame *frame)
-{
- FrameBuffer *buf = frame->opaque;
- int i;
-
- if(frame->type!=FF_BUFFER_TYPE_USER) {
- avcodec_default_release_buffer(s, frame);
- return;
- }
-
- for (i = 0; i < FF_ARRAY_ELEMS(frame->data); i++)
- frame->data[i] = NULL;
-
- unref_buffer(buf);
-}
-
-void filter_release_buffer(AVFilterBuffer *fb)
-{
- FrameBuffer *buf = fb->priv;
- av_free(fb);
- unref_buffer(buf);
-}
-
-void free_buffer_pool(FrameBuffer **pool)
-{
- FrameBuffer *buf = *pool;
- while (buf) {
- *pool = buf->next;
- av_freep(&buf->base[0]);
- av_free(buf);
- buf = *pool;
- }
-}