diff options
author | Lynne <dev@lynne.ee> | 2020-11-12 12:44:30 +0100 |
---|---|---|
committer | Lynne <dev@lynne.ee> | 2020-11-25 23:06:33 +0100 |
commit | 4f9ee87253e021f43b1eaf40e57c2fb10af2be88 (patch) | |
tree | b12ab4e0962d81bc2ad539f8051f639c70d24e18 /libavutil/film_grain_params.c | |
parent | 5b1ccd748a7c5317172981151a36711772455368 (diff) | |
download | ffmpeg-4f9ee87253e021f43b1eaf40e57c2fb10af2be88.tar.gz |
libavutil: introduce AVFilmGrainParams side data
This patch introduces a new frame side data type AVFilmGrainParams for use
with video codecs which support it.
It can save a lot of memory used for duplicate processed reference frames and
reduce copies when applying film grain during presentation.
Diffstat (limited to 'libavutil/film_grain_params.c')
-rw-r--r-- | libavutil/film_grain_params.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/libavutil/film_grain_params.c b/libavutil/film_grain_params.c new file mode 100644 index 0000000000..930d23c7fe --- /dev/null +++ b/libavutil/film_grain_params.c @@ -0,0 +1,42 @@ +/** + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "film_grain_params.h" + +AVFilmGrainParams *av_film_grain_params_alloc(size_t *size) +{ + AVFilmGrainParams *params = av_mallocz(sizeof(AVFilmGrainParams)); + + if (size) + *size = sizeof(*params); + + return params; +} + +AVFilmGrainParams *av_film_grain_params_create_side_data(AVFrame *frame) +{ + AVFrameSideData *side_data = av_frame_new_side_data(frame, + AV_FRAME_DATA_FILM_GRAIN_PARAMS, + sizeof(AVFilmGrainParams)); + if (!side_data) + return NULL; + + memset(side_data->data, 0, sizeof(AVFilmGrainParams)); + + return (AVFilmGrainParams *)side_data->data; +} |