# HG changeset patch # User kostya # Date 1232544275 0 # Node ID 0855c4630a8f6e38644b738cd502f4f75915323c # Parent bf7a9658de71c92798b780b8ea5277823c0cb5f6 VMD first chunk of audio is not coded as many separate chunks of block_align size. Thus, make demuxer and decoder handle it as a whole. diff -r bf7a9658de71 -r 0855c4630a8f sierravmd.c --- a/sierravmd.c Tue Jan 20 21:06:57 2009 +0000 +++ b/sierravmd.c Wed Jan 21 13:24:35 2009 +0000 @@ -193,7 +193,6 @@ case 1: /* Audio Chunk */ if (!st) break; /* first audio chunk contains several audio buffers */ - if(current_audio_pts){ vmd->frame_table[total_frames].frame_offset = current_offset; vmd->frame_table[total_frames].stream_index = vmd->audio_stream_index; vmd->frame_table[total_frames].frame_size = size; @@ -201,34 +200,6 @@ vmd->frame_table[total_frames].pts = current_audio_pts; total_frames++; current_audio_pts += pts_inc; - }else{ - uint32_t flags; - int k; - int noff; - int64_t pos; - - pos = url_ftell(pb); - url_fseek(pb, current_offset, SEEK_SET); - flags = get_le32(pb); - noff = 4; - url_fseek(pb, pos, SEEK_SET); - av_log(s, AV_LOG_DEBUG, "Sound mapping = %08X (%i bufs)\n", flags, sound_buffers); - for(k = 0; k < sound_buffers - 1; k++){ - if(flags & 1) { /* silent block */ - vmd->frame_table[total_frames].frame_size = 0; - }else{ - vmd->frame_table[total_frames].frame_size = st->codec->block_align + (st->codec->block_align & 1); - } - noff += vmd->frame_table[total_frames].frame_size; - vmd->frame_table[total_frames].frame_offset = current_offset + noff; - vmd->frame_table[total_frames].stream_index = vmd->audio_stream_index; - memcpy(vmd->frame_table[total_frames].frame_record, chunk, BYTES_PER_FRAME_RECORD); - vmd->frame_table[total_frames].pts = current_audio_pts; - total_frames++; - current_audio_pts += pts_inc; - flags >>= 1; - } - } break; case 2: /* Video Chunk */ vmd->frame_table[total_frames].frame_offset = current_offset;