Lines Matching refs:vp8
27 * @see http://tools.ietf.org/html/draft-ietf-payload-vp8-05
56 static int vp8_broken_sequence(AVFormatContext *ctx, PayloadContext *vp8,
59 vp8->sequence_ok = 0;
61 ffio_free_dyn_buf(&vp8->data);
65 static int vp8_handle_packet(AVFormatContext *ctx, PayloadContext *vp8,
79 if (vp8->data) {
80 int ret = ff_rtp_finalize_packet(pkt, &vp8->data, st->index);
83 *timestamp = vp8->timestamp;
84 if (vp8->sequence_dirty)
144 ffio_free_dyn_buf(&vp8->data);
146 vp8->sequence_ok = 1;
147 vp8->sequence_dirty = 0;
148 vp8->got_keyframe = 1;
150 int can_continue = vp8->data && !vp8->is_keyframe &&
151 avio_tell(vp8->data) >= vp8->first_part_size;
152 if (!vp8->sequence_ok)
154 if (!vp8->got_keyframe)
155 return vp8_broken_sequence(ctx, vp8, "Keyframe missing\n");
157 if (pictureid != ((vp8->prev_pictureid + 1) & pictureid_mask)) {
158 return vp8_broken_sequence(ctx, vp8,
161 if (vp8->data && !can_continue)
162 return vp8_broken_sequence(ctx, vp8,
166 uint16_t expected_seq = vp8->prev_seq + 1;
168 if (vp8->data) {
179 return vp8_broken_sequence(ctx, vp8,
184 return vp8_broken_sequence(ctx, vp8,
188 if (vp8->data) {
189 vp8->sequence_dirty = 1;
190 if (avio_tell(vp8->data) >= vp8->first_part_size) {
191 int ret = ff_rtp_finalize_packet(pkt, &vp8->data, st->index);
196 old_timestamp = vp8->timestamp;
199 ffio_free_dyn_buf(&vp8->data);
203 vp8->first_part_size = (AV_RL16(&buf[1]) << 3 | buf[0] >> 5) + 3;
204 if ((res = avio_open_dyn_buf(&vp8->data)) < 0)
206 vp8->timestamp = *timestamp;
207 vp8->broken_frame = 0;
208 vp8->prev_pictureid = pictureid;
209 vp8->is_keyframe = !non_key;
211 uint16_t expected_seq = vp8->prev_seq + 1;
213 if (!vp8->sequence_ok)
216 if (vp8->timestamp != *timestamp) {
218 return vp8_broken_sequence(ctx, vp8,
223 if (vp8->is_keyframe) {
224 return vp8_broken_sequence(ctx, vp8,
226 } else if (vp8->data && avio_tell(vp8->data) >= vp8->first_part_size) {
227 vp8->broken_frame = 1;
228 vp8->sequence_dirty = 1;
230 return vp8_broken_sequence(ctx, vp8,
236 if (!vp8->data)
237 return vp8_broken_sequence(ctx, vp8, "Received no start marker\n");
239 vp8->prev_seq = seq;
240 if (!vp8->broken_frame)
241 avio_write(vp8->data, buf, len);
250 ret = ff_rtp_finalize_packet(pkt, &vp8->data, st->index);
253 if (vp8->sequence_dirty)
255 if (vp8->is_keyframe)
263 static av_cold int vp8_init(AVFormatContext *s, int st_index, PayloadContext *vp8)
265 vp8->sequence_ok = 1;
269 static void vp8_close_context(PayloadContext *vp8)
271 ffio_free_dyn_buf(&vp8->data);
274 static int vp8_need_keyframe(PayloadContext *vp8)
276 return vp8->sequence_dirty || !vp8->sequence_ok;