summaryrefslogtreecommitdiffstats
path: root/libhb
diff options
context:
space:
mode:
Diffstat (limited to 'libhb')
-rw-r--r--libhb/encx264.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/libhb/encx264.c b/libhb/encx264.c
index a68bbd4a6..99dc35193 100644
--- a/libhb/encx264.c
+++ b/libhb/encx264.c
@@ -75,7 +75,6 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
x264_param_t param;
x264_nal_t * nal;
int nal_count;
- int nal_size;
hb_work_private_t * pv = calloc( 1, sizeof( hb_work_private_t ) );
w->private_data = pv;
@@ -99,7 +98,6 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
{
char *name = x264opts;
char *value;
- int ret;
x264opts += strcspn( x264opts, ":" );
if( *x264opts )
@@ -142,6 +140,9 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
param.i_fps_num = job->vrate;
param.i_fps_den = job->vrate_base;
+ /* Disable annexb. Inserts size into nal header instead of start code */
+ param.b_annexb = 0;
+
/* Set min:max key intervals ratio to 1:10 of fps.
* This section is skipped if fps=25 (default).
*/
@@ -377,12 +378,12 @@ int encx264Init( hb_work_object_t * w, hb_job_t * job )
x264_encoder_headers( pv->x264, &nal, &nal_count );
/* Sequence Parameter Set */
- x264_nal_encode( w->config->h264.sps, &nal_size, 0, &nal[1] );
- w->config->h264.sps_length = nal_size;
+ memcpy(w->config->h264.sps, nal[1].p_payload + 4, nal[1].i_payload - 4);
+ w->config->h264.sps_length = nal[1].i_payload - 4;
/* Picture Parameter Set */
- x264_nal_encode( w->config->h264.pps, &nal_size, 0, &nal[2] );
- w->config->h264.pps_length = nal_size;
+ memcpy(w->config->h264.pps, nal[2].p_payload + 4, nal[2].i_payload - 4);
+ w->config->h264.pps_length = nal[2].i_payload - 4;
x264_picture_alloc( &pv->pic_in, X264_CSP_I420,
job->width, job->height );
@@ -494,8 +495,8 @@ static hb_buffer_t *nal_encode( hb_work_object_t *w, x264_picture_t *pic_out,
int i;
for( i = 0; i < i_nal; i++ )
{
- int data = buf->alloc - buf->size;
- int size = x264_nal_encode( buf->data + buf->size, &data, 1, &nal[i] );
+ int size = nal[i].i_payload;
+ memcpy(buf->data + buf->size, nal[i].p_payload, size);
if( size < 1 )
{
continue;
@@ -528,12 +529,6 @@ static hb_buffer_t *nal_encode( hb_work_object_t *w, x264_picture_t *pic_out,
break;
}
- /* H.264 in mp4 (stolen from mp4creator) */
- buf->data[buf->size+0] = ( ( size - 4 ) >> 24 ) & 0xFF;
- buf->data[buf->size+1] = ( ( size - 4 ) >> 16 ) & 0xFF;
- buf->data[buf->size+2] = ( ( size - 4 ) >> 8 ) & 0xFF;
- buf->data[buf->size+3] = ( ( size - 4 ) >> 0 ) & 0xFF;
-
/* Decide what type of frame we have. */
switch( pic_out->i_type )
{