annotate libdiracdec.c @ 11560:8a4984c5cacc libavcodec

Define AVMediaType enum, and use it instead of enum CodecType, which is deprecated and will be dropped at the next major bump.
author stefano
date Tue, 30 Mar 2010 23:30:55 +0000
parents 965220ebc611
children 7dd2a45249a9
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
1 /*
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
2 * Dirac decoder support via libdirac library
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
3 * Copyright (c) 2005 BBC, Andrew Kennedy <dirac at rd dot bbc dot co dot uk>
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
4 * Copyright (c) 2006-2008 BBC, Anuradha Suraparaju <asuraparaju at gmail dot com >
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
5 *
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
6 * This file is part of FFmpeg.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
7 *
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
8 * FFmpeg is free software; you can redistribute it and/or
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
9 * modify it under the terms of the GNU Lesser General Public
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
10 * License as published by the Free Software Foundation; either
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
11 * version 2.1 of the License, or (at your option) any later version.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
12 *
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
13 * FFmpeg is distributed in the hope that it will be useful,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
16 * Lesser General Public License for more details.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
17 *
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
18 * You should have received a copy of the GNU Lesser General Public
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
19 * License along with FFmpeg; if not, write to the Free Software
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
21 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
22
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
23 /**
8718
e9d9d946f213 Use full internal pathname in doxygen @file directives.
diego
parents: 8422
diff changeset
24 * @file libavcodec/libdiracdec.c
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
25 * Dirac decoder support via libdirac library; more details about the Dirac
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
26 * project can be found at http://dirac.sourceforge.net/.
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
27 * The libdirac_decoder library implements Dirac specification version 2.2
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
28 * (http://dirac.sourceforge.net/specification.html).
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
29 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
30
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
31 #include "libdirac.h"
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
32
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
33 #undef NDEBUG
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
34 #include <assert.h>
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
35
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
36 #include <libdirac_decoder/dirac_parser.h>
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
37
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
38 /** contains a single frame returned from Dirac */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
39 typedef struct FfmpegDiracDecoderParams {
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
40 /** decoder handle */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
41 dirac_decoder_t* p_decoder;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
42
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
43 /** buffer to hold decoded frame */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
44 unsigned char* p_out_frame_buf;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
45 } FfmpegDiracDecoderParams;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
46
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
47
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
48 /**
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
49 * returns FFmpeg chroma format
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
50 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
51 static enum PixelFormat GetFfmpegChromaFormat(dirac_chroma_t dirac_pix_fmt)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
52 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
53 int num_formats = sizeof(ffmpeg_dirac_pixel_format_map) /
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
54 sizeof(ffmpeg_dirac_pixel_format_map[0]);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
55 int idx;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
56
10056
646065f63290 Remove useless braces around if/for/while expressions.
diego
parents: 10055
diff changeset
57 for (idx = 0; idx < num_formats; ++idx)
646065f63290 Remove useless braces around if/for/while expressions.
diego
parents: 10055
diff changeset
58 if (ffmpeg_dirac_pixel_format_map[idx].dirac_pix_fmt == dirac_pix_fmt)
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
59 return ffmpeg_dirac_pixel_format_map[idx].ff_pix_fmt;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
60 return PIX_FMT_NONE;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
61 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
62
9007
043574c5c153 Add missing av_cold in static init/close functions.
stefano
parents: 8718
diff changeset
63 static av_cold int libdirac_decode_init(AVCodecContext *avccontext)
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
64 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
65
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
66 FfmpegDiracDecoderParams *p_dirac_params = avccontext->priv_data;
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
67 p_dirac_params->p_decoder = dirac_decoder_init(avccontext->debug);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
68
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
69 if (!p_dirac_params->p_decoder)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
70 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
71
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
72 return 0;
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
73 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
74
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
75 static int libdirac_decode_frame(AVCodecContext *avccontext,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
76 void *data, int *data_size,
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
77 AVPacket *avpkt)
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
78 {
9355
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
79 const uint8_t *buf = avpkt->data;
54bc8a2727b0 Implement avcodec_decode_video2(), _audio3() and _subtitle2() which takes an
rbultje
parents: 9007
diff changeset
80 int buf_size = avpkt->size;
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
81
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
82 FfmpegDiracDecoderParams *p_dirac_params = avccontext->priv_data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
83 AVPicture *picture = data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
84 AVPicture pic;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
85 int pict_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
86 unsigned char *buffer[3];
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
87
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
88 *data_size = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
89
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
90 if (buf_size > 0) {
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
91 /* set data to decode into buffer */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
92 dirac_buffer(p_dirac_params->p_decoder, buf, buf + buf_size);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
93 if ((buf[4] & 0x08) == 0x08 && (buf[4] & 0x03))
8422
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7040
diff changeset
94 avccontext->has_b_frames = 1;
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7040
diff changeset
95 }
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
96 while (1) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
97 /* parse data and process result */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
98 DecoderState state = dirac_parse(p_dirac_params->p_decoder);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
99 switch (state) {
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
100 case STATE_BUFFER:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
101 return buf_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
102
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
103 case STATE_SEQUENCE:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
104 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
105 /* tell FFmpeg about sequence details */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
106 dirac_sourceparams_t *src_params = &p_dirac_params->p_decoder->src_params;
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
107
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
108 if (avcodec_check_dimensions(avccontext, src_params->width,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
109 src_params->height) < 0) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
110 av_log(avccontext, AV_LOG_ERROR, "Invalid dimensions (%dx%d)\n",
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
111 src_params->width, src_params->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
112 avccontext->height = avccontext->width = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
113 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
114 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
115
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
116 avccontext->height = src_params->height;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
117 avccontext->width = src_params->width;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
118
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
119 avccontext->pix_fmt = GetFfmpegChromaFormat(src_params->chroma);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
120 if (avccontext->pix_fmt == PIX_FMT_NONE) {
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
121 av_log(avccontext, AV_LOG_ERROR,
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
122 "Dirac chroma format %d not supported currently\n",
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
123 src_params->chroma);
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
124 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
125 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
126
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
127 avccontext->time_base.den = src_params->frame_rate.numerator;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
128 avccontext->time_base.num = src_params->frame_rate.denominator;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
129
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
130 /* calculate output dimensions */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
131 avpicture_fill(&pic, NULL, avccontext->pix_fmt,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
132 avccontext->width, avccontext->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
133
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
134 pict_size = avpicture_get_size(avccontext->pix_fmt,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
135 avccontext->width,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
136 avccontext->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
137
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
138 /* allocate output buffer */
10055
fdb318d12314 Simplify 'if' condition statements.
diego
parents: 9355
diff changeset
139 if (!p_dirac_params->p_out_frame_buf)
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
140 p_dirac_params->p_out_frame_buf = av_malloc(pict_size);
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
141 buffer[0] = p_dirac_params->p_out_frame_buf;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
142 buffer[1] = p_dirac_params->p_out_frame_buf +
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
143 pic.linesize[0] * avccontext->height;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
144 buffer[2] = buffer[1] +
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
145 pic.linesize[1] * src_params->chroma_height;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
146
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
147 /* tell Dirac about output destination */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
148 dirac_set_buf(p_dirac_params->p_decoder, buffer, NULL);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
149 break;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
150 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
151 case STATE_SEQUENCE_END:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
152 break;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
153
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
154 case STATE_PICTURE_AVAIL:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
155 /* fill picture with current buffer data from Dirac */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
156 avpicture_fill(picture, p_dirac_params->p_out_frame_buf,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
157 avccontext->pix_fmt,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
158 avccontext->width, avccontext->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
159 *data_size = sizeof(AVPicture);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
160 return buf_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
161
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
162 case STATE_INVALID:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
163 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
164
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
165 default:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
166 break;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
167 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
168 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
169
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
170 return buf_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
171 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
172
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
173
9007
043574c5c153 Add missing av_cold in static init/close functions.
stefano
parents: 8718
diff changeset
174 static av_cold int libdirac_decode_close(AVCodecContext *avccontext)
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
175 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
176 FfmpegDiracDecoderParams *p_dirac_params = avccontext->priv_data;
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
177 dirac_decoder_close(p_dirac_params->p_decoder);
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
178
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
179 av_freep(&p_dirac_params->p_out_frame_buf);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
180
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
181 return 0;
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
182 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
183
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
184 static void libdirac_flush(AVCodecContext *avccontext)
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
185 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
186 /* Got a seek request. We will need free memory held in the private
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
187 * context and free the current Dirac decoder handle and then open
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
188 * a new decoder handle. */
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
189 libdirac_decode_close(avccontext);
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
190 libdirac_decode_init(avccontext);
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
191 return;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
192 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
193
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
194
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
195
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
196 AVCodec libdirac_decoder = {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
197 "libdirac",
11560
8a4984c5cacc Define AVMediaType enum, and use it instead of enum CodecType, which
stefano
parents: 10060
diff changeset
198 AVMEDIA_TYPE_VIDEO,
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
199 CODEC_ID_DIRAC,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
200 sizeof(FfmpegDiracDecoderParams),
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
201 libdirac_decode_init,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
202 NULL,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
203 libdirac_decode_close,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
204 libdirac_decode_frame,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
205 CODEC_CAP_DELAY,
6819
43bede126ef6 missing codec long names by Stefano Sabatini, stefano.sabatini-lala poste it
diego
parents: 6734
diff changeset
206 .flush = libdirac_flush,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6819
diff changeset
207 .long_name = NULL_IF_CONFIG_SMALL("libdirac Dirac 2.2"),
10060
965220ebc611 cosmetics: indentation, prettyprinting, K&R coding style
diego
parents: 10056
diff changeset
208 };