Lines Matching refs:cdxl

104     CDXLDemuxContext *cdxl = s->priv_data;
106 cdxl->read_chunk = 0;
107 cdxl->video_stream_index = -1;
108 cdxl->audio_stream_index = -1;
110 cdxl->filesize = avio_size(s->pb);
119 CDXLDemuxContext *cdxl = s->priv_data;
128 if (!cdxl->read_chunk) {
129 cdxl->pos = avio_tell(pb);
130 if (avio_read(pb, cdxl->header, CDXL_HEADER_SIZE) != CDXL_HEADER_SIZE)
133 if (cdxl->header[0] > 1) {
134 av_log(s, AV_LOG_ERROR, "unsupported cdxl file\n");
138 type = cdxl->header[0];
139 channels = 1 + !!(cdxl->header[1] & 0x10);
140 format = cdxl->header[1] & 0xE0;
141 current_size = AV_RB32(&cdxl->header[2]);
142 width = AV_RB16(&cdxl->header[14]);
143 height = AV_RB16(&cdxl->header[16]);
144 palette_size = AV_RB16(&cdxl->header[20]);
145 audio_size = AV_RB16(&cdxl->header[22]) * channels;
146 cdxl->srate = AV_RB16(&cdxl->header[24]);
147 if (!cdxl->srate && audio_size)
148 cdxl->srate = cdxl->sample_rate;
149 cdxl->frate.num = cdxl->header[26];
150 cdxl->frate.den = 1;
151 if (cdxl->header[19] == 0 ||
152 FFALIGN(width, 16) * (uint64_t)height * cdxl->header[19] > INT_MAX)
155 image_size = width * height * cdxl->header[19] / 8;
157 image_size = FFALIGN(width, 16) * height * cdxl->header[19] / 8;
166 if (!cdxl->frate.num && audio_size && cdxl->srate > 0) {
167 cdxl->frate = (AVRational){ cdxl->srate, audio_size };
168 } else if (!cdxl->frate.num) {
169 cdxl->frate = cdxl->frame_rate;
172 if (cdxl->read_chunk && audio_size) {
173 if (cdxl->audio_stream_index == -1) {
182 st->codecpar->sample_rate= cdxl->srate;
184 cdxl->audio_stream_index = st->index;
185 avpriv_set_pts_info(st, 64, 1, cdxl->srate);
186 if (current_size && cdxl->filesize > 0 && audio_size > 0)
187 st->duration = (cdxl->filesize / current_size) * audio_size / channels;
193 pkt->stream_index = cdxl->audio_stream_index;
194 pkt->pos = cdxl->pos;
196 cdxl->read_chunk = 0;
198 if (cdxl->video_stream_index == -1) {
209 if (current_size && cdxl->filesize > 0)
210 st->nb_frames = cdxl->filesize / current_size;
212 cdxl->video_stream_index = st->index;
213 avpriv_set_pts_info(st, 64, cdxl->frate.den, cdxl->frate.num);
218 memcpy(pkt->data, cdxl->header, CDXL_HEADER_SIZE);
224 pkt->stream_index = cdxl->video_stream_index;
226 pkt->pos = cdxl->pos;
228 cdxl->read_chunk = audio_size;
231 if (!cdxl->read_chunk)
239 CDXLDemuxContext *cdxl = s->priv_data;
241 cdxl->read_chunk = 0;
261 .name = "cdxl",
269 .extensions = "cdxl,xl",