Lines Matching +full:- +full:- +full:skip +full:- +full:published
9 * License as published by the Free Software Foundation; either
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
38 WebpContext *const w = s->priv_data; in webp_init()
41 w->last_pkt = ffformatcontext(s)->pkt; in webp_init()
43 if (s->nb_streams != 1) { in webp_init()
47 st = s->streams[0]; in webp_init()
48 if (st->codecpar->codec_id != AV_CODEC_ID_WEBP) { in webp_init()
59 int skip = 0; in is_animated_webp_packet() local
62 if (pkt->size < 4) in is_animated_webp_packet()
64 if (AV_RL32(pkt->data) == AV_RL32("RIFF")) in is_animated_webp_packet()
65 skip = 12; in is_animated_webp_packet()
67 if (pkt->size < skip + 4) in is_animated_webp_packet()
69 if (AV_RL32(pkt->data + skip) == AV_RL32("VP8X")) { in is_animated_webp_packet()
70 flags |= pkt->data[skip + 4 + 4]; in is_animated_webp_packet()
80 WebpContext *w = s->priv_data; in flush()
81 AVStream *st = s->streams[0]; in flush()
83 if (w->last_pkt->size) { in flush()
84 int skip = 0; in flush() local
88 if (AV_RL32(w->last_pkt->data) == AV_RL32("RIFF")) in flush()
89 skip = 12; in flush()
91 if (AV_RL32(w->last_pkt->data + skip) == AV_RL32("VP8X")) { in flush()
92 flags |= w->last_pkt->data[skip + 4 + 4]; in flush()
94 skip += AV_RL32(w->last_pkt->data + skip + 4) + 8; in flush()
97 if (!w->wrote_webp_header) { in flush()
98 avio_write(s->pb, "RIFF\0\0\0\0WEBP", 12); in flush()
99 w->wrote_webp_header = 1; in flush()
100 if (w->frame_count > 1) // first non-empty packet in flush()
101 w->frame_count = 1; // so we don't count previous empty packets. in flush()
104 if (w->frame_count == 1) { in flush()
111 avio_write(s->pb, "VP8X", 4); in flush()
112 avio_wl32(s->pb, 10); in flush()
113 avio_w8(s->pb, flags); in flush()
114 avio_wl24(s->pb, 0); in flush()
115 avio_wl24(s->pb, st->codecpar->width - 1); in flush()
116 avio_wl24(s->pb, st->codecpar->height - 1); in flush()
119 avio_write(s->pb, "ANIM", 4); in flush()
120 avio_wl32(s->pb, 6); in flush()
121 avio_wl32(s->pb, 0xFFFFFFFF); in flush()
122 avio_wl16(s->pb, w->loop); in flush()
126 if (w->frame_count > trailer) { in flush()
127 avio_write(s->pb, "ANMF", 4); in flush()
128 avio_wl32(s->pb, 16 + w->last_pkt->size - skip); in flush()
129 avio_wl24(s->pb, 0); in flush()
130 avio_wl24(s->pb, 0); in flush()
131 avio_wl24(s->pb, st->codecpar->width - 1); in flush()
132 avio_wl24(s->pb, st->codecpar->height - 1); in flush()
133 if (w->last_pkt->pts != AV_NOPTS_VALUE && pts != AV_NOPTS_VALUE) { in flush()
134 avio_wl24(s->pb, pts - w->last_pkt->pts); in flush()
136 avio_wl24(s->pb, w->last_pkt->duration); in flush()
137 avio_w8(s->pb, 0); in flush()
139 avio_write(s->pb, w->last_pkt->data + skip, w->last_pkt->size - skip); in flush()
140 av_packet_unref(w->last_pkt); in flush()
148 WebpContext *w = s->priv_data; in webp_write_packet()
151 if (!pkt->size) in webp_write_packet()
156 w->using_webp_anim_encoder |= ret; in webp_write_packet()
158 if (w->using_webp_anim_encoder) { in webp_write_packet()
159 avio_write(s->pb, pkt->data, pkt->size); in webp_write_packet()
160 w->wrote_webp_header = 1; // for good measure in webp_write_packet()
163 if ((ret = flush(s, 0, pkt->pts)) < 0) in webp_write_packet()
165 av_packet_ref(w->last_pkt, pkt); in webp_write_packet()
167 ++w->frame_count; in webp_write_packet()
175 WebpContext *w = s->priv_data; in webp_write_trailer()
177 if (w->using_webp_anim_encoder) { in webp_write_trailer()
178 if (w->loop) { // Write loop count. in webp_write_trailer()
179 avio_seek(s->pb, 42, SEEK_SET); in webp_write_trailer()
180 avio_wl16(s->pb, w->loop); in webp_write_trailer()
187 filesize = avio_tell(s->pb); in webp_write_trailer()
188 avio_seek(s->pb, 4, SEEK_SET); in webp_write_trailer()
189 avio_wl32(s->pb, filesize - 8); in webp_write_trailer()
191 avio_seek(s->pb, filesize, SEEK_SET); in webp_write_trailer()
200 { "loop", "Number of times to loop the output: 0 - infinite loop", OFFSET(loop),