summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorBaptiste Coudurier <baptiste.coudurier@gmail.com>2006-05-11 21:29:37 +0000
committerBaptiste Coudurier <baptiste.coudurier@gmail.com>2006-05-11 21:29:37 +0000
commitb565ea09c723b6242c927f6cb06b2e2ed7069bf5 (patch)
tree215909ec315e341fcf6b052b85d585f5e46d19e0 /libavformat
parentbaa3a937815c8bcd47b84cd4a3b450705197b27a (diff)
fix spliting chunks, simplify
Originally committed as revision 5363 to svn://svn.ffmpeg.org/ffmpeg/trunk
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/mov.c66
1 files changed, 25 insertions, 41 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 197e7de537..1c32d3a5f1 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -66,10 +66,6 @@
/* Allows seeking */
#define MOV_SEEK
-/* Special handling for movies created with Minolta Dimaxe Xi*/
-/* this fix should not interfere with other .mov files, but just in case*/
-#define MOV_MINOLTA_FIX
-
/* some streams in QT (and in MP4 mostly) aren't either video nor audio */
/* so we first list them as this, then clean up the list of streams we give back, */
/* getting rid of these */
@@ -1817,37 +1813,6 @@ again:
goto again;
}
- /* now get the chunk size... */
-
- for(i=0; i<mov->total_streams; i++) {
- MOVStreamContext *msc = mov->streams[i];
- if ((msc->next_chunk < msc->chunk_count)
- && msc->chunk_offsets[msc->next_chunk] - offset < size
- && msc->chunk_offsets[msc->next_chunk] > offset)
- size = msc->chunk_offsets[msc->next_chunk] - offset;
- }
-
-#ifdef MOV_MINOLTA_FIX
- //Make sure that size is according to sample_size (Needed by .mov files
- //created on a Minolta Dimage Xi where audio chunks contains waste data in the end)
- //Maybe we should really not only check sc->sample_size, but also sc->sample_sizes
- //but I have no such movies
- if (sc->sample_size > 0) {
- int foundsize=0;
- for(i=0; i<(sc->sample_to_chunk_sz); i++) {
- if( (sc->sample_to_chunk[i].first)<=(sc->next_chunk) )
- {
- foundsize=sc->sample_to_chunk[i].count*sc->sample_size;
- }
- dprintf("sample_to_chunk first=%ld count=%ld, id=%ld\n", sc->sample_to_chunk[i].first, sc->sample_to_chunk[i].count, sc->sample_to_chunk[i].id);
- }
- if( (foundsize>0) && (foundsize<size) )
- {
- size=foundsize;
- }
- }
-#endif //MOV_MINOLTA_FIX
-
idx = sc->sample_to_chunk_index;
if (idx + 1 < sc->sample_to_chunk_sz && sc->next_chunk >= sc->sample_to_chunk[idx + 1].first)
idx++;
@@ -1858,14 +1823,33 @@ again:
mov->partial = sc;
/* we'll have to get those samples before next chunk */
sc->left_in_chunk = sc->sample_to_chunk[idx].count - 1;
- size = (sc->sample_size > 1)?sc->sample_size:sc->sample_sizes[sc->current_sample];
}
-
+ size = (sc->sample_size > 1)?sc->sample_size:sc->sample_sizes[sc->current_sample];
next_sample= sc->current_sample+1;
- }else if(idx < sc->sample_to_chunk_sz){
- next_sample= sc->current_sample + sc->sample_to_chunk[idx].count;
- }else
- next_sample= sc->current_sample;
+ }else{
+ int adjusted= 0;
+ /* get the chunk size... */
+ for(i=0; i<mov->total_streams; i++) {
+ MOVStreamContext *msc = mov->streams[i];
+ if ((msc->next_chunk < msc->chunk_count)
+ && msc->chunk_offsets[msc->next_chunk] - offset < size
+ && msc->chunk_offsets[msc->next_chunk] > offset)
+ size = msc->chunk_offsets[msc->next_chunk] - offset;
+ }
+ //Make sure that size is according to sample_size (Needed by .mov files
+ //created on a Minolta Dimage Xi where audio chunks contains waste data in the end)
+ //needed for 'raw '
+ //sample_size is already adjusted in read_stsz
+ adjusted= sc->sample_to_chunk[idx].count * sc->sample_size;
+ if (adjusted < size) {
+ dprintf("adjusted %d, size %d, sample count %ld\n", adjusted, size, sc->sample_to_chunk[idx].count);
+ size = adjusted;
+ }
+ if(idx < sc->sample_to_chunk_sz){
+ next_sample= sc->current_sample + sc->sample_to_chunk[idx].count;
+ }else
+ next_sample= sc->current_sample;
+ }
readchunk:
dprintf("chunk: %"PRId64" -> %"PRId64" (%i)\n", offset, offset + size, size);