Index: libavformat/swfenc.c =================================================================== --- libavformat/swfenc.c (revision 22880) +++ libavformat/swfenc.c (working copy) @@ -478,6 +478,7 @@ int file_size, i; video_enc = NULL; + enc = NULL; for(i=0;inb_streams;i++) { enc = s->streams[i]->codec; if (enc->codec_type == AVMEDIA_TYPE_VIDEO) @@ -491,15 +492,25 @@ put_flush_packet(s->pb); - /* patch file size and number of frames if not streamed */ - if (!url_is_streamed(s->pb) && video_enc) { + /* patch file size and number of frames if not streamed (ie, we can perform fseek operations) */ + if (!url_is_streamed(s->pb)) { + + /* Set correct File Size, replacing dummy file size */ file_size = url_ftell(pb); url_fseek(pb, 4, SEEK_SET); put_le32(pb, file_size); + + if (video_enc) { url_fseek(pb, swf->duration_pos, SEEK_SET); put_le16(pb, swf->video_frame_number); url_fseek(pb, swf->vframes_pos, SEEK_SET); put_le16(pb, swf->video_frame_number); + } else if (enc) { /* Audio */ + url_fseek(pb, swf->duration_pos, SEEK_SET); + put_le16(pb, swf->swf_frame_number); /* Frame Count */ + } + + /* reset seek pointer (FIXME: why?) */ url_fseek(pb, file_size, SEEK_SET); } return 0;