On Tue, May 29, 2018 at 02:36:28PM +0000, Eran Kornblau wrote: > Hi, > > The attached is a slightly more optimized (and IMHO elegant) code for > updating the stco/co64 offsets > > Thanks > > Eran
> qt-faststart.c | 42 +++++++++++++++++++++++++----------------- > 1 file changed, 25 insertions(+), 17 deletions(-) > a0f95e960800141a0a666313f2f3d82a87a3309f > 0002-qt-faststart-optimize-the-offset-change-loop.patch > From 776244b79a8bcfb5732f39fbebb9cd7fc0092bcb Mon Sep 17 00:00:00 2001 > From: erankor <eran.kornb...@kaltura.com> > Date: Tue, 29 May 2018 17:29:09 +0300 > Subject: [PATCH 2/2] qt-faststart - optimize the offset change loop > > --- > tools/qt-faststart.c | 42 +++++++++++++++++++++++++----------------- > 1 file changed, 25 insertions(+), 17 deletions(-) > > diff --git a/tools/qt-faststart.c b/tools/qt-faststart.c > index d0ae7245f3..2ddaf87e1b 100644 > --- a/tools/qt-faststart.c > +++ b/tools/qt-faststart.c > @@ -96,9 +96,11 @@ int main(int argc, char *argv[]) > int64_t last_offset; > unsigned char *moov_atom = NULL; > unsigned char *ftyp_atom = NULL; > + unsigned char *ptr; > + unsigned char *end; > uint64_t moov_atom_size; > uint64_t ftyp_atom_size = 0; > - uint64_t i, j; > + uint64_t i; > uint32_t offset_count; > uint64_t current_offset; > int64_t start_offset = 0; > @@ -253,13 +255,16 @@ int main(int argc, char *argv[]) > printf(" bad atom size/element count\n"); > goto error_out; > } > - for (j = 0; j < offset_count; j++) { > - current_offset = BE_32(&moov_atom[i + 12 + j * 4]); > + > + ptr = moov_atom + i + 12; > + end = ptr + offset_count * 4; > + while (ptr < end) { > + current_offset = BE_32(ptr); > current_offset += moov_atom_size; > - moov_atom[i + 12 + j * 4 + 0] = (current_offset >> 24) & > 0xFF; > - moov_atom[i + 12 + j * 4 + 1] = (current_offset >> 16) & > 0xFF; > - moov_atom[i + 12 + j * 4 + 2] = (current_offset >> 8) & > 0xFF; > - moov_atom[i + 12 + j * 4 + 3] = (current_offset >> 0) & > 0xFF; > + *ptr++ = (current_offset >> 24) & 0xFF; > + *ptr++ = (current_offset >> 16) & 0xFF; > + *ptr++ = (current_offset >> 8) & 0xFF; > + *ptr++ = (current_offset >> 0) & 0xFF; > } > i += atom_size - 4; > } else if (atom_type == CO64_ATOM) { > @@ -274,17 +279,20 @@ int main(int argc, char *argv[]) > printf(" bad atom size/element count\n"); > goto error_out; > } > - for (j = 0; j < offset_count; j++) { > - current_offset = BE_64(&moov_atom[i + 12 + j * 8]); > + > + ptr = moov_atom + i + 12; > + end = ptr + offset_count * 8; > + while (ptr < end) { > + current_offset = BE_64(ptr); > current_offset += moov_atom_size; > - moov_atom[i + 12 + j * 8 + 0] = (current_offset >> 56) & > 0xFF; > - moov_atom[i + 12 + j * 8 + 1] = (current_offset >> 48) & > 0xFF; > - moov_atom[i + 12 + j * 8 + 2] = (current_offset >> 40) & > 0xFF; > - moov_atom[i + 12 + j * 8 + 3] = (current_offset >> 32) & > 0xFF; > - moov_atom[i + 12 + j * 8 + 4] = (current_offset >> 24) & > 0xFF; > - moov_atom[i + 12 + j * 8 + 5] = (current_offset >> 16) & > 0xFF; > - moov_atom[i + 12 + j * 8 + 6] = (current_offset >> 8) & > 0xFF; > - moov_atom[i + 12 + j * 8 + 7] = (current_offset >> 0) & > 0xFF; > + *ptr++ = (current_offset >> 56) & 0xFF; > + *ptr++ = (current_offset >> 48) & 0xFF; > + *ptr++ = (current_offset >> 40) & 0xFF; > + *ptr++ = (current_offset >> 32) & 0xFF; > + *ptr++ = (current_offset >> 24) & 0xFF; > + *ptr++ = (current_offset >> 16) & 0xFF; > + *ptr++ = (current_offset >> 8) & 0xFF; > + *ptr++ = (current_offset >> 0) & 0xFF; can this be simplfified with libavcodec/bytestream.h, libavutil/intreadwrite.h or similar ? [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Modern terrorism, a quick summary: Need oil, start war with country that has oil, kill hundread thousand in war. Let country fall into chaos, be surprised about raise of fundamantalists. Drop more bombs, kill more people, be surprised about them taking revenge and drop even more bombs and strip your own citizens of their rights and freedoms. to be continued
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel