* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
{
return VLC_FOURCC( p_buff[0], p_buff[1], p_buff[2], p_buff[3] );
}
{
return VLC_FOURCC( p_buff[0], p_buff[1], p_buff[2], p_buff[3] );
}
****************************************************************************/
static int AVI_ChunkReadCommon( stream_t *s, avi_chunk_t *p_chk )
{
****************************************************************************/
static int AVI_ChunkReadCommon( stream_t *s, avi_chunk_t *p_chk )
{
p_chk->common.i_chunk_fourcc,
(char*)&p_chk->common.i_chunk_fourcc,
p_chk->common.i_chunk_size,
p_chk->common.i_chunk_fourcc,
(char*)&p_chk->common.i_chunk_fourcc,
p_chk->common.i_chunk_size,
+ /* XXX fixed for on2 hack */
+ if( p_container->common.i_chunk_fourcc == AVIFOURCC_ON2 && p_container->list.i_type == AVIFOURCC_ON2f )
+ {
+ p_container->common.i_chunk_fourcc = AVIFOURCC_RIFF;
+ p_container->list.i_type = AVIFOURCC_AVI;
+ }
+
if( p_container->common.i_chunk_fourcc == AVIFOURCC_LIST &&
p_container->list.i_type == AVIFOURCC_movi )
{
if( p_container->common.i_chunk_fourcc == AVIFOURCC_LIST &&
p_container->list.i_type == AVIFOURCC_movi )
{
(off_t)p_chk->common.p_father->common.i_chunk_pos +
(off_t)__EVEN( p_chk->common.p_father->common.i_chunk_size ) ) )
{
(off_t)p_chk->common.p_father->common.i_chunk_pos +
(off_t)__EVEN( p_chk->common.p_father->common.i_chunk_size ) ) )
{
i_read = stream_Read( s, p_read, i_read ); \
if( i_read < (int64_t)__EVEN(p_chk->common.i_chunk_size ) + 8 ) \
{ \
i_read = stream_Read( s, p_read, i_read ); \
if( i_read < (int64_t)__EVEN(p_chk->common.i_chunk_size ) + 8 ) \
{ \
-#define AVI_READ8BYTES( i_dword ) \
- i_dword = GetQWLE( p_read ); \
- p_read += 8; \
- i_read -= 8
+#define AVI_READ8BYTES( i_qword ) \
+ AVI_READ( i_qword, GetQWLE, 8 )
AVI_READ4BYTES( p_chk->avih.i_microsecperframe);
AVI_READ4BYTES( p_chk->avih.i_maxbytespersec );
AVI_READ4BYTES( p_chk->avih.i_reserved1 );
AVI_READ4BYTES( p_chk->avih.i_microsecperframe);
AVI_READ4BYTES( p_chk->avih.i_maxbytespersec );
AVI_READ4BYTES( p_chk->avih.i_reserved1 );
{
memcpy( &p_chk->strf.vids.p_bih[1],
p_buff + 8 + sizeof(BITMAPINFOHEADER), /* 8=fourrc+size */
{
memcpy( &p_chk->strf.vids.p_bih[1],
p_buff + 8 + sizeof(BITMAPINFOHEADER), /* 8=fourrc+size */
- p_chk->strf.vids.p_bih->biWidth,
- p_chk->strf.vids.p_bih->biHeight,
+ (uint32_t)p_chk->strf.vids.p_bih->biWidth,
+ (uint32_t)p_chk->strf.vids.p_bih->biHeight,
p_chk->strf.vids.p_bih->biPlanes,
p_chk->strf.vids.p_bih->biBitCount );
#endif
p_chk->strf.vids.p_bih->biPlanes,
p_chk->strf.vids.p_bih->biBitCount );
#endif
i_count = __MIN( p_indx->i_entriesinuse, i_read / 8 );
p_indx->i_entriesinuse = i_count;
i_count = __MIN( p_indx->i_entriesinuse, i_read / 8 );
p_indx->i_entriesinuse = i_count;
i_count = __MIN( p_indx->i_entriesinuse, i_read / 12 );
p_indx->i_entriesinuse = i_count;
i_count = __MIN( p_indx->i_entriesinuse, i_read / 12 );
p_indx->i_entriesinuse = i_count;
i_count = __MIN( p_indx->i_entriesinuse, i_read / 16 );
p_indx->i_entriesinuse = i_count;
i_count = __MIN( p_indx->i_entriesinuse, i_read / 16 );
p_indx->i_entriesinuse = i_count;
} AVI_Chunk_Function [] =
{
{ AVIFOURCC_RIFF, AVI_ChunkRead_list, AVI_ChunkFree_nothing },
} AVI_Chunk_Function [] =
{
{ AVIFOURCC_RIFF, AVI_ChunkRead_list, AVI_ChunkFree_nothing },
{ AVIFOURCC_LIST, AVI_ChunkRead_list, AVI_ChunkFree_nothing },
{ AVIFOURCC_avih, AVI_ChunkRead_avih, AVI_ChunkFree_nothing },
{ AVIFOURCC_LIST, AVI_ChunkRead_list, AVI_ChunkFree_nothing },
{ AVIFOURCC_avih, AVI_ChunkRead_avih, AVI_ChunkFree_nothing },
{ AVIFOURCC_strh, AVI_ChunkRead_strh, AVI_ChunkFree_nothing },
{ AVIFOURCC_strf, AVI_ChunkRead_strf, AVI_ChunkFree_strf },
{ AVIFOURCC_strd, AVI_ChunkRead_strd, AVI_ChunkFree_strd },
{ AVIFOURCC_strh, AVI_ChunkRead_strh, AVI_ChunkFree_nothing },
{ AVIFOURCC_strf, AVI_ChunkRead_strf, AVI_ChunkFree_strf },
{ AVIFOURCC_strd, AVI_ChunkRead_strd, AVI_ChunkFree_strd },
- else if( ((char*)&p_chk->common.i_chunk_fourcc)[0] == 'i' &&
- ((char*)&p_chk->common.i_chunk_fourcc)[1] == 'x' )
+ else if( ( ((char*)&p_chk->common.i_chunk_fourcc)[0] == 'i' &&
+ ((char*)&p_chk->common.i_chunk_fourcc)[1] == 'x' ) ||
+ ( ((char*)&p_chk->common.i_chunk_fourcc)[2] == 'i' &&
+ ((char*)&p_chk->common.i_chunk_fourcc)[3] == 'x' ) )
{
p_chk->common.i_chunk_fourcc = AVIFOURCC_indx;
return AVI_ChunkRead_indx( s, p_chk );
{
p_chk->common.i_chunk_fourcc = AVIFOURCC_indx;
return AVI_ChunkRead_indx( s, p_chk );
p_chk->common.i_chunk_fourcc == AVIFOURCC_LIST )
{
sprintf( str + i_level * 5,
p_chk->common.i_chunk_fourcc == AVIFOURCC_LIST )
{
sprintf( str + i_level * 5,
i_level ? '+' : '*',
(char*)&p_chk->common.i_chunk_fourcc,
(char*)&p_chk->list.i_type,
i_level ? '+' : '*',
(char*)&p_chk->common.i_chunk_fourcc,
(char*)&p_chk->list.i_type,
(char*)&p_chk->common.i_chunk_fourcc,
p_chk->common.i_chunk_size,
p_chk->common.i_chunk_pos );
(char*)&p_chk->common.i_chunk_fourcc,
p_chk->common.i_chunk_size,
p_chk->common.i_chunk_pos );