
Untitled
By: a guest on Jan 28th, 2012 | syntax:
None | size: 2.31 KB | hits: 13 | expires: Never
Index: libhb/muxmp4.c
===================================================================
--- libhb/muxmp4.c (revision 2358)
+++ libhb/muxmp4.c (working copy)
@@ -515,18 +515,49 @@
}
// Here's where the sample actually gets muxed.
- if( !MP4WriteSample( m->file,
- mux_data->track,
- buf->data,
- buf->size,
- duration,
- offset,
- ( job->vcodec == HB_VCODEC_X264 && mux_data == job->mux_data ) ?
- ( buf->frametype == HB_FRAME_IDR ) : ( ( buf->frametype & HB_FRAME_KEY ) != 0 ) ) )
+ if( job->vcodec == HB_VCODEC_X264 && mux_data == job->mux_data )
{
- hb_error("Failed to write to output file, disk full?");
- *job->die = 1;
+ // map HB frame -> MP4 frame
+ MP4H264FrameType ft;
+ switch( buf->frametype )
+ {
+ case HB_FRAME_IDR: ft = MP4_H264_FRAME_IDR; break;
+ case HB_FRAME_I: ft = MP4_H264_FRAME_I; break;
+ case HB_FRAME_P: ft = MP4_H264_FRAME_P; break;
+ case HB_FRAME_BREF: ft = MP4_H264_FRAME_BREF; break;
+ case HB_FRAME_B: ft = MP4_H264_FRAME_B; break;
+
+ default:
+ ft = MP4_H264_FRAME_UNDEFINED;
+ break;
+ }
+
+ if( !MP4WriteH264Sample( m->file,
+ mux_data->track,
+ buf->data,
+ buf->size,
+ duration,
+ offset,
+ ft ))
+ {
+ hb_error("Failed to write to output file, disk full?");
+ *job->die = 1;
+ }
}
+ else
+ {
+ if( !MP4WriteSample( m->file,
+ mux_data->track,
+ buf->data,
+ buf->size,
+ duration,
+ offset,
+ ( buf->frametype & HB_FRAME_KEY ) != 0 ))
+ {
+ hb_error("Failed to write to output file, disk full?");
+ *job->die = 1;
+ }
+ }
return 0;
}