FFmpeg
qp_table.c
Go to the documentation of this file.
1 /*
2  * This file is part of FFmpeg.
3  *
4  * FFmpeg is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * FFmpeg is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License along
15  * with FFmpeg; if not, write to the Free Software Foundation, Inc.,
16  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
17  */
18 
19 #include <stdint.h>
20 
21 #include "libavutil/frame.h"
22 #include "libavutil/mem.h"
24 
25 #include "qp_table.h"
26 
27 int ff_qp_table_extract(AVFrame *frame, int8_t **table, int *table_w, int *table_h,
28  enum AVVideoEncParamsType *qscale_type)
29 {
30  AVFrameSideData *sd;
31  AVVideoEncParams *par;
32  unsigned int mb_h = (frame->height + 15) / 16;
33  unsigned int mb_w = (frame->width + 15) / 16;
34  unsigned int nb_mb = mb_h * mb_w;
35  unsigned int block_idx;
36 
37  *table = NULL;
38 
40  if (!sd)
41  return 0;
42  par = (AVVideoEncParams*)sd->data;
44  (par->nb_blocks != 0 && par->nb_blocks != nb_mb))
45  return AVERROR(ENOSYS);
46 
47  *table = av_malloc(nb_mb);
48  if (!*table)
49  return AVERROR(ENOMEM);
50  if (table_w)
51  *table_w = mb_w;
52  if (table_h)
53  *table_h = mb_h;
54  if (qscale_type)
55  *qscale_type = par->type;
56 
57  if (par->nb_blocks == 0) {
58  memset(*table, par->qp, nb_mb);
59  return 0;
60  }
61 
62  for (block_idx = 0; block_idx < nb_mb; block_idx++) {
64  (*table)[block_idx] = par->qp + b->delta_qp;
65  }
66 
67  return 0;
68 }
69 
AVVideoEncParams::qp
int32_t qp
Base quantisation parameter for the frame.
Definition: video_enc_params.h:103
qp_table.h
AVERROR
Filter the word “frame” indicates either a video frame or a group of audio as stored in an AVFrame structure Format for each input and each output the list of supported formats For video that means pixel format For audio that means channel sample they are references to shared objects When the negotiation mechanism computes the intersection of the formats supported at each end of a all references to both lists are replaced with a reference to the intersection And when a single format is eventually chosen for a link amongst the remaining all references to the list are updated That means that if a filter requires that its input and output have the same format amongst a supported all it has to do is use a reference to the same list of formats query_formats can leave some formats unset and return AVERROR(EAGAIN) to cause the negotiation mechanism toagain later. That can be used by filters with complex requirements to use the format negotiated on one link to set the formats supported on another. Frame references ownership and permissions
av_frame_get_side_data
AVFrameSideData * av_frame_get_side_data(const AVFrame *frame, enum AVFrameSideDataType type)
Definition: frame.c:838
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:344
AVFrame::width
int width
Definition: frame.h:416
b
#define b
Definition: input.c:41
table
static const uint16_t table[]
Definition: prosumer.c:205
av_malloc
#define av_malloc(s)
Definition: tableprint_vlc.h:30
AV_VIDEO_ENC_PARAMS_MPEG2
@ AV_VIDEO_ENC_PARAMS_MPEG2
Definition: video_enc_params.h:65
AVVideoEncParams
Video encoding parameters for a given frame.
Definition: video_enc_params.h:73
AVVideoEncParamsType
AVVideoEncParamsType
Definition: video_enc_params.h:28
AVVideoEncParams::type
enum AVVideoEncParamsType type
Type of the parameters (the codec they are used with).
Definition: video_enc_params.h:95
frame
static AVFrame * frame
Definition: demux_decode.c:54
if
if(ret)
Definition: filter_design.txt:179
NULL
#define NULL
Definition: coverity.c:32
AVFrameSideData::data
uint8_t * data
Definition: frame.h:252
AVVideoEncParams::nb_blocks
unsigned int nb_blocks
Number of blocks in the array.
Definition: video_enc_params.h:81
frame.h
AVVideoBlockParams
Data structure for storing block-level encoding information.
Definition: video_enc_params.h:120
ff_qp_table_extract
int ff_qp_table_extract(AVFrame *frame, int8_t **table, int *table_w, int *table_h, enum AVVideoEncParamsType *qscale_type)
Extract a libpostproc-compatible QP table - an 8-bit QP value per 16x16 macroblock,...
Definition: qp_table.c:27
AVFrame::height
int height
Definition: frame.h:416
AV_FRAME_DATA_VIDEO_ENC_PARAMS
@ AV_FRAME_DATA_VIDEO_ENC_PARAMS
Encoding parameters for a video frame, as described by AVVideoEncParams.
Definition: frame.h:170
mem.h
AVFrameSideData
Structure to hold side data for an AVFrame.
Definition: frame.h:250
av_video_enc_params_block
static av_always_inline AVVideoBlockParams * av_video_enc_params_block(AVVideoEncParams *par, unsigned int idx)
Get the block at the specified.
Definition: video_enc_params.h:143
video_enc_params.h