25 #include "libavutil/channel_layout.h"
26 #include "libavutil/intreadwrite.h"
42 probe_packet->
buf[2]<10 &&
43 probe_packet->
buf[3]<10 &&
44 probe_packet->
buf[6] &&
45 probe_packet->
buf[7] &&
46 !(probe_packet->
buf[8] & 1) &&
47 !(probe_packet->
buf[10] & 1) &&
49 AV_RL16(probe_packet->
buf + 12 + 6) < probe_packet->
buf[12] * 3 + 4 + probe_packet->
buf[7] * 2048
68 if (!audio_stream || !video_stream)
81 audio_dec = audio_stream->
codec;
89 video_dec = video_stream->
codec;
96 yop->frame_size =
avio_r8(pb) * 2048;
106 yop->palette_size = video_dec->
extradata[0] * 3 + 4;
109 video_dec->
bit_rate = 8 * (yop->frame_size - yop->audio_block_length) * frame_rate;
112 if (yop->audio_block_length < 920 ||
113 yop->audio_block_length + yop->palette_size >= yop->frame_size) {
131 int actual_video_data_size = yop->frame_size -
132 yop->audio_block_length - yop->palette_size;
134 yop->video_packet.stream_index = 1;
136 if (yop->video_packet.data) {
137 *pkt = yop->video_packet;
138 yop->video_packet.data =
NULL;
139 yop->video_packet.size = 0;
140 pkt->
data[0] = yop->odd_frame;
146 yop->frame_size - yop->audio_block_length);
152 ret =
avio_read(pb, yop->video_packet.data, yop->palette_size);
155 }
else if (ret < yop->palette_size) {
165 pkt->
pos = yop->video_packet.pos;
167 avio_skip(pb, yop->audio_block_length - ret);
169 ret =
avio_read(pb, yop->video_packet.data + yop->palette_size,
170 actual_video_data_size);
173 else if (ret < actual_video_data_size)
177 return yop->audio_block_length;
192 int64_t timestamp,
int flags)
195 int64_t frame_pos, pos_min, pos_max;
203 frame_count = (pos_max - pos_min) / yop->frame_size;
205 timestamp =
FFMAX(0,
FFMIN(frame_count, timestamp));
207 frame_pos = timestamp * yop->frame_size + pos_min;
213 yop->odd_frame = timestamp & 1;