mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2024-11-26 19:01:44 +02:00
qt-faststart: speedup
qt-faststart is terribly slow when the input file and the output file are on a slow disk like a SD card. By increasing the copy_buffer from 1K to 32M I decreased the processing time on a sample file from 1600 seconds to 4 seconds. The timing difference is during 'copying rest of file'. S:\SD_VIDEO\PRG001>e:\utils\qt-faststart 00005.mp4 5.mp4 ftyp 0 32 free 32 8 mdat 40 13744391 moov 13744431 141848 patching stco atom... patching stco atom... writing ftyp atom... writing moov atom... copying rest of file... Execution time: 1576.259 s S:\SD_VIDEO\PRG001>s:\utils\qt-faststart 00005.mp4 5.mp4 ftyp 0 32 free 32 8 mdat 40 13744391 moov 13744431 141848 patching stco atom... patching stco atom... writing ftyp atom... writing moov atom... copying rest of file... Execution time: 3.846 s Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
13d878366f
commit
f4d9148fe2
@ -77,7 +77,7 @@
|
|||||||
#define CO64_ATOM QT_ATOM('c', 'o', '6', '4')
|
#define CO64_ATOM QT_ATOM('c', 'o', '6', '4')
|
||||||
|
|
||||||
#define ATOM_PREAMBLE_SIZE 8
|
#define ATOM_PREAMBLE_SIZE 8
|
||||||
#define COPY_BUFFER_SIZE 1024
|
#define COPY_BUFFER_SIZE 33554432
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
@ -96,7 +96,7 @@ int main(int argc, char *argv[])
|
|||||||
uint32_t offset_count;
|
uint32_t offset_count;
|
||||||
uint64_t current_offset;
|
uint64_t current_offset;
|
||||||
uint64_t start_offset = 0;
|
uint64_t start_offset = 0;
|
||||||
unsigned char copy_buffer[COPY_BUFFER_SIZE];
|
unsigned char *copy_buffer = NULL;
|
||||||
int bytes_to_copy;
|
int bytes_to_copy;
|
||||||
|
|
||||||
if (argc != 3) {
|
if (argc != 3) {
|
||||||
@ -293,6 +293,11 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* copy the remainder of the infile, from offset 0 -> last_offset - 1 */
|
/* copy the remainder of the infile, from offset 0 -> last_offset - 1 */
|
||||||
|
copy_buffer = malloc(COPY_BUFFER_SIZE);
|
||||||
|
if (!copy_buffer) {
|
||||||
|
printf("could not allocate %"PRIu64" bytes for copy_buffer\n", COPY_BUFFER_SIZE);
|
||||||
|
goto error_out;
|
||||||
|
}
|
||||||
printf(" copying rest of file...\n");
|
printf(" copying rest of file...\n");
|
||||||
while (last_offset) {
|
while (last_offset) {
|
||||||
if (last_offset > COPY_BUFFER_SIZE)
|
if (last_offset > COPY_BUFFER_SIZE)
|
||||||
@ -315,6 +320,7 @@ int main(int argc, char *argv[])
|
|||||||
fclose(outfile);
|
fclose(outfile);
|
||||||
free(moov_atom);
|
free(moov_atom);
|
||||||
free(ftyp_atom);
|
free(ftyp_atom);
|
||||||
|
free(copy_buffer);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@ -325,5 +331,6 @@ error_out:
|
|||||||
fclose(outfile);
|
fclose(outfile);
|
||||||
free(moov_atom);
|
free(moov_atom);
|
||||||
free(ftyp_atom);
|
free(ftyp_atom);
|
||||||
|
free(copy_buffer);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user