annotate libdiracenc.c @ 6920:d02af7474bff libavcodec

Prevent 128*1<<trellis from becoming 0 and creating 0 sized arrays. fixes CID84 RUN2 CID85 RUN2 CID86 RUN2 CID87 RUN2 CID88 RUN2 CID89 RUN2 CID90 RUN2 CID91 RUN2 CID92 RUN2 CID93 RUN2 CID94 RUN2 CID95 RUN2 CID96 RUN2 CID97 RUN2 CID98 RUN2 CID99 RUN2 CID100 RUN2 CID101 RUN2 CID102 RUN2 CID103 RUN2 CID104 RUN2 CID105 RUN2 CID106 RUN2
author michael
date Wed, 28 May 2008 11:59:41 +0000
parents 43bede126ef6
children e943e1409077
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
1 /*
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
2 * Dirac encoding support via libdirac library
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
3 * Copyright (c) 2005 BBC, Andrew Kennedy <dirac at rd dot bbc dot co dot uk>
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
4 * Copyright (c) 2006-2008 BBC, Anuradha Suraparaju <asuraparaju at gmail dot com >
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
5 *
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
6 * This file is part of FFmpeg.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
7 *
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
12 *
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
16 * Lesser General Public License for more details.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
17 *
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
21 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
22
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
23 /**
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
24 * @file libdiracenc.c
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
25 * Dirac encoding support via libdirac library; more details about the
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
26 * Dirac project can be found at http://dirac.sourceforge.net/.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
27 * The libdirac_encoder library implements Dirac specification version 2.2
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
28 * (http://dirac.sourceforge.net/specification.html).
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
29 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
30
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
31 #include "libdirac_libschro.h"
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
32 #include "libdirac.h"
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
33
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
34 #undef NDEBUG
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
35 #include <assert.h>
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
36
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
37
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
38 #include <libdirac_encoder/dirac_encoder.h>
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
39
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
40 /** Dirac encoder private data */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
41 typedef struct FfmpegDiracEncoderParams
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
42 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
43 /** Dirac encoder context */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
44 dirac_encoder_context_t enc_ctx;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
45
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
46 /** frame being encoded */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
47 AVFrame picture;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
48
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
49 /** frame size */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
50 int frame_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
51
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
52 /** Dirac encoder handle */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
53 dirac_encoder_t* p_encoder;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
54
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
55 /** input frame buffer */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
56 unsigned char *p_in_frame_buf;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
57
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
58 /** queue storing encoded frames */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
59 FfmpegDiracSchroQueue enc_frame_queue;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
60
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
61 /** end of sequence signalled by user, 0 - false, 1 - true */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
62 int eos_signalled;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
63
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
64 /** end of sequence returned by encoder, 0 - false, 1 - true */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
65 int eos_pulled;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
66 } FfmpegDiracEncoderParams;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
67
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
68 /**
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
69 * Works out Dirac-compatible chroma format.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
70 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
71 static dirac_chroma_t GetDiracChromaFormat(enum PixelFormat ff_pix_fmt)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
72 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
73 int num_formats = sizeof(ffmpeg_dirac_pixel_format_map) /
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
74 sizeof(ffmpeg_dirac_pixel_format_map[0]);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
75 int idx;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
76
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
77 for (idx = 0; idx < num_formats; ++idx) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
78 if (ffmpeg_dirac_pixel_format_map[idx].ff_pix_fmt == ff_pix_fmt) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
79 return ffmpeg_dirac_pixel_format_map[idx].dirac_pix_fmt;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
80 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
81 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
82 return formatNK;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
83 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
84
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
85 /**
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
86 * Dirac video preset table. Ensure that this tables matches up correctly
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
87 * with the ff_dirac_schro_video_format_info table in libdirac_libschro.c.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
88 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
89 static const VideoFormat ff_dirac_video_formats[]={
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
90 VIDEO_FORMAT_CUSTOM ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
91 VIDEO_FORMAT_QSIF525 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
92 VIDEO_FORMAT_QCIF ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
93 VIDEO_FORMAT_SIF525 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
94 VIDEO_FORMAT_CIF ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
95 VIDEO_FORMAT_4SIF525 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
96 VIDEO_FORMAT_4CIF ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
97 VIDEO_FORMAT_SD_480I60 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
98 VIDEO_FORMAT_SD_576I50 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
99 VIDEO_FORMAT_HD_720P60 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
100 VIDEO_FORMAT_HD_720P50 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
101 VIDEO_FORMAT_HD_1080I60 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
102 VIDEO_FORMAT_HD_1080I50 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
103 VIDEO_FORMAT_HD_1080P60 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
104 VIDEO_FORMAT_HD_1080P50 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
105 VIDEO_FORMAT_DIGI_CINEMA_2K24 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
106 VIDEO_FORMAT_DIGI_CINEMA_4K24 ,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
107 };
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
108
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
109 /**
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
110 * Returns the video format preset matching the input video dimensions and
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
111 * time base.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
112 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
113 static VideoFormat GetDiracVideoFormatPreset (AVCodecContext *avccontext)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
114 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
115 unsigned int num_formats = sizeof(ff_dirac_video_formats) /
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
116 sizeof(ff_dirac_video_formats[0]);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
117
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
118 unsigned int idx = ff_dirac_schro_get_video_format_idx (avccontext);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
119
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
120 return (idx < num_formats) ?
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
121 ff_dirac_video_formats[idx] : VIDEO_FORMAT_CUSTOM;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
122 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
123
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
124 static int libdirac_encode_init(AVCodecContext *avccontext)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
125 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
126
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
127 FfmpegDiracEncoderParams* p_dirac_params = avccontext->priv_data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
128 int no_local = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
129 int verbose = avccontext->debug;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
130 VideoFormat preset;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
131
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
132 /* get Dirac preset */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
133 preset = GetDiracVideoFormatPreset(avccontext);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
134
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
135 /* initialize the encoder context */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
136 dirac_encoder_context_init (&(p_dirac_params->enc_ctx), preset);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
137
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
138 p_dirac_params->enc_ctx.src_params.chroma =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
139 GetDiracChromaFormat(avccontext->pix_fmt);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
140
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
141 if (p_dirac_params->enc_ctx.src_params.chroma == formatNK) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
142 av_log (avccontext, AV_LOG_ERROR,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
143 "Unsupported pixel format %d. This codec supports only "
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
144 "Planar YUV formats (yuv420p, yuv422p, yuv444p\n",
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
145 avccontext->pix_fmt);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
146 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
147 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
148
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
149 p_dirac_params->enc_ctx.src_params.frame_rate.numerator =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
150 avccontext->time_base.den;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
151 p_dirac_params->enc_ctx.src_params.frame_rate.denominator =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
152 avccontext->time_base.num;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
153
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
154 p_dirac_params->enc_ctx.src_params.width = avccontext->width;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
155 p_dirac_params->enc_ctx.src_params.height = avccontext->height;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
156
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
157 p_dirac_params->frame_size = avpicture_get_size(avccontext->pix_fmt,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
158 avccontext->width,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
159 avccontext->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
160
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
161 avccontext->coded_frame = &p_dirac_params->picture;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
162
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
163 if (no_local) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
164 p_dirac_params->enc_ctx.decode_flag = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
165 p_dirac_params->enc_ctx.instr_flag = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
166 } else {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
167 p_dirac_params->enc_ctx.decode_flag = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
168 p_dirac_params->enc_ctx.instr_flag = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
169 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
170
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
171 /* Intra-only sequence */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
172 if (avccontext->gop_size == 0 )
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
173 p_dirac_params->enc_ctx.enc_params.num_L1 = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
174 else
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
175 avccontext->has_b_frames = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
176
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
177 if (avccontext->flags & CODEC_FLAG_QSCALE) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
178 if (avccontext->global_quality != 0) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
179 p_dirac_params->enc_ctx.enc_params.qf =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
180 avccontext->global_quality / (FF_QP2LAMBDA*10.0);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
181 /* if it is not default bitrate then send target rate. */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
182 if (avccontext->bit_rate >= 1000 &&
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
183 avccontext->bit_rate != 200000) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
184 p_dirac_params->enc_ctx.enc_params.trate =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
185 avccontext->bit_rate / 1000;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
186 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
187 } else
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
188 p_dirac_params->enc_ctx.enc_params.lossless = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
189 } else if (avccontext->bit_rate >= 1000)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
190 p_dirac_params->enc_ctx.enc_params.trate = avccontext->bit_rate / 1000;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
191
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
192 if ((preset > VIDEO_FORMAT_QCIF || preset < VIDEO_FORMAT_QSIF525) &&
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
193 avccontext->bit_rate == 200000) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
194 p_dirac_params->enc_ctx.enc_params.trate = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
195 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
196
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
197 if (avccontext->flags & CODEC_FLAG_INTERLACED_ME) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
198 /* all material can be coded as interlaced or progressive
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
199 * irrespective of the type of source material */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
200 p_dirac_params->enc_ctx.enc_params.picture_coding_mode = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
201 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
202
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
203 p_dirac_params->p_encoder = dirac_encoder_init (&(p_dirac_params->enc_ctx),
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
204 verbose );
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
205
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
206 if (!p_dirac_params->p_encoder) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
207 av_log(avccontext, AV_LOG_ERROR,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
208 "Unrecoverable Error: dirac_encoder_init failed. ");
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
209 return EXIT_FAILURE;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
210 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
211
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
212 /* allocate enough memory for the incoming data */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
213 p_dirac_params->p_in_frame_buf = av_malloc(p_dirac_params->frame_size);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
214
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
215 /* initialize the encoded frame queue */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
216 ff_dirac_schro_queue_init(&p_dirac_params->enc_frame_queue);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
217
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
218 return 0 ;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
219 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
220
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
221 static void DiracFreeFrame (void *data)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
222 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
223 FfmpegDiracSchroEncodedFrame *enc_frame = data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
224
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
225 av_freep (&(enc_frame->p_encbuf));
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
226 av_free(enc_frame);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
227 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
228
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
229 static int libdirac_encode_frame(AVCodecContext *avccontext,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
230 unsigned char *frame,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
231 int buf_size, void *data)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
232 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
233 int enc_size = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
234 dirac_encoder_state_t state;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
235 FfmpegDiracEncoderParams* p_dirac_params = avccontext->priv_data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
236 FfmpegDiracSchroEncodedFrame* p_frame_output = NULL;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
237 FfmpegDiracSchroEncodedFrame* p_next_output_frame = NULL;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
238 int go = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
239
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
240 if (data == NULL) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
241 /* push end of sequence if not already signalled */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
242 if (!p_dirac_params->eos_signalled) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
243 dirac_encoder_end_sequence( p_dirac_params->p_encoder );
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
244 p_dirac_params->eos_signalled = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
245 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
246 } else {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
247
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
248 /* Allocate frame data to Dirac input buffer.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
249 * Input line size may differ from what the codec supports,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
250 * especially when transcoding from one format to another.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
251 * So use avpicture_layout to copy the frame. */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
252 avpicture_layout ((AVPicture *)data, avccontext->pix_fmt,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
253 avccontext->width, avccontext->height,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
254 p_dirac_params->p_in_frame_buf,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
255 p_dirac_params->frame_size);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
256
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
257 /* load next frame */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
258 if (dirac_encoder_load (p_dirac_params->p_encoder,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
259 p_dirac_params->p_in_frame_buf,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
260 p_dirac_params->frame_size ) < 0) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
261 av_log(avccontext, AV_LOG_ERROR, "Unrecoverable Encoder Error."
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
262 " dirac_encoder_load failed...\n");
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
263 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
264 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
265 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
266
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
267 if (p_dirac_params->eos_pulled)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
268 go = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
269
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
270 while(go) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
271 p_dirac_params->p_encoder->enc_buf.buffer = frame;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
272 p_dirac_params->p_encoder->enc_buf.size = buf_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
273 /* process frame */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
274 state = dirac_encoder_output ( p_dirac_params->p_encoder );
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
275
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
276 switch (state)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
277 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
278 case ENC_STATE_AVAIL:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
279 case ENC_STATE_EOS:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
280 assert (p_dirac_params->p_encoder->enc_buf.size > 0);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
281 /* create output frame */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
282 p_frame_output = av_mallocz(sizeof(FfmpegDiracSchroEncodedFrame));
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
283 /* set output data */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
284 p_frame_output->p_encbuf =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
285 av_malloc(p_dirac_params->p_encoder->enc_buf.size);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
286
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
287 memcpy(p_frame_output->p_encbuf,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
288 p_dirac_params->p_encoder->enc_buf.buffer,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
289 p_dirac_params->p_encoder->enc_buf.size);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
290
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
291 p_frame_output->size = p_dirac_params->p_encoder->enc_buf.size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
292
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
293 p_frame_output->frame_num =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
294 p_dirac_params->p_encoder->enc_pparams.pnum;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
295
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
296 if (p_dirac_params->p_encoder->enc_pparams.ptype == INTRA_PICTURE &&
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
297 p_dirac_params->p_encoder->enc_pparams.rtype == REFERENCE_PICTURE)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
298 p_frame_output->key_frame = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
299
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
300 ff_dirac_schro_queue_push_back (&p_dirac_params->enc_frame_queue,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
301 p_frame_output);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
302
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
303 if (state == ENC_STATE_EOS) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
304 p_dirac_params->eos_pulled = 1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
305 go = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
306 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
307 break;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
308
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
309 case ENC_STATE_BUFFER:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
310 go = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
311 break;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
312
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
313 case ENC_STATE_INVALID:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
314 av_log(avccontext, AV_LOG_ERROR,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
315 "Unrecoverable Dirac Encoder Error. Quitting...\n");
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
316 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
317
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
318 default:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
319 av_log(avccontext, AV_LOG_ERROR, "Unknown Dirac Encoder state\n");
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
320 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
321 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
322 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
323
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
324 /* copy 'next' frame in queue */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
325 p_next_output_frame =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
326 ff_dirac_schro_queue_pop(&p_dirac_params->enc_frame_queue);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
327
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
328 if (p_next_output_frame == NULL)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
329 return 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
330
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
331 memcpy(frame, p_next_output_frame->p_encbuf, p_next_output_frame->size);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
332 avccontext->coded_frame->key_frame = p_next_output_frame->key_frame;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
333 /* Use the frame number of the encoded frame as the pts. It is OK to do
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
334 * so since Dirac is a constant framerate codec. It expects input to be
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
335 * of constant framerate. */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
336 avccontext->coded_frame->pts = p_next_output_frame->frame_num;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
337 enc_size = p_next_output_frame->size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
338
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
339 /* free frame */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
340 DiracFreeFrame(p_next_output_frame);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
341
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
342 return enc_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
343 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
344
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
345 static int libdirac_encode_close(AVCodecContext *avccontext)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
346 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
347 FfmpegDiracEncoderParams* p_dirac_params = avccontext->priv_data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
348
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
349 /* close the encoder */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
350 dirac_encoder_close(p_dirac_params->p_encoder );
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
351
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
352 /* free data in the output frame queue */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
353 ff_dirac_schro_queue_free(&p_dirac_params->enc_frame_queue,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
354 DiracFreeFrame);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
355
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
356 /* free the input frame buffer */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
357 av_freep(&p_dirac_params->p_in_frame_buf);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
358
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
359 return 0 ;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
360 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
361
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
362
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
363 AVCodec libdirac_encoder = {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
364 "libdirac",
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
365 CODEC_TYPE_VIDEO,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
366 CODEC_ID_DIRAC,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
367 sizeof(FfmpegDiracEncoderParams),
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
368 libdirac_encode_init,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
369 libdirac_encode_frame,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
370 libdirac_encode_close,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
371 .capabilities= CODEC_CAP_DELAY,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
372 .pix_fmts= (enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_YUV444P, -1},
6819
43bede126ef6 missing codec long names by Stefano Sabatini, stefano.sabatini-lala poste it
diego
parents: 6734
diff changeset
373 .long_name= "libdirac Dirac 2.2",
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
374 } ;