History

add Chinese AVS encoding via external library libxavs

Originally committed as revision 24533 to svn://svn.ffmpeg.org/ffmpeg/trunk

Stefan Gehrer committed 16 years ago

Commit de295971 parent 54d1d1b9 files · +381 −4Browse files

Unified · Split

9 files
  1. Changelog +1 −0
  2. MAINTAINERS +1 −0
  3. configure +6 −0
  4. doc/general.texi +3 −3
  5. libavcodec/Makefile +1 −0
  6. libavcodec/allcodecs.c +1 −0
  7. libavcodec/libxavs.c +351 −0
  8. libavformat/allformats.c +1 −1
  9. libavformat/raw.c +16 −0
Changelog+1−0
@@ -25,6 +25,7 @@ version <next>: · 24 unmodified lines
25- Lego Mindstorms RSO de/muxer25- Lego Mindstorms RSO de/muxer
26- libavcore added26- libavcore added
27- SubRip subtitle file muxer and demuxer27- SubRip subtitle file muxer and demuxer
28- Chinese AVS encoding via libxavs
28 29
29 30
30 31
MAINTAINERS+1−0
@@ -155,6 +155,7 @@ Codecs: · 154 unmodified lines
155 libspeexdec.c Justin Ruggles155 libspeexdec.c Justin Ruggles
156 libtheoraenc.c David Conrad156 libtheoraenc.c David Conrad
157 libvorbis.c David Conrad157 libvorbis.c David Conrad
158 libxavs.c Stefan Gehrer
158 libx264.c Mans Rullgard, Jason Garrett-Glaser159 libx264.c Mans Rullgard, Jason Garrett-Glaser
159 loco.c Kostya Shishkov160 loco.c Kostya Shishkov
160 lzo.h, lzo.c Reimar Doeffinger161 lzo.h, lzo.c Reimar Doeffinger
configure+6−0
@@ -181,6 +181,7 @@ External library support: · 180 unmodified lines
181 native implementation exists [no]181 native implementation exists [no]
182 --enable-libvpx enable VP8 support via libvpx [no]182 --enable-libvpx enable VP8 support via libvpx [no]
183 --enable-libx264 enable H.264 encoding via x264 [no]183 --enable-libx264 enable H.264 encoding via x264 [no]
184 --enable-libxavs enable AVS encoding via xavs [no]
184 --enable-libxvid enable Xvid encoding via xvidcore,185 --enable-libxvid enable Xvid encoding via xvidcore,
185 native MPEG-4/Xvid encoder exists [no]186 native MPEG-4/Xvid encoder exists [no]
186 --enable-mlib enable Sun medialib [no]187 --enable-mlib enable Sun medialib [no]
@@ -884,6 +885,7 @@ CONFIG_LIST=" · 697 unmodified lines
884 libvorbis885 libvorbis
885 libvpx886 libvpx
886 libx264887 libx264
888 libxavs
887 libxvid889 libxvid
888 lpc890 lpc
889 lsp891 lsp
@@ -1318,6 +1320,7 @@ libvorbis_encoder_deps="libvorbis" · 428 unmodified lines
1318libvpx_decoder_deps="libvpx"1320libvpx_decoder_deps="libvpx"
1319libvpx_encoder_deps="libvpx"1321libvpx_encoder_deps="libvpx"
1320libx264_encoder_deps="libx264"1322libx264_encoder_deps="libx264"
1323libxavs_encoder_deps="libxavs"
1321libxvid_encoder_deps="libxvid"1324libxvid_encoder_deps="libxvid"
1322 1325
1323# demuxers / muxers1326# demuxers / muxers
@@ -2371,6 +2374,7 @@ die_license_disabled() { · 1047 unmodified lines
2371}2374}
2372 2375
2373die_license_disabled gpl libx2642376die_license_disabled gpl libx264
2377die_license_disabled gpl libxavs
2374die_license_disabled gpl libxvid2378die_license_disabled gpl libxvid
2375die_license_disabled gpl postproc2379die_license_disabled gpl postproc
2376die_license_disabled gpl x11grab2380die_license_disabled gpl x11grab
@@ -2676,6 +2680,7 @@ enabled libvpx && { check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec · 299 unmodified lines
2676enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&2680enabled libx264 && require libx264 x264.h x264_encoder_encode -lx264 &&
2677 { check_cpp_condition x264.h "X264_BUILD >= 98" ||2681 { check_cpp_condition x264.h "X264_BUILD >= 98" ||
2678 die "ERROR: libx264 version must be >= 0.98."; }2682 die "ERROR: libx264 version must be >= 0.98."; }
2683enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs
2679enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore2684enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore
2680enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib2685enabled mlib && require mediaLib mlib_types.h mlib_VectorSub_S16_U8_Mod -lmlib
2681 2686
@@ -2948,6 +2953,7 @@ echo "libtheora enabled ${libtheora-no}" · 266 unmodified lines
2948echo "libvorbis enabled ${libvorbis-no}"2953echo "libvorbis enabled ${libvorbis-no}"
2949echo "libvpx enabled ${libvpx-no}"2954echo "libvpx enabled ${libvpx-no}"
2950echo "libx264 enabled ${libx264-no}"2955echo "libx264 enabled ${libx264-no}"
2956echo "libxavs enabled ${libxavs-no}"
2951echo "libxvid enabled ${libxvid-no}"2957echo "libxvid enabled ${libxvid-no}"
2952echo "zlib enabled ${zlib-no}"2958echo "zlib enabled ${zlib-no}"
2953echo "bzlib enabled ${bzlib-no}"2959echo "bzlib enabled ${bzlib-no}"
doc/general.texi+3−3
@@ -156,7 +156,7 @@ library: · 155 unmodified lines
156@item QCP @tab @tab X156@item QCP @tab @tab X
157@item raw ADTS (AAC) @tab X @tab X157@item raw ADTS (AAC) @tab X @tab X
158@item raw AC-3 @tab X @tab X158@item raw AC-3 @tab X @tab X
159@item raw Chinese AVS video @tab @tab X159@item raw Chinese AVS video @tab X @tab X
160@item raw CRI ADX @tab X @tab X160@item raw CRI ADX @tab X @tab X
161@item raw Dirac @tab X @tab X161@item raw Dirac @tab X @tab X
162@item raw DNxHD @tab X @tab X162@item raw DNxHD @tab X @tab X
@@ -350,8 +350,8 @@ following image formats are supported: · 187 unmodified lines
350 @tab fourcc: CSCD350 @tab fourcc: CSCD
351@item CD+G @tab @tab X351@item CD+G @tab @tab X
352 @tab Video codec for CD+G karaoke disks352 @tab Video codec for CD+G karaoke disks
353@item Chinese AVS video @tab @tab X353@item Chinese AVS video @tab E @tab X
354 @tab AVS1-P2, JiZhun profile354 @tab AVS1-P2, JiZhun profile, encoding through external library libxavs
355@item Delphine Software International CIN video @tab @tab X355@item Delphine Software International CIN video @tab @tab X
356 @tab Codec used in Delphine Software International games.356 @tab Codec used in Delphine Software International games.
357@item Cinepak @tab @tab X357@item Cinepak @tab @tab X
libavcodec/Makefile+1−0
@@ -548,6 +548,7 @@ OBJS-$(CONFIG_LIBVORBIS_ENCODER) += libvorbis.o vorbis_data.o · 547 unmodified lines
548OBJS-$(CONFIG_LIBVPX_DECODER) += libvpxdec.o548OBJS-$(CONFIG_LIBVPX_DECODER) += libvpxdec.o
549OBJS-$(CONFIG_LIBVPX_ENCODER) += libvpxenc.o549OBJS-$(CONFIG_LIBVPX_ENCODER) += libvpxenc.o
550OBJS-$(CONFIG_LIBX264_ENCODER) += libx264.o550OBJS-$(CONFIG_LIBX264_ENCODER) += libx264.o
551OBJS-$(CONFIG_LIBXAVS_ENCODER) += libxavs.o
551OBJS-$(CONFIG_LIBXVID) += libxvidff.o libxvid_rc.o552OBJS-$(CONFIG_LIBXVID) += libxvidff.o libxvid_rc.o
552 553
553# parsers554# parsers
libavcodec/allcodecs.c+1−0
@@ -356,6 +356,7 @@ void avcodec_register_all(void) · 355 unmodified lines
356 REGISTER_ENCODER (LIBVORBIS, libvorbis);356 REGISTER_ENCODER (LIBVORBIS, libvorbis);
357 REGISTER_ENCDEC (LIBVPX, libvpx);357 REGISTER_ENCDEC (LIBVPX, libvpx);
358 REGISTER_ENCODER (LIBX264, libx264);358 REGISTER_ENCODER (LIBX264, libx264);
359 REGISTER_ENCODER (LIBXAVS, libxavs);
359 REGISTER_ENCODER (LIBXVID, libxvid);360 REGISTER_ENCODER (LIBXVID, libxvid);
360 361
361 /* parsers */362 /* parsers */
libavcodec/libxavs.c+351−0
@@ -0,0 +1,351 @@
1/*
2 * AVS encoding using the xavs library
3 * Copyright (C) 2010 Amanda, Y.N. Wu <amanda11192003@gmail.com>
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#include <stdio.h>
23#include <stdlib.h>
24#include <string.h>
25#include <math.h>
26#include <stdint.h>
27#include <xavs.h>
28#include "avcodec.h"
29
30#define END_OF_STREAM 0x001
31
32#define XAVS_PART_I8X8 0x002 /* Analyze i8x8 (requires 8x8 transform) */
33#define XAVS_PART_P8X8 0x010 /* Analyze p16x8, p8x16 and p8x8 */
34#define XAVS_PART_B8X8 0x100 /* Analyze b16x8, b*/
35
36typedef struct XavsContext {
37 xavs_param_t params;
38 xavs_t *enc;
39 xavs_picture_t pic;
40 uint8_t *sei;
41 int sei_size;
42 AVFrame out_pic;
43 int end_of_stream;
44} XavsContext;
45
46static void XAVS_log(void *p, int level, const char *fmt, va_list args)
47{
48 static const int level_map[] = {
49 [XAVS_LOG_ERROR] = AV_LOG_ERROR,
50 [XAVS_LOG_WARNING] = AV_LOG_WARNING,
51 [XAVS_LOG_INFO] = AV_LOG_INFO,
52 [XAVS_LOG_DEBUG] = AV_LOG_DEBUG
53 };
54
55 if (level < 0 || level > XAVS_LOG_DEBUG)
56 return;
57
58 av_vlog(p, level_map[level], fmt, args);
59}
60
61static int encode_nals(AVCodecContext *ctx, uint8_t *buf,
62 int size, xavs_nal_t *nals,
63 int nnal, int skip_sei)
64{
65 XavsContext *x4 = ctx->priv_data;
66 uint8_t *p = buf;
67 int i, s;
68
69 /* Write the SEI as part of the first frame. */
70 if (x4->sei_size > 0 && nnal > 0) {
71 memcpy(p, x4->sei, x4->sei_size);
72 p += x4->sei_size;
73 x4->sei_size = 0;
74 }
75
76 for (i = 0; i < nnal; i++) {
77 /* Don't put the SEI in extradata. */
78 if (skip_sei && nals[i].i_type == NAL_SEI) {
79 x4->sei = av_malloc( 5 + nals[i].i_payload * 4 / 3 );
80 if (xavs_nal_encode(x4->sei, &x4->sei_size, 1, nals + i) < 0)
81 return -1;
82
83 continue;
84 }
85 s = xavs_nal_encode(p, &size, 1, nals + i);
86 if (s < 0)
87 return -1;
88 p += s;
89 }
90
91 return p - buf;
92}
93
94static int XAVS_frame(AVCodecContext *ctx, uint8_t *buf,
95 int bufsize, void *data)
96{
97 XavsContext *x4 = ctx->priv_data;
98 AVFrame *frame = data;
99 xavs_nal_t *nal;
100 int nnal, i;
101 xavs_picture_t pic_out;
102
103 x4->pic.img.i_csp = XAVS_CSP_I420;
104 x4->pic.img.i_plane = 3;
105
106 if (frame) {
107 for (i = 0; i < 3; i++) {
108 x4->pic.img.plane[i] = frame->data[i];
109 x4->pic.img.i_stride[i] = frame->linesize[i];
110 }
111
112 x4->pic.i_pts = frame->pts;
113 x4->pic.i_type = XAVS_TYPE_AUTO;
114 }
115
116 if (xavs_encoder_encode(x4->enc, &nal, &nnal,
117 frame? &x4->pic: NULL, &pic_out) < 0)
118 return -1;
119
120 bufsize = encode_nals(ctx, buf, bufsize, nal, nnal, 0);
121
122 if (bufsize < 0)
123 return -1;
124
125 if (!bufsize && !frame && !(x4->end_of_stream)){
126 buf[bufsize] = 0x0;
127 buf[bufsize+1] = 0x0;
128 buf[bufsize+2] = 0x01;
129 buf[bufsize+3] = 0xb1;
130 bufsize += 4;
131 x4->end_of_stream = END_OF_STREAM;
132 return bufsize;
133 }
134 /* FIXME: libxavs now provides DTS */
135 /* but AVFrame doesn't have a field for it. */
136 x4->out_pic.pts = pic_out.i_pts;
137
138 switch (pic_out.i_type) {
139 case XAVS_TYPE_IDR:
140 case XAVS_TYPE_I:
141 x4->out_pic.pict_type = FF_I_TYPE;
142 break;
143 case XAVS_TYPE_P:
144 x4->out_pic.pict_type = FF_P_TYPE;
145 break;
146 case XAVS_TYPE_B:
147 case XAVS_TYPE_BREF:
148 x4->out_pic.pict_type = FF_B_TYPE;
149 break;
150 }
151
152 /* There is no IDR frame in AVS JiZhun */
153 /* Sequence header is used as a flag */
154 x4->out_pic.key_frame = pic_out.i_type == XAVS_TYPE_I;
155
156 x4->out_pic.quality = (pic_out.i_qpplus1 - 1) * FF_QP2LAMBDA;
157
158 return bufsize;
159}
160
161static av_cold int XAVS_close(AVCodecContext *avctx)
162{
163 XavsContext *x4 = avctx->priv_data;
164
165 av_freep(&avctx->extradata);
166 av_free(x4->sei);
167
168 if (x4->enc)
169 xavs_encoder_close(x4->enc);
170
171 return 0;
172}
173
174static av_cold int XAVS_init(AVCodecContext *avctx)
175{
176 XavsContext *x4 = avctx->priv_data;
177
178 x4->sei_size = 0;
179 xavs_param_default(&x4->params);
180
181 x4->params.pf_log = XAVS_log;
182 x4->params.p_log_private = avctx;
183 x4->params.i_keyint_max = avctx->gop_size;
184 x4->params.rc.i_bitrate = avctx->bit_rate / 1000;
185 x4->params.rc.i_vbv_buffer_size = avctx->rc_buffer_size / 1000;
186 x4->params.rc.i_vbv_max_bitrate = avctx->rc_max_rate / 1000;
187 x4->params.rc.b_stat_write = avctx->flags & CODEC_FLAG_PASS1;
188 if (avctx->flags & CODEC_FLAG_PASS2) {
189 x4->params.rc.b_stat_read = 1;
190 } else {
191 if (avctx->crf) {
192 x4->params.rc.i_rc_method = XAVS_RC_CRF;
193 x4->params.rc.f_rf_constant = avctx->crf;
194 } else if (avctx->cqp > -1) {
195 x4->params.rc.i_rc_method = XAVS_RC_CQP;
196 x4->params.rc.i_qp_constant = avctx->cqp;
197 }
198 }
199
200 /* if neither crf nor cqp modes are selected we have to enable the RC */
201 /* we do it this way because we cannot check if the bitrate has been set */
202 if (!(avctx->crf || (avctx->cqp > -1)))
203 x4->params.rc.i_rc_method = XAVS_RC_ABR;
204
205 x4->params.i_bframe = avctx->max_b_frames;
206 /* cabac is not included in AVS JiZhun Profile */
207 x4->params.b_cabac = 0;
208
209 x4->params.i_bframe_adaptive = avctx->b_frame_strategy;
210 x4->params.i_bframe_bias = avctx->bframebias;
211
212 avctx->has_b_frames = !!avctx->max_b_frames;
213
214 /* AVS doesn't allow B picture as reference */
215 /* The max allowed reference frame number of B is 2 */
216 x4->params.i_keyint_min = avctx->keyint_min;
217 if (x4->params.i_keyint_min > x4->params.i_keyint_max)
218 x4->params.i_keyint_min = x4->params.i_keyint_max;
219
220 x4->params.i_scenecut_threshold = avctx->scenechange_threshold;
221
222 // x4->params.b_deblocking_filter = avctx->flags & CODEC_FLAG_LOOP_FILTER;
223 x4->params.i_deblocking_filter_alphac0 = avctx->deblockalpha;
224 x4->params.i_deblocking_filter_beta = avctx->deblockbeta;
225
226 x4->params.rc.i_qp_min = avctx->qmin;
227 x4->params.rc.i_qp_max = avctx->qmax;
228 x4->params.rc.i_qp_step = avctx->max_qdiff;
229
230 x4->params.rc.f_qcompress = avctx->qcompress; /* 0.0 => cbr, 1.0 => constant qp */
231 x4->params.rc.f_qblur = avctx->qblur; /* temporally blur quants */
232 x4->params.rc.f_complexity_blur = avctx->complexityblur;
233
234 x4->params.i_frame_reference = avctx->refs;
235
236 x4->params.i_width = avctx->width;
237 x4->params.i_height = avctx->height;
238 x4->params.vui.i_sar_width = avctx->sample_aspect_ratio.num;
239 x4->params.vui.i_sar_height = avctx->sample_aspect_ratio.den;
240 /* This is only used for counting the fps */
241 x4->params.i_fps_num = avctx->time_base.den;
242 x4->params.i_fps_den = avctx->time_base.num;
243 x4->params.analyse.inter = XAVS_ANALYSE_I8x8 |XAVS_ANALYSE_PSUB16x16| XAVS_ANALYSE_BSUB16x16;
244 if (avctx->partitions) {
245 if (avctx->partitions & XAVS_PART_I8X8)
246 x4->params.analyse.inter |= XAVS_ANALYSE_I8x8;
247
248 if (avctx->partitions & XAVS_PART_P8X8)
249 x4->params.analyse.inter |= XAVS_ANALYSE_PSUB16x16;
250
251 if (avctx->partitions & XAVS_PART_B8X8)
252 x4->params.analyse.inter |= XAVS_ANALYSE_BSUB16x16;
253 }
254
255 x4->params.analyse.i_direct_mv_pred = avctx->directpred;
256
257 x4->params.analyse.b_weighted_bipred = avctx->flags2 & CODEC_FLAG2_WPRED;
258
259 switch (avctx->me_method) {
260 case ME_EPZS:
261 x4->params.analyse.i_me_method = XAVS_ME_DIA;
262 break;
263 case ME_HEX:
264 x4->params.analyse.i_me_method = XAVS_ME_HEX;
265 break;
266 case ME_UMH:
267 x4->params.analyse.i_me_method = XAVS_ME_UMH;
268 break;
269 case ME_FULL:
270 x4->params.analyse.i_me_method = XAVS_ME_ESA;
271 break;
272 case ME_TESA:
273 x4->params.analyse.i_me_method = XAVS_ME_TESA;
274 break;
275 default:
276 x4->params.analyse.i_me_method = XAVS_ME_HEX;
277 }
278
279 x4->params.analyse.i_me_range = avctx->me_range;
280 x4->params.analyse.i_subpel_refine = avctx->me_subpel_quality;
281
282 x4->params.analyse.b_mixed_references = avctx->flags2 & CODEC_FLAG2_MIXED_REFS;
283 x4->params.analyse.b_chroma_me = avctx->me_cmp & FF_CMP_CHROMA;
284 /* AVS P2 only enables 8x8 transform */
285 x4->params.analyse.b_transform_8x8 = 1; //avctx->flags2 & CODEC_FLAG2_8X8DCT;
286 x4->params.analyse.b_fast_pskip = avctx->flags2 & CODEC_FLAG2_FASTPSKIP;
287
288 x4->params.analyse.i_trellis = avctx->trellis;
289 x4->params.analyse.i_noise_reduction = avctx->noise_reduction;
290
291 if (avctx->level > 0)
292 x4->params.i_level_idc = avctx->level;
293
294 x4->params.rc.f_rate_tolerance =
295 (float)avctx->bit_rate_tolerance/avctx->bit_rate;
296
297 if ((avctx->rc_buffer_size) &&
298 (avctx->rc_initial_buffer_occupancy <= avctx->rc_buffer_size)) {
299 x4->params.rc.f_vbv_buffer_init =
300 (float)avctx->rc_initial_buffer_occupancy / avctx->rc_buffer_size;
301 } else
302 x4->params.rc.f_vbv_buffer_init = 0.9;
303
304 /* TAG:do we have MB tree RC method */
305 /* what is the RC method we are now using? Default NO */
306 x4->params.rc.b_mb_tree = !!(avctx->flags2 & CODEC_FLAG2_MBTREE);
307 x4->params.rc.f_ip_factor = 1 / fabs(avctx->i_quant_factor);
308 x4->params.rc.f_pb_factor = avctx->b_quant_factor;
309 x4->params.analyse.i_chroma_qp_offset = avctx->chromaoffset;
310
311 x4->params.analyse.b_psnr = avctx->flags & CODEC_FLAG_PSNR;
312 x4->params.i_log_level = XAVS_LOG_DEBUG;
313 x4->params.b_aud = avctx->flags2 & CODEC_FLAG2_AUD;
314 x4->params.i_threads = avctx->thread_count;
315 x4->params.b_interlaced = avctx->flags & CODEC_FLAG_INTERLACED_DCT;
316
317 if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER)
318 x4->params.b_repeat_headers = 0;
319
320 x4->enc = xavs_encoder_open(&x4->params);
321 if (!x4->enc)
322 return -1;
323
324 avctx->coded_frame = &x4->out_pic;
325 /* TAG: Do we have GLOBAL HEADER in AVS */
326 /* We Have PPS and SPS in AVS */
327 if (avctx->flags & CODEC_FLAG_GLOBAL_HEADER) {
328 xavs_nal_t *nal;
329 int nnal, s;
330
331 s = xavs_encoder_headers(x4->enc, &nal, &nnal);
332
333 avctx->extradata = av_malloc(s);
334 avctx->extradata_size = encode_nals(avctx, avctx->extradata, s, nal, nnal, 1);
335 }
336 return 0;
337}
338
339AVCodec libxavs_encoder = {
340 .name = "libxavs",
341 .type = CODEC_TYPE_VIDEO,
342 .id = CODEC_ID_CAVS,
343 .priv_data_size = sizeof(XavsContext),
344 .init = XAVS_init,
345 .encode = XAVS_frame,
346 .close = XAVS_close,
347 .capabilities = CODEC_CAP_DELAY,
348 .pix_fmts = (const enum PixelFormat[]) { PIX_FMT_YUV420P, PIX_FMT_NONE },
349 .long_name = NULL_IF_CONFIG_SMALL("libxavs - the Chinese Audio Video Standard Encoder"),
350};
351
libavformat/allformats.c+1−1
@@ -69,7 +69,7 @@ void av_register_all(void) · 68 unmodified lines
69 REGISTER_DEMUXER (BINK, bink);69 REGISTER_DEMUXER (BINK, bink);
70 REGISTER_DEMUXER (C93, c93);70 REGISTER_DEMUXER (C93, c93);
71 REGISTER_DEMUXER (CAF, caf);71 REGISTER_DEMUXER (CAF, caf);
72 REGISTER_DEMUXER (CAVSVIDEO, cavsvideo);72 REGISTER_MUXDEMUX (CAVSVIDEO, cavsvideo);
73 REGISTER_DEMUXER (CDG, cdg);73 REGISTER_DEMUXER (CDG, cdg);
74 REGISTER_MUXER (CRC, crc);74 REGISTER_MUXER (CRC, crc);
75 REGISTER_MUXDEMUX (DAUD, daud);75 REGISTER_MUXDEMUX (DAUD, daud);
libavformat/raw.c+16−0
@@ -981,6 +981,22 @@ AVOutputFormat h264_muxer = { · 980 unmodified lines
981};981};
982#endif982#endif
983 983
984#if CONFIG_CAVSVIDEO_MUXER
985AVOutputFormat cavsvideo_muxer = {
986 "cavsvideo",
987 NULL_IF_CONFIG_SMALL("raw Chinese AVS video"),
988 NULL,
989 "cavs",
990 0,
991 CODEC_ID_NONE,
992 CODEC_ID_CAVS,
993 NULL,
994 raw_write_packet,
995 .flags= AVFMT_NOTIMESTAMPS,
996 .extensions = "avs",
997};
998#endif
999
984#if CONFIG_INGENIENT_DEMUXER1000#if CONFIG_INGENIENT_DEMUXER
985AVInputFormat ingenient_demuxer = {1001AVInputFormat ingenient_demuxer = {
986 "ingenient",1002 "ingenient",

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