FFmpeg
asvenc.c
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2003 Michael Niedermayer
3  *
4  * This file is part of FFmpeg.
5  *
6  * FFmpeg is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * FFmpeg is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with FFmpeg; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 /**
22  * @file
23  * ASUS V1/V2 encoder.
24  */
25 
26 #include "config_components.h"
27 
28 #include "libavutil/attributes.h"
29 #include "libavutil/mem.h"
30 #include "libavutil/mem_internal.h"
31 
32 #include "aandcttab.h"
33 #include "asv.h"
34 #include "avcodec.h"
35 #include "codec_internal.h"
36 #include "encode.h"
37 #include "fdctdsp.h"
38 #include "mpeg12data.h"
39 #include "pixblockdsp.h"
40 #include "put_bits.h"
41 
42 typedef struct ASVEncContext {
44 
46 
49  DECLARE_ALIGNED(32, int16_t, block)[6][64];
50  int q_intra_matrix[64];
52 
53 enum {
54  ASV1_MAX_BLOCK_SIZE = 8 + 10 * FFMAX(2 /* skip */, 5 /* ccp */ + 4 * 11 /* level */) + 5,
56  ASV2_MAX_BLOCK_SIZE = 4 + 8 + 16 * (6 /* ccp */ + 4 * 13 /* level */),
59 };
60 
61 static inline void asv1_put_level(PutBitContext *pb, int level)
62 {
63  unsigned int index = level + 3;
64 
65  if (index <= 6) {
67  } else {
68  put_bits(pb, 3, 0); /* Escape code */
69  put_sbits(pb, 8, level);
70  }
71 }
72 
73 static inline void asv2_put_level(ASVEncContext *a, PutBitContext *pb, int level)
74 {
75  unsigned int index = level + 31;
76 
77  if (index <= 62) {
79  } else {
80  put_bits_le(pb, 5, 0); /* Escape code */
81  if (level < -128 || level > 127) {
82  av_log(a->c.avctx, AV_LOG_WARNING, "Clipping level %d, increase qscale\n", level);
84  }
85  put_bits_le(pb, 8, level & 0xFF);
86  }
87 }
88 
89 static inline void asv1_encode_block(ASVEncContext *a, int16_t block[64])
90 {
91  int i;
92  int nc_count = 0;
93 
94  put_bits(&a->pb, 8, (block[0] + 32) >> 6);
95  block[0] = 0;
96 
97  for (i = 0; i < 10; i++) {
98  const int index = ff_asv_scantab[4 * i];
99  int ccp = 0;
100 
101  if ((block[index + 0] = (block[index + 0] *
102  a->q_intra_matrix[index + 0] + (1 << 15)) >> 16))
103  ccp |= 8;
104  if ((block[index + 8] = (block[index + 8] *
105  a->q_intra_matrix[index + 8] + (1 << 15)) >> 16))
106  ccp |= 4;
107  if ((block[index + 1] = (block[index + 1] *
108  a->q_intra_matrix[index + 1] + (1 << 15)) >> 16))
109  ccp |= 2;
110  if ((block[index + 9] = (block[index + 9] *
111  a->q_intra_matrix[index + 9] + (1 << 15)) >> 16))
112  ccp |= 1;
113 
114  if (ccp) {
115  for (; nc_count; nc_count--)
116  put_bits(&a->pb, 2, 2); /* Skip */
117 
118  put_bits(&a->pb, ff_asv_ccp_tab[ccp][1], ff_asv_ccp_tab[ccp][0]);
119 
120  if (ccp & 8)
121  asv1_put_level(&a->pb, block[index + 0]);
122  if (ccp & 4)
123  asv1_put_level(&a->pb, block[index + 8]);
124  if (ccp & 2)
125  asv1_put_level(&a->pb, block[index + 1]);
126  if (ccp & 1)
127  asv1_put_level(&a->pb, block[index + 9]);
128  } else {
129  nc_count++;
130  }
131  }
132  put_bits(&a->pb, 5, 0xF); /* End of block */
133 }
134 
135 static inline void asv2_encode_block(ASVEncContext *a, int16_t block[64])
136 {
137  int i;
138  int count = 0;
139 
140  for (count = 63; count > 3; count--) {
141  const int index = ff_asv_scantab[count];
142  if ((block[index] * a->q_intra_matrix[index] + (1 << 15)) >> 16)
143  break;
144  }
145 
146  count >>= 2;
147 
148  put_bits_le(&a->pb, 4, count);
149  put_bits_le(&a->pb, 8, (block[0] + 32) >> 6);
150  block[0] = 0;
151 
152  for (i = 0; i <= count; i++) {
153  const int index = ff_asv_scantab[4 * i];
154  int ccp = 0;
155 
156  if ((block[index + 0] = (block[index + 0] *
157  a->q_intra_matrix[index + 0] + (1 << 15)) >> 16))
158  ccp |= 8;
159  if ((block[index + 8] = (block[index + 8] *
160  a->q_intra_matrix[index + 8] + (1 << 15)) >> 16))
161  ccp |= 4;
162  if ((block[index + 1] = (block[index + 1] *
163  a->q_intra_matrix[index + 1] + (1 << 15)) >> 16))
164  ccp |= 2;
165  if ((block[index + 9] = (block[index + 9] *
166  a->q_intra_matrix[index + 9] + (1 << 15)) >> 16))
167  ccp |= 1;
168 
169  av_assert2(i || ccp < 8);
170  if (i)
171  put_bits_le(&a->pb, ff_asv_ac_ccp_tab[ccp][1], ff_asv_ac_ccp_tab[ccp][0]);
172  else
173  put_bits_le(&a->pb, ff_asv_dc_ccp_tab[ccp][1], ff_asv_dc_ccp_tab[ccp][0]);
174 
175  if (ccp) {
176  if (ccp & 8)
177  asv2_put_level(a, &a->pb, block[index + 0]);
178  if (ccp & 4)
179  asv2_put_level(a, &a->pb, block[index + 8]);
180  if (ccp & 2)
181  asv2_put_level(a, &a->pb, block[index + 1]);
182  if (ccp & 1)
183  asv2_put_level(a, &a->pb, block[index + 9]);
184  }
185  }
186 }
187 
188 static inline int encode_mb(ASVEncContext *a, int16_t block[6][64])
189 {
190  int i;
191 
192  av_assert0(put_bytes_left(&a->pb, 0) >= MAX_MB_SIZE);
193 
194  if (a->c.avctx->codec_id == AV_CODEC_ID_ASV1) {
195  for (i = 0; i < 6; i++)
197  } else {
198  for (i = 0; i < 6; i++) {
200  }
201  }
202  return 0;
203 }
204 
205 static inline void dct_get(ASVEncContext *a, const AVFrame *frame,
206  int mb_x, int mb_y)
207 {
208  int16_t (*block)[64] = a->block;
209  int linesize = frame->linesize[0];
210  int i;
211 
212  const uint8_t *ptr_y = frame->data[0] + (mb_y * 16 * linesize) + mb_x * 16;
213  const uint8_t *ptr_cb = frame->data[1] + (mb_y * 8 * frame->linesize[1]) + mb_x * 8;
214  const uint8_t *ptr_cr = frame->data[2] + (mb_y * 8 * frame->linesize[2]) + mb_x * 8;
215 
216  a->pdsp.get_pixels(block[0], ptr_y, linesize);
217  a->pdsp.get_pixels(block[1], ptr_y + 8, linesize);
218  a->pdsp.get_pixels(block[2], ptr_y + 8 * linesize, linesize);
219  a->pdsp.get_pixels(block[3], ptr_y + 8 * linesize + 8, linesize);
220  for (i = 0; i < 4; i++)
221  a->fdsp.fdct(block[i]);
222 
223  if (!(a->c.avctx->flags & AV_CODEC_FLAG_GRAY)) {
224  a->pdsp.get_pixels(block[4], ptr_cb, frame->linesize[1]);
225  a->pdsp.get_pixels(block[5], ptr_cr, frame->linesize[2]);
226  for (i = 4; i < 6; i++)
227  a->fdsp.fdct(block[i]);
228  }
229 }
230 
232  const AVFrame *pict, int *got_packet)
233 {
234  ASVEncContext *const a = avctx->priv_data;
235  const ASVCommonContext *const c = &a->c;
236  int size, ret;
237 
238  if (pict->width % 16 || pict->height % 16) {
239  AVFrame *clone = av_frame_alloc();
240  int i;
241 
242  if (!clone)
243  return AVERROR(ENOMEM);
244  clone->format = pict->format;
245  clone->width = FFALIGN(pict->width, 16);
246  clone->height = FFALIGN(pict->height, 16);
247  ret = av_frame_get_buffer(clone, 0);
248  if (ret < 0) {
249  av_frame_free(&clone);
250  return ret;
251  }
252 
253  ret = av_frame_copy(clone, pict);
254  if (ret < 0) {
255  av_frame_free(&clone);
256  return ret;
257  }
258 
259  for (i = 0; i<3; i++) {
260  int x, y;
261  int w = AV_CEIL_RSHIFT(pict->width, !!i);
262  int h = AV_CEIL_RSHIFT(pict->height, !!i);
263  int w2 = AV_CEIL_RSHIFT(clone->width, !!i);
264  int h2 = AV_CEIL_RSHIFT(clone->height, !!i);
265  for (y=0; y<h; y++)
266  for (x=w; x<w2; x++)
267  clone->data[i][x + y*clone->linesize[i]] =
268  clone->data[i][w - 1 + y*clone->linesize[i]];
269  for (y=h; y<h2; y++)
270  for (x=0; x<w2; x++)
271  clone->data[i][x + y*clone->linesize[i]] =
272  clone->data[i][x + (h-1)*clone->linesize[i]];
273  }
274  ret = encode_frame(avctx, pkt, clone, got_packet);
275 
276  av_frame_free(&clone);
277  return ret;
278  }
279 
280  ret = ff_alloc_packet(avctx, pkt, c->mb_height * c->mb_width * MAX_MB_SIZE + 3);
281  if (ret < 0)
282  return ret;
283 
284  init_put_bits(&a->pb, pkt->data, pkt->size);
285 
286  for (int mb_y = 0; mb_y < c->mb_height2; mb_y++) {
287  for (int mb_x = 0; mb_x < c->mb_width2; mb_x++) {
288  dct_get(a, pict, mb_x, mb_y);
289  encode_mb(a, a->block);
290  }
291  }
292 
293  if (c->mb_width2 != c->mb_width) {
294  int mb_x = c->mb_width2;
295  for (int mb_y = 0; mb_y < c->mb_height2; mb_y++) {
296  dct_get(a, pict, mb_x, mb_y);
297  encode_mb(a, a->block);
298  }
299  }
300 
301  if (c->mb_height2 != c->mb_height) {
302  int mb_y = c->mb_height2;
303  for (int mb_x = 0; mb_x < c->mb_width; mb_x++) {
304  dct_get(a, pict, mb_x, mb_y);
305  encode_mb(a, a->block);
306  }
307  }
308 
309  if (avctx->codec_id == AV_CODEC_ID_ASV1)
310  flush_put_bits(&a->pb);
311  else
312  flush_put_bits_le(&a->pb);
313  AV_WN32(put_bits_ptr(&a->pb), 0);
314  size = (put_bytes_output(&a->pb) + 3) / 4;
315 
316  if (avctx->codec_id == AV_CODEC_ID_ASV1) {
317  c->bbdsp.bswap_buf((uint32_t *) pkt->data,
318  (uint32_t *) pkt->data, size);
319  }
320 
321  pkt->size = size * 4;
322  *got_packet = 1;
323 
324  return 0;
325 }
326 
328 {
329  ASVEncContext *const a = avctx->priv_data;
330  int i;
331  const int scale = avctx->codec_id == AV_CODEC_ID_ASV1 ? 1 : 2;
332  int inv_qscale;
333 
334  ff_asv_common_init(avctx);
335  ff_fdctdsp_init(&a->fdsp, avctx);
336  ff_pixblockdsp_init(&a->pdsp, avctx);
337 
338  if (avctx->global_quality <= 0)
339  avctx->global_quality = 4 * FF_QUALITY_SCALE;
340 
341  inv_qscale = (32 * scale * FF_QUALITY_SCALE +
342  avctx->global_quality / 2) / avctx->global_quality;
343 
344  avctx->extradata = av_mallocz(8);
345  if (!avctx->extradata)
346  return AVERROR(ENOMEM);
347  avctx->extradata_size = 8;
348  AV_WLA(32, avctx->extradata, inv_qscale);
349  ((uint32_t *) avctx->extradata)[1] = av_le2ne32(AV_RL32("ASUS"));
350 
351  for (i = 0; i < 64; i++) {
352  if (a->fdsp.fdct == ff_fdct_ifast) {
353  int q = 32LL * scale * ff_mpeg1_default_intra_matrix[i] * ff_aanscales[i];
354  a->q_intra_matrix[i] = (((int64_t)inv_qscale << 30) + q / 2) / q;
355  } else {
356  int q = 32 * scale * ff_mpeg1_default_intra_matrix[i];
357  a->q_intra_matrix[i] = ((inv_qscale << 16) + q / 2) / q;
358  }
359  }
360 
361  return 0;
362 }
363 
364 #if CONFIG_ASV1_ENCODER
365 const FFCodec ff_asv1_encoder = {
366  .p.name = "asv1",
367  CODEC_LONG_NAME("ASUS V1"),
368  .p.type = AVMEDIA_TYPE_VIDEO,
369  .p.id = AV_CODEC_ID_ASV1,
371  .priv_data_size = sizeof(ASVEncContext),
372  .init = encode_init,
375  .color_ranges = AVCOL_RANGE_MPEG,
376 };
377 #endif
378 
379 #if CONFIG_ASV2_ENCODER
380 const FFCodec ff_asv2_encoder = {
381  .p.name = "asv2",
382  CODEC_LONG_NAME("ASUS V2"),
383  .p.type = AVMEDIA_TYPE_VIDEO,
384  .p.id = AV_CODEC_ID_ASV2,
386  .priv_data_size = sizeof(ASVEncContext),
387  .init = encode_init,
390  .color_ranges = AVCOL_RANGE_MPEG,
391 };
392 #endif
CODEC_PIXFMTS
#define CODEC_PIXFMTS(...)
Definition: codec_internal.h:386
AV_LOG_WARNING
#define AV_LOG_WARNING
Something somehow does not look correct.
Definition: log.h:215
ff_asv_dc_ccp_tab
const uint8_t ff_asv_dc_ccp_tab[8][2]
Definition: asv.c:57
level
uint8_t level
Definition: svq3.c:205
asv1_put_level
static void asv1_put_level(PutBitContext *pb, int level)
Definition: asvenc.c:61
ff_asv_level_tab
const uint8_t ff_asv_level_tab[7][2]
Definition: asv.c:53
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
mem_internal.h
av_frame_get_buffer
int av_frame_get_buffer(AVFrame *frame, int align)
Allocate new buffer(s) for audio or video data.
Definition: frame.c:205
put_bytes_output
static int put_bytes_output(const PutBitContext *s)
Definition: put_bits.h:89
av_clip_int8
#define av_clip_int8
Definition: common.h:109
int64_t
long long int64_t
Definition: coverity.c:34
AV_WLA
#define AV_WLA(s, p, v)
Definition: intreadwrite.h:548
put_sbits
static void put_sbits(PutBitContext *pb, int n, int32_t value)
Definition: put_bits.h:281
init_put_bits
static void init_put_bits(PutBitContext *s, uint8_t *buffer, int buffer_size)
Initialize the PutBitContext s.
Definition: put_bits.h:62
av_frame_free
void av_frame_free(AVFrame **frame)
Free the frame and any dynamically allocated objects in it, e.g.
Definition: frame.c:63
AVFrame
This structure describes decoded (raw) audio or video data.
Definition: frame.h:410
put_bits
static void put_bits(Jpeg2000EncoderContext *s, int val, int n)
put n times val bit
Definition: j2kenc.c:223
AVFrame::width
int width
Definition: frame.h:482
w
uint8_t w
Definition: llviddspenc.c:38
FF_QUALITY_SCALE
#define FF_QUALITY_SCALE
Definition: avutil.h:230
AVPacket::data
uint8_t * data
Definition: packet.h:535
encode.h
ASV1_MAX_MB_SIZE
@ ASV1_MAX_MB_SIZE
Definition: asvenc.c:55
FFCodec
Definition: codec_internal.h:127
ff_pixblockdsp_init
av_cold void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx)
Definition: pixblockdsp.c:88
FFMAX
#define FFMAX(a, b)
Definition: macros.h:47
ASVEncContext::q_intra_matrix
int q_intra_matrix[64]
Definition: asvenc.c:50
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition: frame.h:431
ff_asv2_level_tab
const uint16_t ff_asv2_level_tab[63][2]
Definition: asv.c:69
ASVEncContext::block
int16_t block[6][64]
Definition: asvenc.c:49
FDCTDSPContext
Definition: fdctdsp.h:28
FFCodec::p
AVCodec p
The public AVCodec.
Definition: codec_internal.h:131
asv1_encode_block
static void asv1_encode_block(ASVEncContext *a, int16_t block[64])
Definition: asvenc.c:89
ff_asv_scantab
const uint8_t ff_asv_scantab[64]
Definition: asv.c:34
ASV1_MAX_BLOCK_SIZE
@ ASV1_MAX_BLOCK_SIZE
Definition: asvenc.c:54
asv2_encode_block
static void asv2_encode_block(ASVEncContext *a, int16_t block[64])
Definition: asvenc.c:135
FF_CODEC_ENCODE_CB
#define FF_CODEC_ENCODE_CB(func)
Definition: codec_internal.h:353
put_bytes_left
static int put_bytes_left(const PutBitContext *s, int round_up)
Definition: put_bits.h:135
av_frame_alloc
AVFrame * av_frame_alloc(void)
Allocate an AVFrame and set its fields to default values.
Definition: frame.c:51
ASVCommonContext
Definition: asv.h:34
encode_init
static av_cold int encode_init(AVCodecContext *avctx)
Definition: asvenc.c:327
pkt
AVPacket * pkt
Definition: movenc.c:60
ff_asv2_encoder
const FFCodec ff_asv2_encoder
av_cold
#define av_cold
Definition: attributes.h:90
ff_asv1_encoder
const FFCodec ff_asv1_encoder
AVCodecContext::extradata_size
int extradata_size
Definition: avcodec.h:515
AVCodecContext::global_quality
int global_quality
Global quality for codecs which cannot change it per frame.
Definition: avcodec.h:1217
AV_CEIL_RSHIFT
#define AV_CEIL_RSHIFT(a, b)
Definition: common.h:60
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
#define AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE
This encoder can reorder user opaque values from input AVFrames and return them with corresponding ou...
Definition: codec.h:144
encode_mb
static int encode_mb(ASVEncContext *a, int16_t block[6][64])
Definition: asvenc.c:188
av_assert0
#define av_assert0(cond)
assert() equivalent, that is always enabled.
Definition: avassert.h:40
asv.h
AV_PIX_FMT_YUV420P
@ AV_PIX_FMT_YUV420P
planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
Definition: pixfmt.h:73
PutBitContext
Definition: put_bits.h:50
CODEC_LONG_NAME
#define CODEC_LONG_NAME(str)
Definition: codec_internal.h:326
AVCodecContext::codec_id
enum AVCodecID codec_id
Definition: avcodec.h:441
ff_asv_ac_ccp_tab
const uint8_t ff_asv_ac_ccp_tab[16][2]
Definition: asv.c:62
PixblockDSPContext
Definition: pixblockdsp.h:26
ASV2_MAX_MB_SIZE
@ ASV2_MAX_MB_SIZE
Definition: asvenc.c:57
MAX_MB_SIZE
@ MAX_MB_SIZE
Definition: asvenc.c:58
aandcttab.h
flush_put_bits_le
static void flush_put_bits_le(PutBitContext *s)
Definition: put_bits.h:164
index
int index
Definition: gxfenc.c:90
c
Undefined Behavior In the C some operations are like signed integer dereferencing freed accessing outside allocated Undefined Behavior must not occur in a C it is not safe even if the output of undefined operations is unused The unsafety may seem nit picking but Optimizing compilers have in fact optimized code on the assumption that no undefined Behavior occurs Optimizing code based on wrong assumptions can and has in some cases lead to effects beyond the output of computations The signed integer overflow problem in speed critical code Code which is highly optimized and works with signed integers sometimes has the problem that often the output of the computation does not c
Definition: undefined.txt:32
init
int(* init)(AVBSFContext *ctx)
Definition: dts2pts.c:368
AV_CODEC_CAP_DR1
#define AV_CODEC_CAP_DR1
Codec uses get_buffer() or get_encode_buffer() for allocating buffers and supports custom allocators.
Definition: codec.h:52
AV_CODEC_FLAG_GRAY
#define AV_CODEC_FLAG_GRAY
Only decode/encode grayscale.
Definition: avcodec.h:302
AVPacket::size
int size
Definition: packet.h:536
codec_internal.h
DECLARE_ALIGNED
#define DECLARE_ALIGNED(n, t, v)
Definition: mem_internal.h:104
AV_WN32
#define AV_WN32(p, v)
Definition: intreadwrite.h:372
av_frame_copy
int av_frame_copy(AVFrame *dst, const AVFrame *src)
Copy the frame data from src to dst.
Definition: frame.c:713
ASV2_MAX_BLOCK_SIZE
@ ASV2_MAX_BLOCK_SIZE
Definition: asvenc.c:56
for
for(k=2;k<=8;++k)
Definition: h264pred_template.c:424
size
int size
Definition: twinvq_data.h:10344
AVFrame::format
int format
format of the frame, -1 if unknown or unset Values correspond to enum AVPixelFormat for video frames,...
Definition: frame.h:497
ff_mpeg1_default_intra_matrix
const uint16_t ff_mpeg1_default_intra_matrix[256]
Definition: mpeg12data.c:31
ff_asv_common_init
av_cold void ff_asv_common_init(AVCodecContext *avctx)
Definition: asv.c:91
a
The reader does not expect b to be semantically here and if the code is changed by maybe adding a a division or other the signedness will almost certainly be mistaken To avoid this confusion a new type was SUINT is the C unsigned type but it holds a signed int to use the same example SUINT a
Definition: undefined.txt:41
attributes.h
AV_CODEC_ID_ASV1
@ AV_CODEC_ID_ASV1
Definition: codec_id.h:83
ASVEncContext::fdsp
FDCTDSPContext fdsp
Definition: asvenc.c:48
av_assert2
#define av_assert2(cond)
assert() equivalent, that does lie in speed critical code.
Definition: avassert.h:67
i
#define i(width, name, range_min, range_max)
Definition: cbs_h2645.c:256
AVCodecContext::extradata
uint8_t * extradata
Out-of-band global headers that may be used by some codecs.
Definition: avcodec.h:514
AV_CODEC_ID_ASV2
@ AV_CODEC_ID_ASV2
Definition: codec_id.h:84
ff_fdctdsp_init
av_cold void ff_fdctdsp_init(FDCTDSPContext *c, AVCodecContext *avctx)
Definition: fdctdsp.c:25
av_le2ne32
#define av_le2ne32(x)
Definition: bswap.h:92
fdctdsp.h
av_mallocz
void * av_mallocz(size_t size)
Allocate a memory block with alignment suitable for all memory accesses (including vectors if availab...
Definition: mem.c:256
AVCodec::name
const char * name
Name of the codec implementation.
Definition: codec.h:179
ASVEncContext::c
ASVCommonContext c
Definition: asvenc.c:43
AVCOL_RANGE_MPEG
@ AVCOL_RANGE_MPEG
Narrow or limited range content.
Definition: pixfmt.h:733
encode_frame
static int encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *pict, int *got_packet)
Definition: asvenc.c:231
avcodec.h
ret
ret
Definition: filter_design.txt:187
frame
these buffered frames must be flushed immediately if a new input produces new the filter must not call request_frame to get more It must just process the frame or queue it The task of requesting more frames is left to the filter s request_frame method or the application If a filter has several the filter must be ready for frames arriving randomly on any input any filter with several inputs will most likely require some kind of queuing mechanism It is perfectly acceptable to have a limited queue and to drop frames when the inputs are too unbalanced request_frame For filters that do not use the this method is called when a frame is wanted on an output For a it should directly call filter_frame on the corresponding output For a if there are queued frames already one of these frames should be pushed If the filter should request a frame on one of its repeatedly until at least one frame has been pushed Return or at least make progress towards producing a frame
Definition: filter_design.txt:264
ff_fdct_ifast
void ff_fdct_ifast(int16_t *data)
Definition: jfdctfst.c:207
ASVEncContext
Definition: asvenc.c:42
AV_RL32
uint64_t_TMPL AV_WL64 unsigned int_TMPL AV_RL32
Definition: bytestream.h:92
mpeg12data.h
AVCodecContext
main external API structure.
Definition: avcodec.h:431
AVFrame::height
int height
Definition: frame.h:482
put_bits_ptr
static uint8_t * put_bits_ptr(PutBitContext *s)
Return the pointer to the byte where the bitstream writer will put the next bit.
Definition: put_bits.h:392
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition: avutil.h:201
mem.h
flush_put_bits
static void flush_put_bits(PutBitContext *s)
Pad the end of the output stream with zeros.
Definition: put_bits.h:143
ff_asv_ccp_tab
const uint8_t ff_asv_ccp_tab[17][2]
Definition: asv.c:45
scale
static void scale(int *out, const int *in, const int w, const int h, const int shift)
Definition: intra.c:291
FFALIGN
#define FFALIGN(x, a)
Definition: macros.h:78
AVCodecContext::priv_data
void * priv_data
Definition: avcodec.h:458
AVPacket
This structure stores compressed data.
Definition: packet.h:512
dct_get
static void dct_get(ASVEncContext *a, const AVFrame *frame, int mb_x, int mb_y)
Definition: asvenc.c:205
ASVEncContext::pb
PutBitContext pb
Definition: asvenc.c:45
ASVEncContext::pdsp
PixblockDSPContext pdsp
Definition: asvenc.c:47
AVFrame::linesize
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
Definition: frame.h:455
block
The exact code depends on how similar the blocks are and how related they are to the block
Definition: filter_design.txt:207
av_log
#define av_log(a,...)
Definition: tableprint_vlc.h:27
put_bits_le
static void put_bits_le(PutBitContext *s, int n, BitBuf value)
Definition: put_bits.h:253
h
h
Definition: vp9dsp_template.c:2070
asv2_put_level
static void asv2_put_level(ASVEncContext *a, PutBitContext *pb, int level)
Definition: asvenc.c:73
put_bits.h
ff_alloc_packet
int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and allocate data.
Definition: encode.c:62
pixblockdsp.h
ff_aanscales
const uint16_t ff_aanscales[64]
Definition: aandcttab.c:26