annotate libdiracdec.c @ 8520:a0164882aa38 libavcodec

Generic metadata API. avi is updated as example. No version bump, the API still might change slightly ... No update to ffmpeg.c as requested by aurel.
author michael
date Sun, 04 Jan 2009 18:48:37 +0000
parents e623323d409f
children e9d9d946f213
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 /**
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
24 * @file libdiracdec.c
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 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
39 typedef struct FfmpegDiracDecoderParams
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
40 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
41 /** decoder handle */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
42 dirac_decoder_t* p_decoder;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
43
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
44 /** buffer to hold decoded frame */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
45 unsigned char* p_out_frame_buf;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
46 } FfmpegDiracDecoderParams;
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 /**
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
50 * returns FFmpeg chroma format
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
51 */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
52 static enum PixelFormat GetFfmpegChromaFormat(dirac_chroma_t dirac_pix_fmt)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
53 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
54 int num_formats = sizeof(ffmpeg_dirac_pixel_format_map) /
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
55 sizeof(ffmpeg_dirac_pixel_format_map[0]);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
56 int idx;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
57
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
58 for (idx = 0; idx < num_formats; ++idx) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
59 if (ffmpeg_dirac_pixel_format_map[idx].dirac_pix_fmt == dirac_pix_fmt) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
60 return ffmpeg_dirac_pixel_format_map[idx].ff_pix_fmt;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
61 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
62 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
63 return PIX_FMT_NONE;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
64 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
65
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
66 static int libdirac_decode_init(AVCodecContext *avccontext)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
67 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
68
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
69 FfmpegDiracDecoderParams *p_dirac_params = avccontext->priv_data ;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
70 p_dirac_params->p_decoder = dirac_decoder_init(avccontext->debug);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
71
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
72 if (!p_dirac_params->p_decoder)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
73 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
74
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
75 return 0 ;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
76 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
77
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
78 static int libdirac_decode_frame(AVCodecContext *avccontext,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
79 void *data, int *data_size,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
80 const uint8_t *buf, int buf_size)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
81 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
82
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
83 FfmpegDiracDecoderParams *p_dirac_params = avccontext->priv_data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
84 AVPicture *picture = data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
85 AVPicture pic;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
86 int pict_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
87 unsigned char *buffer[3];
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
88
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
89 *data_size = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
90
8422
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7040
diff changeset
91 if (buf_size>0) {
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
92 /* set data to decode into buffer */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
93 dirac_buffer (p_dirac_params->p_decoder, buf, buf+buf_size);
8422
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7040
diff changeset
94 if ((buf[4] &0x08) == 0x08 && (buf[4] & 0x03))
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7040
diff changeset
95 avccontext->has_b_frames = 1;
e623323d409f Fix incorrectly constructed Dirac parse units that caused A/V sync loss.
diego
parents: 7040
diff changeset
96 }
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
97 while (1) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
98 /* parse data and process result */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
99 DecoderState state = dirac_parse (p_dirac_params->p_decoder);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
100 switch (state)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
101 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
102 case STATE_BUFFER:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
103 return buf_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
104
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
105 case STATE_SEQUENCE:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
106 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
107 /* tell FFmpeg about sequence details */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
108 dirac_sourceparams_t *src_params =
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
109 &p_dirac_params->p_decoder->src_params;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
110
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
111 if (avcodec_check_dimensions(avccontext, src_params->width,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
112 src_params->height) < 0) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
113 av_log(avccontext, AV_LOG_ERROR, "Invalid dimensions (%dx%d)\n",
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
114 src_params->width, src_params->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
115 avccontext->height = avccontext->width = 0;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
116 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
117 }
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->height = src_params->height;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
120 avccontext->width = src_params->width;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
121
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
122 avccontext->pix_fmt = GetFfmpegChromaFormat(src_params->chroma);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
123 if (avccontext->pix_fmt == PIX_FMT_NONE) {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
124 av_log (avccontext, AV_LOG_ERROR,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
125 "Dirac chroma format %d not supported currently\n",
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
126 src_params->chroma);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
127 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
128 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
129
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
130 avccontext->time_base.den = src_params->frame_rate.numerator;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
131 avccontext->time_base.num = src_params->frame_rate.denominator;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
132
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
133 /* calculate output dimensions */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
134 avpicture_fill(&pic, NULL, avccontext->pix_fmt,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
135 avccontext->width, avccontext->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
136
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
137 pict_size = avpicture_get_size(avccontext->pix_fmt,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
138 avccontext->width,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
139 avccontext->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
140
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
141 /* allocate output buffer */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
142 if (p_dirac_params->p_out_frame_buf == NULL)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
143 p_dirac_params->p_out_frame_buf = av_malloc (pict_size);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
144 buffer[0] = p_dirac_params->p_out_frame_buf;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
145 buffer[1] = p_dirac_params->p_out_frame_buf +
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
146 pic.linesize[0] * avccontext->height;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
147 buffer[2] = buffer[1] +
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
148 pic.linesize[1] * src_params->chroma_height;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
149
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
150 /* tell Dirac about output destination */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
151 dirac_set_buf(p_dirac_params->p_decoder, buffer, NULL);
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_SEQUENCE_END:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
155 break;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
156
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
157 case STATE_PICTURE_AVAIL:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
158 /* fill picture with current buffer data from Dirac */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
159 avpicture_fill(picture, p_dirac_params->p_out_frame_buf,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
160 avccontext->pix_fmt,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
161 avccontext->width, avccontext->height);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
162 *data_size = sizeof(AVPicture);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
163 return buf_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
164
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
165 case STATE_INVALID:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
166 return -1;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
167
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
168 default:
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
169 break;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
170 }
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 return buf_size;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
174 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
175
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
176
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
177 static int libdirac_decode_close(AVCodecContext *avccontext)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
178 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
179 FfmpegDiracDecoderParams *p_dirac_params = avccontext->priv_data;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
180 dirac_decoder_close (p_dirac_params->p_decoder);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
181
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
182 av_freep(&p_dirac_params->p_out_frame_buf);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
183
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
184 return 0 ;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
185 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
186
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
187 static void libdirac_flush (AVCodecContext *avccontext)
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
188 {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
189 /* Got a seek request. We will need free memory held in the private
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
190 * context and free the current Dirac decoder handle and then open
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
191 * a new decoder handle. */
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
192 libdirac_decode_close (avccontext);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
193 libdirac_decode_init (avccontext);
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
194 return;
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
195 }
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
196
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
197
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
198
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
199 AVCodec libdirac_decoder = {
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
200 "libdirac",
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
201 CODEC_TYPE_VIDEO,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
202 CODEC_ID_DIRAC,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
203 sizeof(FfmpegDiracDecoderParams),
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
204 libdirac_decode_init,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
205 NULL,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
206 libdirac_decode_close,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
207 libdirac_decode_frame,
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
208 CODEC_CAP_DELAY,
6819
43bede126ef6 missing codec long names by Stefano Sabatini, stefano.sabatini-lala poste it
diego
parents: 6734
diff changeset
209 .flush = libdirac_flush,
7040
e943e1409077 Make AVCodec long_names definition conditional depending on CONFIG_SMALL.
stefano
parents: 6819
diff changeset
210 .long_name = NULL_IF_CONFIG_SMALL("libdirac Dirac 2.2"),
6734
df467cebd0d3 Dirac decoding/encoding support via libdirac.
diego
parents:
diff changeset
211 } ;