/*****************************************************************************
* Preamble
*****************************************************************************/
-#include <stdlib.h>
-#include <string.h>
#include <vlc/vlc.h>
-#include <vlc/input.h>
-#include <vlc/sout.h>
+#include <vlc_sout.h>
+#include <vlc_block.h>
+#include <vlc_codecs.h>
#ifdef HAVE_TIME_H
#include <time.h>
static void bo_add_24be ( bo_t *, uint32_t );
static void bo_add_32be ( bo_t *, uint32_t );
static void bo_add_64be ( bo_t *, uint64_t );
-static void bo_add_fourcc(bo_t *, char * );
+static void bo_add_fourcc(bo_t *, const char * );
static void bo_add_bo ( bo_t *, bo_t * );
static void bo_add_mem ( bo_t *, int , uint8_t * );
static void bo_add_descr( bo_t *, uint8_t , uint32_t );
static void bo_fix_32be ( bo_t *, int , uint32_t );
-static bo_t *box_new ( char *fcc );
-static bo_t *box_full_new( char *fcc, uint8_t v, uint32_t f );
+static bo_t *box_new ( const char *fcc );
+static bo_t *box_full_new( const char *fcc, uint8_t v, uint32_t f );
static void box_fix ( bo_t *box );
static void box_free ( bo_t *box );
static void box_gather ( bo_t *box, bo_t *box2 );
case VLC_FOURCC( 'h', '2', '6', '4' ):
case VLC_FOURCC( 's', 'a', 'm', 'r' ):
case VLC_FOURCC( 's', 'a', 'w', 'b' ):
+ case VLC_FOURCC( 'Y', 'V', '1', '2' ):
+ case VLC_FOURCC( 'Y', 'U', 'Y', '2' ):
break;
case VLC_FOURCC( 's', 'u', 'b', 't' ):
msg_Warn( p_mux, "subtitle track added like in .mov (even when creating .mp4)" );
last[2] = ( i_size >> 8 )&0xff;
last[3] = ( i_size )&0xff;
- /* Skip blocks with SPS/PPS */
+ /* Skip blocks with SPS/PPS */
if( (last[4]&0x1f) == 7 || (last[4]&0x1f) == 8 )
+ {
; // FIXME Find a way to skip dat without frelling everything
-
+ }
last = dat;
dat += 4;
}
uint8_t *p_buffer = p_stream->fmt.p_extra;
int i_buffer = p_stream->fmt.i_extra;
- while( i_buffer > 4 &&
+ while( i_buffer > 4 &&
p_buffer[0] == 0 && p_buffer[1] == 0 &&
p_buffer[2] == 0 && p_buffer[3] == 1 )
{
int i_offset = 1;
int i_size = 0;
int i_startcode = 0;
-
+
//msg_Dbg( p_stream, "we found a startcode for NAL with TYPE:%d", i_nal_type );
-
+
for( i_offset = 1; i_offset+3 < i_buffer ; i_offset++)
{
- if( p_buffer[i_offset] == 0 && p_buffer[i_offset+1] == 0 &&
+ if( p_buffer[i_offset] == 0 && p_buffer[i_offset+1] == 0 &&
p_buffer[i_offset+2] == 0 && p_buffer[i_offset+3] == 1 )
{
/* we found another startcode */
i_startcode = i_offset;
break;
- }
+ }
}
i_size = i_startcode ? i_startcode : i_buffer;
if( i_nal_type == 7 )
p_buffer += i_size;
}
}
-
+
/* FIXME use better value */
avcC = box_new( "avcC" );
bo_add_8( avcC, 1 ); /* configuration version */
{
#define ADD_META_BOX( type, box_string ) { \
bo_t *box = NULL; \
- if( p_meta->psz_##type ) box = box_new( "\251" box_string ); \
+ if( vlc_meta_Get( p_meta, vlc_meta_##type ) ) box = box_new( "\251" box_string ); \
if( box ) \
{ \
- bo_add_16be( box, strlen( p_meta->psz_##type ) ); \
+ bo_add_16be( box, strlen( vlc_meta_Get( p_meta, vlc_meta_##type ) )); \
bo_add_16be( box, 0 ); \
- bo_add_mem( box, strlen( p_meta->psz_##type ), \
- (uint8_t*)(p_meta->psz_##type ) ); \
+ bo_add_mem( box, strlen( vlc_meta_Get( p_meta, vlc_meta_##type ) ), \
+ (uint8_t*)(vlc_meta_Get( p_meta, vlc_meta_##type ) ) ); \
box_fix( box ); \
box_gather( udta, box ); \
} }
- ADD_META_BOX( title, "nam" );
- ADD_META_BOX( artist, "ART" );
- ADD_META_BOX( genre, "gen" );
- ADD_META_BOX( copyright, "cpy" );
- ADD_META_BOX( description, "des" );
- ADD_META_BOX( date, "day" );
- ADD_META_BOX( url, "url" );
+ ADD_META_BOX( Title, "nam" );
+ ADD_META_BOX( Artist, "ART" );
+ ADD_META_BOX( Genre, "gen" );
+ ADD_META_BOX( Copyright, "cpy" );
+ ADD_META_BOX( Description, "des" );
+ ADD_META_BOX( Date, "day" );
+ ADD_META_BOX( URL, "url" );
#undef ADD_META_BOX
}
memcpy( fcc, "avc1", 4 );
break;
+ case VLC_FOURCC('Y','V','1','2'):
+ memcpy( fcc, "yv12", 4 );
+ break;
+
+ case VLC_FOURCC('Y','U','Y','2'):
+ memcpy( fcc, "yuy2", 4 );
+ break;
+
default:
memcpy( fcc, (char*)&p_stream->fmt.i_codec, 4 );
break;
return stbl;
}
-static int64_t get_timestamp();
+static int64_t get_timestamp(void);
static uint32_t mvhd_matrix[9] =
{ 0x10000, 0, 0, 0, 0x10000, 0, 0, 0, 0x40000000 };
bo_add_32be( p_bo, i &0xffffffff );
}
-static void bo_add_fourcc( bo_t *p_bo, char *fcc )
+static void bo_add_fourcc( bo_t *p_bo, const char *fcc )
{
bo_add_8( p_bo, fcc[0] );
bo_add_8( p_bo, fcc[1] );
i_length = i_size;
vals[3] = (unsigned char)(i_length & 0x7f);
i_length >>= 7;
- vals[2] = (unsigned char)((i_length & 0x7f) | 0x80);
+ vals[2] = (unsigned char)((i_length & 0x7f) | 0x80);
i_length >>= 7;
- vals[1] = (unsigned char)((i_length & 0x7f) | 0x80);
+ vals[1] = (unsigned char)((i_length & 0x7f) | 0x80);
i_length >>= 7;
vals[0] = (unsigned char)((i_length & 0x7f) | 0x80);
}
}
-static bo_t * box_new( char *fcc )
+static bo_t * box_new( const char *fcc )
{
bo_t *box;
return box;
}
-static bo_t * box_full_new( char *fcc, uint8_t v, uint32_t f )
+static bo_t * box_full_new( const char *fcc, uint8_t v, uint32_t f )
{
bo_t *box;
sout_AccessOutWrite( p_mux->p_access, p_buf );
}
-static int64_t get_timestamp()
+static int64_t get_timestamp(void)
{
int64_t i_timestamp = 0;