annotate libschroedingerdec.c @ 12530:63edd10ad4bc libavcodec tip

Try to fix crashes introduced by r25218 r25218 made assumptions about the existence of past reference frames that weren't necessarily true.
author darkshikari
date Tue, 28 Sep 2010 09:06:22 +0000
parents ffb3668ff7af
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
1 /*
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
2 * Dirac decoder support via Schroedinger libraries
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
3 * Copyright (c) 2008 BBC, Anuradha Suraparaju <asuraparaju at gmail dot com >
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
4 *
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
5 * This file is part of FFmpeg.
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
6 *
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
7 * FFmpeg is free software; you can redistribute it and/or
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
8 * modify it under the terms of the GNU Lesser General Public
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
9 * License as published by the Free Software Foundation; either
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
10 * version 2.1 of the License, or (at your option) any later version.
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
11 *
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
12 * FFmpeg is distributed in the hope that it will be useful,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
15 * Lesser General Public License for more details.
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
16 *
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
17 * You should have received a copy of the GNU Lesser General Public
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
18 * License along with FFmpeg; if not, write to the Free Software
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
20 */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
21
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
22 /**
11644
7dd2a45249a9 Remove explicit filename from Doxygen @file commands.
diego
parents: 11560
diff changeset
23 * @file
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
24 * Dirac decoder support via libschroedinger-1.0 libraries. More details about
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
25 * the Schroedinger project can be found at http://www.diracvideo.org/.
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
26 * The library implements Dirac Specification Version 2.2.
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
27 * (http://dirac.sourceforge.net/specification.html).
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
28 */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
29
12376
7e9b2d528e59 Fix the compilation of some libavcodec/lib* files which were not
stefano
parents: 12372
diff changeset
30 #include "libavcore/imgutils.h"
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
31 #include "avcodec.h"
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
32 #include "libdirac_libschro.h"
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
33 #include "libschroedinger.h"
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
34
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
35 #undef NDEBUG
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
36 #include <assert.h>
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
37
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
38
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
39 #include <schroedinger/schro.h>
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
40 #include <schroedinger/schrodebug.h>
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
41 #include <schroedinger/schrovideoformat.h>
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
42
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
43 /** libschroedinger decoder private data */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
44 typedef struct FfmpegSchroDecoderParams {
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
45 /** Schroedinger video format */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
46 SchroVideoFormat *format;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
47
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
48 /** Schroedinger frame format */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
49 SchroFrameFormat frame_format;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
50
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
51 /** decoder handle */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
52 SchroDecoder* decoder;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
53
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
54 /** queue storing decoded frames */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
55 FfmpegDiracSchroQueue dec_frame_queue;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
56
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
57 /** end of sequence signalled */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
58 int eos_signalled;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
59
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
60 /** end of sequence pulled */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
61 int eos_pulled;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
62
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
63 /** decoded picture */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
64 AVPicture dec_pic;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
65 } FfmpegSchroDecoderParams;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
66
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
67 typedef struct FfmpegSchroParseUnitContext {
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
68 const uint8_t *buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
69 int buf_size;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
70 } FfmpegSchroParseUnitContext;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
71
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
72
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
73 static void libschroedinger_decode_buffer_free(SchroBuffer *schro_buf,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
74 void *priv);
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
75
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
76 static void FfmpegSchroParseContextInit(FfmpegSchroParseUnitContext *parse_ctx,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
77 const uint8_t *buf, int buf_size)
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
78 {
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
79 parse_ctx->buf = buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
80 parse_ctx->buf_size = buf_size;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
81 }
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
82
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
83 static SchroBuffer* FfmpegFindNextSchroParseUnit(FfmpegSchroParseUnitContext *parse_ctx)
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
84 {
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
85 SchroBuffer *enc_buf = NULL;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
86 int next_pu_offset = 0;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
87 unsigned char *in_buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
88
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
89 if (parse_ctx->buf_size < 13 ||
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
90 parse_ctx->buf[0] != 'B' ||
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
91 parse_ctx->buf[1] != 'B' ||
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
92 parse_ctx->buf[2] != 'C' ||
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
93 parse_ctx->buf[3] != 'D')
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
94 return NULL;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
95
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
96 next_pu_offset = (parse_ctx->buf[5] << 24) +
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
97 (parse_ctx->buf[6] << 16) +
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
98 (parse_ctx->buf[7] << 8) +
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
99 parse_ctx->buf[8];
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
100
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
101 if (next_pu_offset == 0 &&
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
102 SCHRO_PARSE_CODE_IS_END_OF_SEQUENCE(parse_ctx->buf[4]))
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
103 next_pu_offset = 13;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
104
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
105 if (next_pu_offset <= 0 || parse_ctx->buf_size < next_pu_offset)
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
106 return NULL;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
107
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
108 in_buf = av_malloc(next_pu_offset);
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
109 memcpy(in_buf, parse_ctx->buf, next_pu_offset);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
110 enc_buf = schro_buffer_new_with_data(in_buf, next_pu_offset);
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
111 enc_buf->free = libschroedinger_decode_buffer_free;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
112 enc_buf->priv = in_buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
113
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
114 parse_ctx->buf += next_pu_offset;
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
115 parse_ctx->buf_size -= next_pu_offset;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
116
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
117 return enc_buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
118 }
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
119
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
120 /**
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
121 * Returns FFmpeg chroma format.
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
122 */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
123 static enum PixelFormat GetFfmpegChromaFormat(SchroChromaFormat schro_pix_fmt)
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
124 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
125 int num_formats = sizeof(ffmpeg_schro_pixel_format_map) /
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
126 sizeof(ffmpeg_schro_pixel_format_map[0]);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
127 int idx;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
128
10056
646065f63290 Remove useless braces around if/for/while expressions.
diego
parents: 10055
diff changeset
129 for (idx = 0; idx < num_formats; ++idx)
646065f63290 Remove useless braces around if/for/while expressions.
diego
parents: 10055
diff changeset
130 if (ffmpeg_schro_pixel_format_map[idx].schro_pix_fmt == schro_pix_fmt)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
131 return ffmpeg_schro_pixel_format_map[idx].ff_pix_fmt;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
132 return PIX_FMT_NONE;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
133 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
134
9007
043574c5c153 Add missing av_cold in static init/close functions.
stefano
parents: 8718
diff changeset
135 static av_cold int libschroedinger_decode_init(AVCodecContext *avccontext)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
136 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
137
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
138 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
139 /* First of all, initialize our supporting libraries. */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
140 schro_init();
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
141
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
142 schro_debug_set_level(avccontext->debug);
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
143 p_schro_params->decoder = schro_decoder_new();
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
144 schro_decoder_set_skip_ratio(p_schro_params->decoder, 1);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
145
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
146 if (!p_schro_params->decoder)
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
147 return -1;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
148
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
149 /* Initialize the decoded frame queue. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
150 ff_dirac_schro_queue_init(&p_schro_params->dec_frame_queue);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
151 return 0;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
152 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
153
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
154 static void libschroedinger_decode_buffer_free(SchroBuffer *schro_buf,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
155 void *priv)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
156 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
157 av_freep(&priv);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
158 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
159
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
160 static void libschroedinger_decode_frame_free(void *frame)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
161 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
162 schro_frame_unref(frame);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
163 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
164
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
165 static void libschroedinger_handle_first_access_unit(AVCodecContext *avccontext)
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
166 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
167 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
168 SchroDecoder *decoder = p_schro_params->decoder;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
169
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
170 p_schro_params->format = schro_decoder_get_video_format(decoder);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
171
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
172 /* Tell FFmpeg about sequence details. */
12462
ffb3668ff7af Use new imgutils.h API names, fix deprecation warnings.
stefano
parents: 12376
diff changeset
173 if (av_image_check_size(p_schro_params->format->width, p_schro_params->format->height,
12372
914f484bb476 Remove use of the deprecated function avcodec_check_dimensions(), use
stefano
parents: 11644
diff changeset
174 0, avccontext) < 0) {
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
175 av_log(avccontext, AV_LOG_ERROR, "invalid dimensions (%dx%d)\n",
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
176 p_schro_params->format->width, p_schro_params->format->height);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
177 avccontext->height = avccontext->width = 0;
6754
7094ae690809 Do not return -1 from void functions.
cehoyos
parents: 6738
diff changeset
178 return;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
179 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
180 avccontext->height = p_schro_params->format->height;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
181 avccontext->width = p_schro_params->format->width;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
182 avccontext->pix_fmt = GetFfmpegChromaFormat(p_schro_params->format->chroma_format);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
183
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
184 if (ff_get_schro_frame_format(p_schro_params->format->chroma_format,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
185 &p_schro_params->frame_format) == -1) {
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
186 av_log(avccontext, AV_LOG_ERROR,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
187 "This codec currently only supports planar YUV 4:2:0, 4:2:2 "
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
188 "and 4:4:4 formats.\n");
6754
7094ae690809 Do not return -1 from void functions.
cehoyos
parents: 6738
diff changeset
189 return;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
190 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
191
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
192 avccontext->time_base.den = p_schro_params->format->frame_rate_numerator;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
193 avccontext->time_base.num = p_schro_params->format->frame_rate_denominator;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
194
10055
fdb318d12314 Simplify 'if' condition statements.
diego
parents: 9355
diff changeset
195 if (!p_schro_params->dec_pic.data[0])
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
196 avpicture_alloc(&p_schro_params->dec_pic,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
197 avccontext->pix_fmt,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
198 avccontext->width,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
199 avccontext->height);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
200 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
201
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
202 static int libschroedinger_decode_frame(AVCodecContext *avccontext,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
203 void *data, int *data_size,
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
204 AVPacket *avpkt)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
205 {
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
206 const uint8_t *buf = avpkt->data;
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
207 int buf_size = avpkt->size;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
208
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
209 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
210 SchroDecoder *decoder = p_schro_params->decoder;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
211 SchroVideoFormat *format;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
212 AVPicture *picture = data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
213 SchroBuffer *enc_buf;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
214 SchroFrame* frame;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
215 int state;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
216 int go = 1;
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
217 int outer = 1;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
218 FfmpegSchroParseUnitContext parse_ctx;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
219
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
220 *data_size = 0;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
221
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
222 FfmpegSchroParseContextInit(&parse_ctx, buf, buf_size);
10055
fdb318d12314 Simplify 'if' condition statements.
diego
parents: 9355
diff changeset
223 if (!buf_size) {
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
224 if (!p_schro_params->eos_signalled) {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
225 state = schro_decoder_push_end_of_stream(decoder);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
226 p_schro_params->eos_signalled = 1;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
227 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
228 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
229
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
230 /* Loop through all the individual parse units in the input buffer */
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
231 do {
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
232 if ((enc_buf = FfmpegFindNextSchroParseUnit(&parse_ctx))) {
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
233 /* Push buffer into decoder. */
8422
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7234
diff changeset
234 if (SCHRO_PARSE_CODE_IS_PICTURE(enc_buf->data[4]) &&
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7234
diff changeset
235 SCHRO_PARSE_CODE_NUM_REFS(enc_buf->data[4]) > 0)
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7234
diff changeset
236 avccontext->has_b_frames = 1;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
237 state = schro_decoder_push(decoder, enc_buf);
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
238 if (state == SCHRO_DECODER_FIRST_ACCESS_UNIT)
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
239 libschroedinger_handle_first_access_unit(avccontext);
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
240 go = 1;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
241 } else
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
242 outer = 0;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
243 format = p_schro_params->format;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
244
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
245 while (go) {
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
246 /* Parse data and process result. */
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
247 state = schro_decoder_wait(decoder);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
248 switch (state) {
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
249 case SCHRO_DECODER_FIRST_ACCESS_UNIT:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
250 libschroedinger_handle_first_access_unit(avccontext);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
251 break;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
252
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
253 case SCHRO_DECODER_NEED_BITS:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
254 /* Need more input data - stop iterating over what we have. */
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
255 go = 0;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
256 break;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
257
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
258 case SCHRO_DECODER_NEED_FRAME:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
259 /* Decoder needs a frame - create one and push it in. */
10061
09f2db2d7c90 Fix bug caused by difference in stride and picture width.
diego
parents: 10060
diff changeset
260 frame = ff_create_schro_frame(avccontext,
09f2db2d7c90 Fix bug caused by difference in stride and picture width.
diego
parents: 10060
diff changeset
261 p_schro_params->frame_format);
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
262 schro_decoder_add_output_picture(decoder, frame);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
263 break;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
264
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
265 case SCHRO_DECODER_OK:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
266 /* Pull a frame out of the decoder. */
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
267 frame = schro_decoder_pull(decoder);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
268
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
269 if (frame)
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
270 ff_dirac_schro_queue_push_back(&p_schro_params->dec_frame_queue,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
271 frame);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
272 break;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
273 case SCHRO_DECODER_EOS:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
274 go = 0;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
275 p_schro_params->eos_pulled = 1;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
276 schro_decoder_reset(decoder);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
277 outer = 0;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
278 break;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
279
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
280 case SCHRO_DECODER_ERROR:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
281 return -1;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
282 break;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
283 }
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
284 }
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
285 } while (outer);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
286
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
287 /* Grab next frame to be returned from the top of the queue. */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
288 frame = ff_dirac_schro_queue_pop(&p_schro_params->dec_frame_queue);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
289
10055
fdb318d12314 Simplify 'if' condition statements.
diego
parents: 9355
diff changeset
290 if (frame) {
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
291 memcpy(p_schro_params->dec_pic.data[0],
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
292 frame->components[0].data,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
293 frame->components[0].length);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
294
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
295 memcpy(p_schro_params->dec_pic.data[1],
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
296 frame->components[1].data,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
297 frame->components[1].length);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
298
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
299 memcpy(p_schro_params->dec_pic.data[2],
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
300 frame->components[2].data,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
301 frame->components[2].length);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
302
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
303 /* Fill picture with current buffer data from Schroedinger. */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
304 avpicture_fill(picture, p_schro_params->dec_pic.data[0],
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
305 avccontext->pix_fmt,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
306 avccontext->width, avccontext->height);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
307
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
308 *data_size = sizeof(AVPicture);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
309
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
310 /* Now free the frame resources. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
311 libschroedinger_decode_frame_free(frame);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
312 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
313 return buf_size;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
314 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
315
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
316
9007
043574c5c153 Add missing av_cold in static init/close functions.
stefano
parents: 8718
diff changeset
317 static av_cold int libschroedinger_decode_close(AVCodecContext *avccontext)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
318 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
319 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
320 /* Free the decoder. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
321 schro_decoder_free(p_schro_params->decoder);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
322 av_freep(&p_schro_params->format);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
323
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
324 avpicture_free(&p_schro_params->dec_pic);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
325
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
326 /* Free data in the output frame queue. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
327 ff_dirac_schro_queue_free(&p_schro_params->dec_frame_queue,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
328 libschroedinger_decode_frame_free);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
329
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
330 return 0;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
331 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
332
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
333 static void libschroedinger_flush(AVCodecContext *avccontext)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
334 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
335 /* Got a seek request. Free the decoded frames queue and then reset
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
336 * the decoder */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
337 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
338
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
339 /* Free data in the output frame queue. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
340 ff_dirac_schro_queue_free(&p_schro_params->dec_frame_queue,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
341 libschroedinger_decode_frame_free);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
342
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
343 ff_dirac_schro_queue_init(&p_schro_params->dec_frame_queue);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
344 schro_decoder_reset(p_schro_params->decoder);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
345 p_schro_params->eos_pulled = 0;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
346 p_schro_params->eos_signalled = 0;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
347 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
348
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
349 AVCodec libschroedinger_decoder = {
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
350 "libschroedinger",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 10061
diff changeset
351 AVMEDIA_TYPE_VIDEO,
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
352 CODEC_ID_DIRAC,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
353 sizeof(FfmpegSchroDecoderParams),
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
354 libschroedinger_decode_init,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
355 NULL,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
356 libschroedinger_decode_close,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
357 libschroedinger_decode_frame,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
358 CODEC_CAP_DELAY,
6819
43bede126ef6 missing codec long names by Stefano Sabatini, stefano.sabatini-lala poste it
diego
parents: 6757
diff changeset
359 .flush = libschroedinger_flush,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6819
diff changeset
360 .long_name = NULL_IF_CONFIG_SMALL("libschroedinger Dirac 2.2"),
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
361 };