annotate libschroedingerdec.c @ 10948:c80f0dfbf47d libavcodec

Only calculate the second chroma qp if it differs from the firstin the main loop filter. (a little faster for the common case where they are equal)
author michael
date Wed, 20 Jan 2010 01:49:24 +0000
parents 09f2db2d7c90
children 8a4984c5cacc
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 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8422
diff changeset
23 * @file libavcodec/libschroedingerdec.c
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
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
30 #include "avcodec.h"
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
31 #include "libdirac_libschro.h"
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
32 #include "libschroedinger.h"
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
33
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
34 #undef NDEBUG
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
35 #include <assert.h>
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
36
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
37
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
38 #include <schroedinger/schro.h>
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
39 #include <schroedinger/schrodebug.h>
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
40 #include <schroedinger/schrovideoformat.h>
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
41
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
42 /** libschroedinger decoder private data */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
43 typedef struct FfmpegSchroDecoderParams {
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
44 /** Schroedinger video format */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
45 SchroVideoFormat *format;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
46
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
47 /** Schroedinger frame format */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
48 SchroFrameFormat frame_format;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
49
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
50 /** decoder handle */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
51 SchroDecoder* decoder;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
52
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
53 /** queue storing decoded frames */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
54 FfmpegDiracSchroQueue dec_frame_queue;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
55
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
56 /** end of sequence signalled */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
57 int eos_signalled;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
58
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
59 /** end of sequence pulled */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
60 int eos_pulled;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
61
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
62 /** decoded picture */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
63 AVPicture dec_pic;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
64 } FfmpegSchroDecoderParams;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
65
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
66 typedef struct FfmpegSchroParseUnitContext {
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
67 const uint8_t *buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
68 int buf_size;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
69 } FfmpegSchroParseUnitContext;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
70
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
71
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
72 static void libschroedinger_decode_buffer_free(SchroBuffer *schro_buf,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
73 void *priv);
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
74
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
75 static void FfmpegSchroParseContextInit(FfmpegSchroParseUnitContext *parse_ctx,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
76 const uint8_t *buf, int buf_size)
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
77 {
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
78 parse_ctx->buf = buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
79 parse_ctx->buf_size = buf_size;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
80 }
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
81
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
82 static SchroBuffer* FfmpegFindNextSchroParseUnit(FfmpegSchroParseUnitContext *parse_ctx)
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
83 {
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
84 SchroBuffer *enc_buf = NULL;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
85 int next_pu_offset = 0;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
86 unsigned char *in_buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
87
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
88 if (parse_ctx->buf_size < 13 ||
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
89 parse_ctx->buf[0] != 'B' ||
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
90 parse_ctx->buf[1] != 'B' ||
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
91 parse_ctx->buf[2] != 'C' ||
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
92 parse_ctx->buf[3] != 'D')
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
93 return NULL;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
94
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
95 next_pu_offset = (parse_ctx->buf[5] << 24) +
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
96 (parse_ctx->buf[6] << 16) +
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
97 (parse_ctx->buf[7] << 8) +
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
98 parse_ctx->buf[8];
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
99
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
100 if (next_pu_offset == 0 &&
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
101 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
102 next_pu_offset = 13;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
103
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
104 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
105 return NULL;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
106
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
107 in_buf = av_malloc(next_pu_offset);
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
108 memcpy(in_buf, parse_ctx->buf, next_pu_offset);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
109 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
110 enc_buf->free = libschroedinger_decode_buffer_free;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
111 enc_buf->priv = in_buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
112
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
113 parse_ctx->buf += next_pu_offset;
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
114 parse_ctx->buf_size -= next_pu_offset;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
115
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
116 return enc_buf;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
117 }
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
118
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
119 /**
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
120 * Returns FFmpeg chroma format.
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
121 */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
122 static enum PixelFormat GetFfmpegChromaFormat(SchroChromaFormat schro_pix_fmt)
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
123 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
124 int num_formats = sizeof(ffmpeg_schro_pixel_format_map) /
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
125 sizeof(ffmpeg_schro_pixel_format_map[0]);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
126 int idx;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
127
10056
646065f63290 Remove useless braces around if/for/while expressions.
diego
parents: 10055
diff changeset
128 for (idx = 0; idx < num_formats; ++idx)
646065f63290 Remove useless braces around if/for/while expressions.
diego
parents: 10055
diff changeset
129 if (ffmpeg_schro_pixel_format_map[idx].schro_pix_fmt == schro_pix_fmt)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
130 return ffmpeg_schro_pixel_format_map[idx].ff_pix_fmt;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
131 return PIX_FMT_NONE;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
132 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
133
9007
043574c5c153 Add missing av_cold in static init/close functions.
stefano
parents: 8718
diff changeset
134 static av_cold int libschroedinger_decode_init(AVCodecContext *avccontext)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
135 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
136
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
137 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
138 /* First of all, initialize our supporting libraries. */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
139 schro_init();
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
140
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
141 schro_debug_set_level(avccontext->debug);
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
142 p_schro_params->decoder = schro_decoder_new();
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
143 schro_decoder_set_skip_ratio(p_schro_params->decoder, 1);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
144
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
145 if (!p_schro_params->decoder)
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
146 return -1;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
147
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
148 /* Initialize the decoded frame queue. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
149 ff_dirac_schro_queue_init(&p_schro_params->dec_frame_queue);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
150 return 0;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
151 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
152
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
153 static void libschroedinger_decode_buffer_free(SchroBuffer *schro_buf,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
154 void *priv)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
155 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
156 av_freep(&priv);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
157 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
158
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
159 static void libschroedinger_decode_frame_free(void *frame)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
160 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
161 schro_frame_unref(frame);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
162 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
163
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
164 static void libschroedinger_handle_first_access_unit(AVCodecContext *avccontext)
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
165 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
166 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
167 SchroDecoder *decoder = p_schro_params->decoder;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
168
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
169 p_schro_params->format = schro_decoder_get_video_format(decoder);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
170
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
171 /* Tell FFmpeg about sequence details. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
172 if (avcodec_check_dimensions(avccontext, p_schro_params->format->width,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
173 p_schro_params->format->height) < 0) {
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
174 av_log(avccontext, AV_LOG_ERROR, "invalid dimensions (%dx%d)\n",
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
175 p_schro_params->format->width, p_schro_params->format->height);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
176 avccontext->height = avccontext->width = 0;
6754
7094ae690809 Do not return -1 from void functions.
cehoyos
parents: 6738
diff changeset
177 return;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
178 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
179 avccontext->height = p_schro_params->format->height;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
180 avccontext->width = p_schro_params->format->width;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
181 avccontext->pix_fmt = GetFfmpegChromaFormat(p_schro_params->format->chroma_format);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
182
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
183 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
184 &p_schro_params->frame_format) == -1) {
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
185 av_log(avccontext, AV_LOG_ERROR,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
186 "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
187 "and 4:4:4 formats.\n");
6754
7094ae690809 Do not return -1 from void functions.
cehoyos
parents: 6738
diff changeset
188 return;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
189 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
190
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
191 avccontext->time_base.den = p_schro_params->format->frame_rate_numerator;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
192 avccontext->time_base.num = p_schro_params->format->frame_rate_denominator;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
193
10055
fdb318d12314 Simplify 'if' condition statements.
diego
parents: 9355
diff changeset
194 if (!p_schro_params->dec_pic.data[0])
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
195 avpicture_alloc(&p_schro_params->dec_pic,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
196 avccontext->pix_fmt,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
197 avccontext->width,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
198 avccontext->height);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
199 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
200
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
201 static int libschroedinger_decode_frame(AVCodecContext *avccontext,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
202 void *data, int *data_size,
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
203 AVPacket *avpkt)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
204 {
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
205 const uint8_t *buf = avpkt->data;
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
206 int buf_size = avpkt->size;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
207
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
208 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
209 SchroDecoder *decoder = p_schro_params->decoder;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
210 SchroVideoFormat *format;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
211 AVPicture *picture = data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
212 SchroBuffer *enc_buf;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
213 SchroFrame* frame;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
214 int state;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
215 int go = 1;
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
216 int outer = 1;
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
217 FfmpegSchroParseUnitContext parse_ctx;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
218
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
219 *data_size = 0;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
220
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
221 FfmpegSchroParseContextInit(&parse_ctx, buf, buf_size);
10055
fdb318d12314 Simplify 'if' condition statements.
diego
parents: 9355
diff changeset
222 if (!buf_size) {
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
223 if (!p_schro_params->eos_signalled) {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
224 state = schro_decoder_push_end_of_stream(decoder);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
225 p_schro_params->eos_signalled = 1;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
226 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
227 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
228
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
229 /* 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
230 do {
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
231 if ((enc_buf = FfmpegFindNextSchroParseUnit(&parse_ctx))) {
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
232 /* Push buffer into decoder. */
8422
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7234
diff changeset
233 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
234 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
235 avccontext->has_b_frames = 1;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
236 state = schro_decoder_push(decoder, enc_buf);
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
237 if (state == SCHRO_DECODER_FIRST_ACCESS_UNIT)
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
238 libschroedinger_handle_first_access_unit(avccontext);
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
239 go = 1;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
240 } else
7234
dea986389c57 Parse frames to feed the decoder with individual parse units.
benoit
parents: 7040
diff changeset
241 outer = 0;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
242 format = p_schro_params->format;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
243
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
244 while (go) {
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
245 /* Parse data and process result. */
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
246 state = schro_decoder_wait(decoder);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
247 switch (state) {
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
248 case SCHRO_DECODER_FIRST_ACCESS_UNIT:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
249 libschroedinger_handle_first_access_unit(avccontext);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
250 break;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
251
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
252 case SCHRO_DECODER_NEED_BITS:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
253 /* Need more input data - stop iterating over what we have. */
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
254 go = 0;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
255 break;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
256
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
257 case SCHRO_DECODER_NEED_FRAME:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
258 /* 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
259 frame = ff_create_schro_frame(avccontext,
09f2db2d7c90 Fix bug caused by difference in stride and picture width.
diego
parents: 10060
diff changeset
260 p_schro_params->frame_format);
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
261 schro_decoder_add_output_picture(decoder, frame);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
262 break;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
263
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
264 case SCHRO_DECODER_OK:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
265 /* Pull a frame out of the decoder. */
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
266 frame = schro_decoder_pull(decoder);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
267
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
268 if (frame)
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
269 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
270 frame);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
271 break;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
272 case SCHRO_DECODER_EOS:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
273 go = 0;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
274 p_schro_params->eos_pulled = 1;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
275 schro_decoder_reset(decoder);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
276 outer = 0;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
277 break;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
278
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
279 case SCHRO_DECODER_ERROR:
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
280 return -1;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
281 break;
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
282 }
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
283 }
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
284 } while (outer);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
285
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
286 /* Grab next frame to be returned from the top of the queue. */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
287 frame = ff_dirac_schro_queue_pop(&p_schro_params->dec_frame_queue);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
288
10055
fdb318d12314 Simplify 'if' condition statements.
diego
parents: 9355
diff changeset
289 if (frame) {
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
290 memcpy(p_schro_params->dec_pic.data[0],
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
291 frame->components[0].data,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
292 frame->components[0].length);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
293
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
294 memcpy(p_schro_params->dec_pic.data[1],
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
295 frame->components[1].data,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
296 frame->components[1].length);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
297
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
298 memcpy(p_schro_params->dec_pic.data[2],
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
299 frame->components[2].data,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
300 frame->components[2].length);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
301
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
302 /* Fill picture with current buffer data from Schroedinger. */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
303 avpicture_fill(picture, p_schro_params->dec_pic.data[0],
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
304 avccontext->pix_fmt,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
305 avccontext->width, avccontext->height);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
306
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
307 *data_size = sizeof(AVPicture);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
308
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
309 /* Now free the frame resources. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
310 libschroedinger_decode_frame_free(frame);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
311 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
312 return buf_size;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
313 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
314
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
315
9007
043574c5c153 Add missing av_cold in static init/close functions.
stefano
parents: 8718
diff changeset
316 static av_cold int libschroedinger_decode_close(AVCodecContext *avccontext)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
317 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
318 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
319 /* Free the decoder. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
320 schro_decoder_free(p_schro_params->decoder);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
321 av_freep(&p_schro_params->format);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
322
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
323 avpicture_free(&p_schro_params->dec_pic);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
324
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
325 /* Free data in the output frame queue. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
326 ff_dirac_schro_queue_free(&p_schro_params->dec_frame_queue,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
327 libschroedinger_decode_frame_free);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
328
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
329 return 0;
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
330 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
331
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
332 static void libschroedinger_flush(AVCodecContext *avccontext)
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
333 {
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
334 /* Got a seek request. Free the decoded frames queue and then reset
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
335 * the decoder */
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
336 FfmpegSchroDecoderParams *p_schro_params = avccontext->priv_data;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
337
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
338 /* Free data in the output frame queue. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
339 ff_dirac_schro_queue_free(&p_schro_params->dec_frame_queue,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
340 libschroedinger_decode_frame_free);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
341
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
342 ff_dirac_schro_queue_init(&p_schro_params->dec_frame_queue);
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
343 schro_decoder_reset(p_schro_params->decoder);
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
344 p_schro_params->eos_pulled = 0;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
345 p_schro_params->eos_signalled = 0;
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
346 }
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
347
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
348 AVCodec libschroedinger_decoder = {
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
349 "libschroedinger",
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
350 CODEC_TYPE_VIDEO,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
351 CODEC_ID_DIRAC,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
352 sizeof(FfmpegSchroDecoderParams),
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
353 libschroedinger_decode_init,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
354 NULL,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
355 libschroedinger_decode_close,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
356 libschroedinger_decode_frame,
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
357 CODEC_CAP_DELAY,
6819
43bede126ef6 missing codec long names by Stefano Sabatini, stefano.sabatini-lala poste it
diego
parents: 6757
diff changeset
358 .flush = libschroedinger_flush,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6819
diff changeset
359 .long_name = NULL_IF_CONFIG_SMALL("libschroedinger Dirac 2.2"),
6738
bdacae101076 Add Dirac support through libschroedinger.
diego
parents:
diff changeset
360 };