History

avcodec: add ClearVideo decoder

Only I-frames are decoded for now.

Kostya Shishkov committed 9 years ago

Commit a63496c1 parent 2b8151c10 files · +403 −2Browse files

Unified · Split

10 files
  1. Changelog +1 −0
  2. doc/general.texi +1 −0
  3. libavcodec/Makefile +1 −0
  4. libavcodec/allcodecs.c +1 −0
  5. libavcodec/avcodec.h +1 −0
  6. libavcodec/clearvideo.c +387 −0
  7. libavcodec/codec_desc.c +7 −0
  8. libavcodec/version.h +2 −2
  9. libavformat/riff.c +1 −0
  10. libavformat/rm.c +1 −0
Changelog+1−0
@@ -25,6 +25,7 @@ version <next>: · 24 unmodified lines
25- FM Screen Capture Codec decoder25- FM Screen Capture Codec decoder
26- native Opus encoder26- native Opus encoder
27- ScreenPressor decoder27- ScreenPressor decoder
28- incomplete ClearVideo decoder
28 29
29version 3.2:30version 3.2:
30- libopenmpt demuxer31- libopenmpt demuxer
doc/general.texi+1−0
@@ -342,6 +342,7 @@ library: · 341 unmodified lines
342@item iLBC @tab X @tab X342@item iLBC @tab X @tab X
343@item Interplay MVE @tab @tab X343@item Interplay MVE @tab @tab X
344 @tab Format used in various Interplay computer games.344 @tab Format used in various Interplay computer games.
345@item Iterated Systems ClearVideo @tab @tab X
345@item IV8 @tab @tab X346@item IV8 @tab @tab X
346 @tab A format generated by IndigoVision 8000 video server.347 @tab A format generated by IndigoVision 8000 video server.
347@item IVF (On2) @tab X @tab X348@item IVF (On2) @tab X @tab X
libavcodec/Makefile+1−0
@@ -228,6 +228,7 @@ OBJS-$(CONFIG_CDXL_DECODER) += cdxl.o · 227 unmodified lines
228OBJS-$(CONFIG_CFHD_DECODER) += cfhd.o cfhddata.o228OBJS-$(CONFIG_CFHD_DECODER) += cfhd.o cfhddata.o
229OBJS-$(CONFIG_CINEPAK_DECODER) += cinepak.o229OBJS-$(CONFIG_CINEPAK_DECODER) += cinepak.o
230OBJS-$(CONFIG_CINEPAK_ENCODER) += cinepakenc.o elbg.o230OBJS-$(CONFIG_CINEPAK_ENCODER) += cinepakenc.o elbg.o
231OBJS-$(CONFIG_CLEARVIDEO_DECODER) += clearvideo.o
231OBJS-$(CONFIG_CLJR_DECODER) += cljrdec.o232OBJS-$(CONFIG_CLJR_DECODER) += cljrdec.o
232OBJS-$(CONFIG_CLJR_ENCODER) += cljrenc.o233OBJS-$(CONFIG_CLJR_ENCODER) += cljrenc.o
233OBJS-$(CONFIG_CLLC_DECODER) += cllc.o canopus.o234OBJS-$(CONFIG_CLLC_DECODER) += cllc.o canopus.o
libavcodec/allcodecs.c+1−0
@@ -157,6 +157,7 @@ void avcodec_register_all(void) · 156 unmodified lines
157 REGISTER_DECODER(CDXL, cdxl);157 REGISTER_DECODER(CDXL, cdxl);
158 REGISTER_DECODER(CFHD, cfhd);158 REGISTER_DECODER(CFHD, cfhd);
159 REGISTER_ENCDEC (CINEPAK, cinepak);159 REGISTER_ENCDEC (CINEPAK, cinepak);
160 REGISTER_DECODER(CLEARVIDEO, clearvideo);
160 REGISTER_ENCDEC (CLJR, cljr);161 REGISTER_ENCDEC (CLJR, cljr);
161 REGISTER_DECODER(CLLC, cllc);162 REGISTER_DECODER(CLLC, cllc);
162 REGISTER_ENCDEC (COMFORTNOISE, comfortnoise);163 REGISTER_ENCDEC (COMFORTNOISE, comfortnoise);
libavcodec/avcodec.h+1−0
@@ -416,6 +416,7 @@ enum AVCodecID { · 415 unmodified lines
416 AV_CODEC_ID_SPEEDHQ,416 AV_CODEC_ID_SPEEDHQ,
417 AV_CODEC_ID_FMVC,417 AV_CODEC_ID_FMVC,
418 AV_CODEC_ID_SCPR,418 AV_CODEC_ID_SCPR,
419 AV_CODEC_ID_CLEARVIDEO,
419 420
420 /* various PCM "codecs" */421 /* various PCM "codecs" */
421 AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs422 AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs
libavcodec/clearvideo.c+387−0
@@ -0,0 +1,387 @@
1/*
2 * ClearVideo decoder
3 * Copyright (c) 2012 Konstantin Shishkov
4 *
5 * This file is part of FFmpeg.
6 *
7 * FFmpeg is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Lesser General Public
9 * License as published by the Free Software Foundation; either
10 * version 2.1 of the License, or (at your option) any later version.
11 *
12 * FFmpeg is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Lesser General Public License for more details.
16 *
17 * You should have received a copy of the GNU Lesser General Public
18 * License along with FFmpeg; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 */
21
22/**
23 * @file
24 * ClearVideo decoder
25 */
26
27#include "avcodec.h"
28#include "idctdsp.h"
29#include "internal.h"
30#include "get_bits.h"
31#include "bytestream.h"
32
33#define NUM_DC_CODES 127
34#define NUM_AC_CODES 103
35
36static const uint8_t clv_dc_codes[NUM_DC_CODES] = {
37 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
38 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
39 0x10, 0x11, 0x12, 0x13, 0x13, 0x14, 0x07, 0x0B,
40 0x0C, 0x08, 0x08, 0x09, 0x04, 0x06, 0x07, 0x05,
41 0x04, 0x05, 0x04, 0x06, 0x05, 0x06, 0x07, 0x05,
42 0x06, 0x07, 0x06, 0x07, 0x08, 0x06, 0x07, 0x08,
43 0x09, 0x0A, 0x0B, 0x07, 0x08, 0x09, 0x07, 0x08,
44 0x06, 0x07, 0x08, 0x06, 0x04, 0x05, 0x02, 0x01,
45 0x03, 0x06, 0x07, 0x07, 0x09, 0x0A, 0x0B, 0x09,
46 0x0A, 0x0B, 0x0A, 0x0B, 0x0C, 0x0D, 0x0C, 0x09,
47 0x0D, 0x0A, 0x0B, 0x08, 0x09, 0x0A, 0x0B, 0x07,
48 0x08, 0x09, 0x0A, 0x0B, 0x06, 0x07, 0x06, 0x08,
49 0x07, 0x09, 0x0A, 0x0B, 0x09, 0x0A, 0x0B, 0x0C,
50 0x14, 0x0D, 0x0D, 0x0E, 0x0F, 0x15, 0x15, 0x16,
51 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E,
52 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
53};
54
55static const uint8_t clv_dc_bits[NUM_DC_CODES] = {
56 22, 22, 22, 22, 22, 22, 22, 22,
57 22, 22, 22, 22, 22, 22, 22, 22,
58 22, 22, 22, 21, 22, 22, 19, 20,
59 20, 19, 18, 18, 15, 17, 17, 16,
60 14, 15, 12, 13, 14, 14, 14, 12,
61 12, 12, 11, 11, 11, 10, 10, 10,
62 10, 10, 10, 9, 9, 9, 8, 8,
63 7, 7, 7, 6, 5, 5, 3, 1,
64 3, 5, 5, 6, 7, 7, 7, 8,
65 8, 8, 9, 9, 9, 9, 10, 11,
66 10, 11, 11, 12, 12, 12, 12, 13,
67 14, 14, 14, 14, 15, 15, 16, 17,
68 16, 17, 18, 18, 19, 19, 19, 19,
69 21, 19, 20, 19, 19, 21, 22, 22,
70 22, 22, 22, 22, 22, 22, 22, 22,
71 22, 22, 22, 22, 22, 22, 22,
72};
73
74static const uint16_t clv_ac_syms[NUM_AC_CODES] = {
75 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008,
76 0x0009, 0x000A, 0x000B, 0x000C, 0x0011, 0x0012, 0x0013, 0x0014,
77 0x0015, 0x0016, 0x0021, 0x0022, 0x0023, 0x0024, 0x0031, 0x0032,
78 0x0033, 0x0041, 0x0042, 0x0043, 0x0051, 0x0052, 0x0053, 0x0061,
79 0x0062, 0x0063, 0x0071, 0x0072, 0x0081, 0x0082, 0x0091, 0x0092,
80 0x00A1, 0x00A2, 0x00B1, 0x00C1, 0x00D1, 0x00E1, 0x00F1, 0x0101,
81 0x0111, 0x0121, 0x0131, 0x0141, 0x0151, 0x0161, 0x0171, 0x0181,
82 0x0191, 0x01A1, 0x1001, 0x1002, 0x1003, 0x1011, 0x1012, 0x1021,
83 0x1031, 0x1041, 0x1051, 0x1061, 0x1071, 0x1081, 0x1091, 0x10A1,
84 0x10B1, 0x10C1, 0x10D1, 0x10E1, 0x10F1, 0x1101, 0x1111, 0x1121,
85 0x1131, 0x1141, 0x1151, 0x1161, 0x1171, 0x1181, 0x1191, 0x11A1,
86 0x11B1, 0x11C1, 0x11D1, 0x11E1, 0x11F1, 0x1201, 0x1211, 0x1221,
87 0x1231, 0x1241, 0x1251, 0x1261, 0x1271, 0x1281, 0x1BFF,
88};
89
90static const uint8_t clv_ac_codes[NUM_AC_CODES] = {
91 0x02, 0x0F, 0x15, 0x17, 0x1F, 0x25, 0x24, 0x21,
92 0x20, 0x07, 0x06, 0x20, 0x06, 0x14, 0x1E, 0x0F,
93 0x21, 0x50, 0x0E, 0x1D, 0x0E, 0x51, 0x0D, 0x23,
94 0x0D, 0x0C, 0x22, 0x52, 0x0B, 0x0C, 0x53, 0x13,
95 0x0B, 0x54, 0x12, 0x0A, 0x11, 0x09, 0x10, 0x08,
96 0x16, 0x55, 0x15, 0x14, 0x1C, 0x1B, 0x21, 0x20,
97 0x1F, 0x1E, 0x1D, 0x1C, 0x1B, 0x1A, 0x22, 0x23,
98 0x56, 0x57, 0x07, 0x19, 0x05, 0x0F, 0x04, 0x0E,
99 0x0D, 0x0C, 0x13, 0x12, 0x11, 0x10, 0x1A, 0x19,
100 0x18, 0x17, 0x16, 0x15, 0x14, 0x13, 0x18, 0x17,
101 0x16, 0x15, 0x14, 0x13, 0x12, 0x11, 0x07, 0x06,
102 0x05, 0x04, 0x24, 0x25, 0x26, 0x27, 0x58, 0x59,
103 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x03,
104};
105
106static const uint8_t clv_ac_bits[NUM_AC_CODES] = {
107 2, 4, 6, 7, 8, 9, 9, 10,
108 10, 11, 11, 11, 3, 6, 8, 10,
109 11, 12, 4, 8, 10, 12, 5, 9,
110 10, 5, 9, 12, 5, 10, 12, 6,
111 10, 12, 6, 10, 6, 10, 6, 10,
112 7, 12, 7, 7, 8, 8, 9, 9,
113 9, 9, 9, 9, 9, 9, 11, 11,
114 12, 12, 4, 9, 11, 6, 11, 6,
115 6, 6, 7, 7, 7, 7, 8, 8,
116 8, 8, 8, 8, 8, 8, 9, 9,
117 9, 9, 9, 9, 9, 9, 10, 10,
118 10, 10, 11, 11, 11, 11, 12, 12,
119 12, 12, 12, 12, 12, 12, 7,
120};
121
122typedef struct CLVContext {
123 AVCodecContext *avctx;
124 IDCTDSPContext idsp;
125 AVFrame *pic;
126 GetBitContext gb;
127 int mb_width, mb_height;
128 VLC dc_vlc, ac_vlc;
129 int luma_dc_quant, chroma_dc_quant, ac_quant;
130 DECLARE_ALIGNED(16, int16_t, block)[64];
131 int top_dc[3], left_dc[4];
132} CLVContext;
133
134static inline int decode_block(CLVContext *ctx, int16_t *blk, int has_ac,
135 int ac_quant)
136{
137 GetBitContext *gb = &ctx->gb;
138 int idx = 1, last = 0, val, skip;
139
140 memset(blk, 0, sizeof(*blk) * 64);
141 blk[0] = get_vlc2(gb, ctx->dc_vlc.table, 9, 3);
142 if (blk[0] < 0)
143 return AVERROR_INVALIDDATA;
144 blk[0] -= 63;
145
146 if (!has_ac)
147 return 0;
148
149 while (idx < 64 && !last) {
150 val = get_vlc2(gb, ctx->ac_vlc.table, 9, 2);
151 if (val < 0)
152 return AVERROR_INVALIDDATA;
153 if (val != 0x1BFF) {
154 last = val >> 12;
155 skip = (val >> 4) & 0xFF;
156 val &= 0xF;
157 if (get_bits1(gb))
158 val = -val;
159 } else {
160 last = get_bits1(gb);
161 skip = get_bits(gb, 6);
162 val = get_sbits(gb, 8);
163 }
164 if (val) {
165 int aval = FFABS(val), sign = val < 0;
166 val = ac_quant * (2 * aval + 1);
167 if (!(ac_quant & 1))
168 val--;
169 if (sign)
170 val = -val;
171 }
172 idx += skip;
173 if (idx >= 64)
174 return AVERROR_INVALIDDATA;
175 blk[ff_zigzag_direct[idx++]] = val;
176 }
177
178 return (idx <= 64 && last) ? 0 : -1;
179}
180
181#define DCT_TEMPLATE(blk, step, bias, shift, dshift, OP) \
182 const int t0 = OP( 2841 * blk[1 * step] + 565 * blk[7 * step]); \
183 const int t1 = OP( 565 * blk[1 * step] - 2841 * blk[7 * step]); \
184 const int t2 = OP( 1609 * blk[5 * step] + 2408 * blk[3 * step]); \
185 const int t3 = OP( 2408 * blk[5 * step] - 1609 * blk[3 * step]); \
186 const int t4 = OP( 1108 * blk[2 * step] - 2676 * blk[6 * step]); \
187 const int t5 = OP( 2676 * blk[2 * step] + 1108 * blk[6 * step]); \
188 const int t6 = ((blk[0 * step] + blk[4 * step]) << dshift) + bias; \
189 const int t7 = ((blk[0 * step] - blk[4 * step]) << dshift) + bias; \
190 const int t8 = t0 + t2; \
191 const int t9 = t0 - t2; \
192 const int tA = 181 * (t9 + (t1 - t3)) + 0x80 >> 8; \
193 const int tB = 181 * (t9 - (t1 - t3)) + 0x80 >> 8; \
194 const int tC = t1 + t3; \
195 \
196 blk[0 * step] = (t6 + t5 + t8) >> shift; \
197 blk[1 * step] = (t7 + t4 + tA) >> shift; \
198 blk[2 * step] = (t7 - t4 + tB) >> shift; \
199 blk[3 * step] = (t6 - t5 + tC) >> shift; \
200 blk[4 * step] = (t6 - t5 - tC) >> shift; \
201 blk[5 * step] = (t7 - t4 - tB) >> shift; \
202 blk[6 * step] = (t7 + t4 - tA) >> shift; \
203 blk[7 * step] = (t6 + t5 - t8) >> shift; \
204
205#define ROP(x) x
206#define COP(x) (((x) + 4) >> 3)
207
208static void clv_dct(int16_t *block)
209{
210 int i;
211 int16_t *ptr;
212
213 ptr = block;
214 for (i = 0; i < 8; i++) {
215 DCT_TEMPLATE(ptr, 1, 0x80, 8, 11, ROP);
216 ptr += 8;
217 }
218
219 ptr = block;
220 for (i = 0; i < 8; i++) {
221 DCT_TEMPLATE(ptr, 8, 0x2000, 14, 8, COP);
222 ptr++;
223 }
224}
225
226static int decode_mb(CLVContext *c, int x, int y)
227{
228 int i;
229 int has_ac[6];
230 int off;
231
232 for (i = 0; i < 6; i++)
233 has_ac[i] = get_bits1(&c->gb);
234
235 off = x * 16 + y * 16 * c->pic->linesize[0];
236 for (i = 0; i < 4; i++) {
237 if (decode_block(c, c->block, has_ac[i], c->ac_quant) < 0)
238 return AVERROR_INVALIDDATA;
239 if (!x && !(i & 1)) {
240 c->block[0] += c->top_dc[0];
241 c->top_dc[0] = c->block[0];
242 } else {
243 c->block[0] += c->left_dc[(i & 2) >> 1];
244 }
245 c->left_dc[(i & 2) >> 1] = c->block[0];
246 c->block[0] *= c->luma_dc_quant;
247 clv_dct(c->block);
248 if (i == 2)
249 off += c->pic->linesize[0] * 8;
250 c->idsp.put_pixels_clamped(c->block, c->pic->data[0] + off + (i & 1) * 8,
251 c->pic->linesize[0]);
252 }
253
254 off = x * 8 + y * 8 * c->pic->linesize[1];
255 for (i = 1; i < 3; i++) {
256 if (decode_block(c, c->block, has_ac[i + 3], c->ac_quant) < 0)
257 return AVERROR_INVALIDDATA;
258 if (!x) {
259 c->block[0] += c->top_dc[i];
260 c->top_dc[i] = c->block[0];
261 } else {
262 c->block[0] += c->left_dc[i + 1];
263 }
264 c->left_dc[i + 1] = c->block[0];
265 c->block[0] *= c->chroma_dc_quant;
266 clv_dct(c->block);
267 c->idsp.put_pixels_clamped(c->block, c->pic->data[i] + off,
268 c->pic->linesize[i]);
269 }
270
271 return 0;
272}
273
274static int clv_decode_frame(AVCodecContext *avctx, void *data,
275 int *got_frame, AVPacket *avpkt)
276{
277 const uint8_t *buf = avpkt->data;
278 int buf_size = avpkt->size;
279 CLVContext *c = avctx->priv_data;
280 GetByteContext gb;
281 uint32_t frame_type;
282 int i, j;
283 int ret;
284
285 bytestream2_init(&gb, buf, buf_size);
286 if (avctx->codec_tag == MKTAG('C','L','V','1')) {
287 int skip = bytestream2_get_byte(&gb);
288 bytestream2_skip(&gb, (skip + 1) * 8);
289 }
290
291 frame_type = bytestream2_get_byte(&gb);
292 if ((ret = ff_reget_buffer(avctx, c->pic)) < 0)
293 return ret;
294
295 c->pic->key_frame = frame_type & 0x20 ? 1 : 0;
296 c->pic->pict_type = frame_type & 0x20 ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P;
297
298 if (frame_type & 0x2) {
299 bytestream2_get_be32(&gb); // frame size;
300 c->ac_quant = bytestream2_get_byte(&gb);
301 c->luma_dc_quant = 32;
302 c->chroma_dc_quant = 32;
303
304 if ((ret = init_get_bits8(&c->gb, buf + bytestream2_tell(&gb),
305 (buf_size - bytestream2_tell(&gb)))) < 0)
306 return ret;
307
308 for (i = 0; i < 3; i++)
309 c->top_dc[i] = 32;
310 for (i = 0; i < 4; i++)
311 c->left_dc[i] = 32;
312
313 for (j = 0; j < c->mb_height; j++) {
314 for (i = 0; i < c->mb_width; i++) {
315 ret |= decode_mb(c, i, j);
316 }
317 }
318 } else {
319 }
320
321 if ((ret = av_frame_ref(data, c->pic)) < 0)
322 return ret;
323
324 *got_frame = 1;
325
326 return ret < 0 ? ret : buf_size;
327}
328
329static av_cold int clv_decode_init(AVCodecContext *avctx)
330{
331 CLVContext * const c = avctx->priv_data;
332 int ret;
333
334 c->avctx = avctx;
335
336 avctx->pix_fmt = AV_PIX_FMT_YUV420P;
337
338 c->pic = av_frame_alloc();
339 if (!c->pic)
340 return AVERROR(ENOMEM);
341
342 c->mb_width = FFALIGN(avctx->width, 16) >> 4;
343 c->mb_height = FFALIGN(avctx->height, 16) >> 4;
344
345 ff_idctdsp_init(&c->idsp, avctx);
346 ret = init_vlc(&c->dc_vlc, 9, NUM_DC_CODES,
347 clv_dc_bits, 1, 1,
348 clv_dc_codes, 1, 1, 0);
349 if (ret) {
350 av_log(avctx, AV_LOG_ERROR, "Error initialising DC VLC\n");
351 return ret;
352 }
353 ret = ff_init_vlc_sparse(&c->ac_vlc, 9, NUM_AC_CODES,
354 clv_ac_bits, 1, 1,
355 clv_ac_codes, 1, 1,
356 clv_ac_syms, 2, 2, 0);
357 if (ret) {
358 av_log(avctx, AV_LOG_ERROR, "Error initialising AC VLC\n");
359 return ret;
360 }
361
362 return 0;
363}
364
365static av_cold int clv_decode_end(AVCodecContext *avctx)
366{
367 CLVContext * const c = avctx->priv_data;
368
369 av_frame_free(&c->pic);
370
371 ff_free_vlc(&c->dc_vlc);
372 ff_free_vlc(&c->ac_vlc);
373
374 return 0;
375}
376
377AVCodec ff_clearvideo_decoder = {
378 .name = "clearvideo",
379 .type = AVMEDIA_TYPE_VIDEO,
380 .id = AV_CODEC_ID_CLEARVIDEO,
381 .priv_data_size = sizeof(CLVContext),
382 .init = clv_decode_init,
383 .close = clv_decode_end,
384 .decode = clv_decode_frame,
385 .capabilities = CODEC_CAP_DR1,
386 .long_name = NULL_IF_CONFIG_SMALL("Iterated Systems ClearVideo"),
387};
libavcodec/codec_desc.c+7−0
@@ -1367,6 +1367,13 @@ static const AVCodecDescriptor codec_descriptors[] = { · 1366 unmodified lines
1367 .long_name = NULL_IF_CONFIG_SMALL("ScreenPressor"),1367 .long_name = NULL_IF_CONFIG_SMALL("ScreenPressor"),
1368 .props = AV_CODEC_PROP_LOSSLESS | AV_CODEC_PROP_LOSSY,1368 .props = AV_CODEC_PROP_LOSSLESS | AV_CODEC_PROP_LOSSY,
1369 },1369 },
1370 {
1371 .id = AV_CODEC_ID_CLEARVIDEO,
1372 .type = AVMEDIA_TYPE_VIDEO,
1373 .name = "clearvideo",
1374 .long_name = NULL_IF_CONFIG_SMALL("Iterated Systems ClearVideo"),
1375 .props = AV_CODEC_PROP_LOSSY,
1376 },
1370 1377
1371 /* image codecs */1378 /* image codecs */
1372 {1379 {
libavcodec/version.h+2−2
@@ -28,8 +28,8 @@ · 27 unmodified lines
28#include "libavutil/version.h"28#include "libavutil/version.h"
29 29
30#define LIBAVCODEC_VERSION_MAJOR 5730#define LIBAVCODEC_VERSION_MAJOR 57
31#define LIBAVCODEC_VERSION_MINOR 8131#define LIBAVCODEC_VERSION_MINOR 82
32#define LIBAVCODEC_VERSION_MICRO 10332#define LIBAVCODEC_VERSION_MICRO 100
33 33
34#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \34#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
35 LIBAVCODEC_VERSION_MINOR, \35 LIBAVCODEC_VERSION_MINOR, \
libavformat/riff.c+1−0
@@ -450,6 +450,7 @@ const AVCodecTag ff_codec_bmp_tags[] = { · 449 unmodified lines
450 { AV_CODEC_ID_SPEEDHQ, MKTAG('S', 'H', 'Q', '9') },450 { AV_CODEC_ID_SPEEDHQ, MKTAG('S', 'H', 'Q', '9') },
451 { AV_CODEC_ID_FMVC, MKTAG('F', 'M', 'V', 'C') },451 { AV_CODEC_ID_FMVC, MKTAG('F', 'M', 'V', 'C') },
452 { AV_CODEC_ID_SCPR, MKTAG('S', 'C', 'P', 'R') },452 { AV_CODEC_ID_SCPR, MKTAG('S', 'C', 'P', 'R') },
453 { AV_CODEC_ID_CLEARVIDEO, MKTAG('U', 'C', 'O', 'D') },
453 454
454 { AV_CODEC_ID_NONE, 0 }455 { AV_CODEC_ID_NONE, 0 }
455};456};
libavformat/rm.c+1−0
@@ -43,5 +43,6 @@ const AVCodecTag ff_rm_codec_tags[] = { · 42 unmodified lines
43 { AV_CODEC_ID_AAC, MKTAG('r','a','a','c') },43 { AV_CODEC_ID_AAC, MKTAG('r','a','a','c') },
44 { AV_CODEC_ID_AAC, MKTAG('r','a','c','p') },44 { AV_CODEC_ID_AAC, MKTAG('r','a','c','p') },
45 { AV_CODEC_ID_RALF, MKTAG('L','S','D',':') },45 { AV_CODEC_ID_RALF, MKTAG('L','S','D',':') },
46 { AV_CODEC_ID_CLEARVIDEO, MKTAG('C','L','V','1') },
46 { AV_CODEC_ID_NONE },47 { AV_CODEC_ID_NONE },
47};48};

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t