summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsaintdev <[email protected]>2007-04-26 07:57:59 +0000
committersaintdev <[email protected]>2007-04-26 07:57:59 +0000
commit4c84cb2ff519e4392ea8af0168b57d4ef5d1c4fd (patch)
tree717ef22b5d8de11d401d81a76fe2d378a185790a
parentc9fa0ecad7aee37b787cd09fc49c3d13fb480a84 (diff)
Various fixes:
- Include parsecsv.c in the Jamfile so we can compile the CLI with Jam - Quiet some compiler warnings in parsecsv.{c,h} - Check some return values in muxmp4.c and encfaac.c and die gracefully if there is a problem. - Correctly set the number of audio channels in the stsd atom. git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@552 b64f7644-9d1e-0410-96f1-a4d463321fa5
-rw-r--r--Jamfile3
-rw-r--r--contrib/patch-mpeg4ip.patch23
-rw-r--r--libhb/encfaac.c4
-rw-r--r--libhb/muxmp4.c54
-rw-r--r--test/parsecsv.c3
-rw-r--r--test/parsecsv.h2
6 files changed, 80 insertions, 9 deletions
diff --git a/Jamfile b/Jamfile
index c068d5400..b0a219958 100644
--- a/Jamfile
+++ b/Jamfile
@@ -29,7 +29,8 @@ if $(OS) != CYGWIN
# Interfaces
CLI_BIN = HandBrakeCLI ;
-CLI_SRC = test/test.c ;
+CLI_SRC = test/test.c
+ test/parsecsv.c ;
BEOS_BIN = HandBrake ;
BEOS_SRC = beos/HBApp.cpp beos/MainWindow.cpp beos/ScanWindow.cpp
beos/PicWindow.cpp beos/Stepper.cpp beos/QueueWindow.cpp ;
diff --git a/contrib/patch-mpeg4ip.patch b/contrib/patch-mpeg4ip.patch
index d025e5750..8a5462c5c 100644
--- a/contrib/patch-mpeg4ip.patch
+++ b/contrib/patch-mpeg4ip.patch
@@ -600,3 +600,26 @@ diff -Naur mpeg4ip.orig/lib/mp4v2/mp4file.h mpeg4ip.patched/lib/mp4v2/mp4file.h
MP4SampleId GetTrackNumberOfSamples(MP4TrackId trackId);
+diff -Naur mpeg4ip.orig/lib/mp4v2/atom_mp4a.cpp mpeg4ip.patched/lib/mp4v2/atom_mp4a.cpp
+--- mpeg4ip.orig/lib/mp4v2/atom_mp4a.cpp 2007-04-26 01:21:22.000000000 -0600
++++ mpeg4ip.patched/lib/mp4v2/atom_mp4a.cpp 2007-04-26 01:43:08.000000000 -0600
+@@ -29,7 +29,10 @@
+ AddProperty( /* 1 */
+ new MP4Integer16Property("dataReferenceIndex"));
+
+- AddReserved("reserved2", 16); /* 2 */
++ /* patched by saintdev to allow us to set correct audio information */
++// AddReserved("reserved2", 16); /* 2 */
++ AddProperty( /* 2 */
++ new MP4BytesProperty("reserved2", 16));
+
+ AddProperty( /* 3 */
+ new MP4Integer16Property("timeScale"));
+@@ -55,5 +58,6 @@
+ m_pProperties[2]->SetReadOnly(false);
+ ((MP4BytesProperty*)m_pProperties[2])->
+ SetValue(reserved2, sizeof(reserved2));
+- m_pProperties[2]->SetReadOnly(true);
++ /* patched by saintdev to allow us to set correct audio information */
++// m_pProperties[2]->SetReadOnly(true);
+ }
diff --git a/libhb/encfaac.c b/libhb/encfaac.c
index d46e8aedd..95a047ac6 100644
--- a/libhb/encfaac.c
+++ b/libhb/encfaac.c
@@ -95,11 +95,15 @@ int encfaacInit( hb_work_object_t * w, hb_job_t * job )
if( !faacEncSetConfiguration( pv->faac, cfg ) )
{
hb_log( "faacEncSetConfiguration failed" );
+ *job->die = 1;
+ return 0;
}
if( faacEncGetDecoderSpecificInfo( pv->faac, &bytes, &length ) < 0 )
{
hb_log( "faacEncGetDecoderSpecificInfo failed" );
+ *job->die = 1;
+ return 0;
}
memcpy( w->config->aac.bytes, bytes, length );
w->config->aac.length = length;
diff --git a/libhb/muxmp4.c b/libhb/muxmp4.c
index e2de1ce86..284c4ce6e 100644
--- a/libhb/muxmp4.c
+++ b/libhb/muxmp4.c
@@ -140,6 +140,12 @@ static int MP4Init( hb_mux_object_t * m )
/* Create an empty mp4 file */
m->file = MP4Create( job->file, MP4_DETAILS_ERROR, 0 );
+ if (m->file == MP4_INVALID_FILE_HANDLE)
+ {
+ hb_log("muxmp4.c: MP4Create failed!");
+ *job->die = 1;
+ return 0;
+ }
/* Video track */
mux_data = malloc( sizeof( hb_mux_data_t ) );
@@ -149,12 +155,22 @@ static int MP4Init( hb_mux_object_t * m )
synchronization issues (audio not playing at the correct speed).
To workaround this, we use the audio samplerate as the
timescale */
- MP4SetTimeScale( m->file, job->arate );
+ if (!(MP4SetTimeScale( m->file, job->arate )))
+ {
+ hb_log("muxmp4.c: MP4SetTimeScale failed!");
+ *job->die = 1;
+ return 0;
+ }
if( job->vcodec == HB_VCODEC_X264 )
{
/* Stolen from mp4creator */
- MP4SetVideoProfileLevel( m->file, 0x7F );
+ if(!(MP4SetVideoProfileLevel( m->file, 0x7F )))
+ {
+ hb_log("muxmp4.c: MP4SetVideoProfileLevel failed!");
+ *job->die = 1;
+ return 0;
+ }
mux_data->track = MP4AddH264VideoTrack( m->file, job->arate,
MP4_INVALID_DURATION, job->width, job->height,
@@ -178,14 +194,31 @@ static int MP4Init( hb_mux_object_t * m )
}
else /* FFmpeg or XviD */
{
- MP4SetVideoProfileLevel( m->file, MPEG4_SP_L3 );
+ if(!(MP4SetVideoProfileLevel( m->file, MPEG4_SP_L3 )))
+ {
+ hb_log("muxmp4.c: MP4SetVideoProfileLevel failed!");
+ *job->die = 1;
+ return 0;
+ }
mux_data->track = MP4AddVideoTrack( m->file, job->arate,
MP4_INVALID_DURATION, job->width, job->height,
MP4_MPEG4_VIDEO_TYPE );
+ if (mux_data->track == MP4_INVALID_TRACK_ID)
+ {
+ hb_log("muxmp4.c: MP4AddVideoTrack failed!");
+ *job->die = 1;
+ return 0;
+ }
+
/* VOL from FFmpeg or XviD */
- MP4SetTrackESConfiguration( m->file, mux_data->track,
- job->config.mpeg4.bytes, job->config.mpeg4.length );
+ if (!(MP4SetTrackESConfiguration( m->file, mux_data->track,
+ job->config.mpeg4.bytes, job->config.mpeg4.length )))
+ {
+ hb_log("muxmp4.c: MP4SetTrackESConfiguration failed!");
+ *job->die = 1;
+ return 0;
+ }
}
/* apply the anamorphic transformation matrix if needed */
@@ -235,6 +268,13 @@ static int MP4Init( hb_mux_object_t * m )
/* add the audio tracks */
for( i = 0; i < hb_list_count( title->list_audio ); i++ )
{
+ static u_int8_t reserved2[16] = {
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x02, 0x00, 0x10,
+ 0x00, 0x00, 0x00, 0x00,
+ };
+
audio = hb_list_item( title->list_audio, i );
mux_data = malloc( sizeof( hb_mux_data_t ) );
audio->mux_data = mux_data;
@@ -251,6 +291,10 @@ static int MP4Init( hb_mux_object_t * m )
language_code |= audio->iso639_2[1] - 0x60; language_code <<= 5;
language_code |= audio->iso639_2[2] - 0x60;
MP4SetTrackIntegerProperty(m->file, mux_data->track, "mdia.mdhd.language", language_code);
+
+ /* Set the correct number of channels for this track */
+ reserved2[9] = (u_int8_t)HB_AMIXDOWN_GET_DISCRETE_CHANNEL_COUNT(audio->amixdown);
+ MP4SetTrackBytesProperty(m->file, mux_data->track, "mdia.minf.stbl.stsd.mp4a.reserved2", reserved2, sizeof(reserved2));
/* store a reference to the first audio track,
so we can use it to feed the chapter text track's sample rate */
diff --git a/test/parsecsv.c b/test/parsecsv.c
index f0a8a1a18..bfc6a2783 100644
--- a/test/parsecsv.c
+++ b/test/parsecsv.c
@@ -140,7 +140,6 @@ static uint16_t hb_parse_character( hb_csv_file_t * file )
{
int byte;
uint16_t c;
- int read_result;
int need_char = 1;
if( file == NULL )
@@ -211,4 +210,4 @@ static void hb_trim_end( char *text )
{
text[i] = '\0';
}
-} \ No newline at end of file
+}
diff --git a/test/parsecsv.h b/test/parsecsv.h
index 6247ddb44..f3e27a751 100644
--- a/test/parsecsv.h
+++ b/test/parsecsv.h
@@ -33,4 +33,4 @@ void hb_close_csv_file( hb_csv_file_t *file );
/* Parse CSV Cells */
hb_csv_cell_t *hb_read_next_cell( hb_csv_file_t *file );
-void hb_dispose_cell( hb_csv_cell_t *cell ); \ No newline at end of file
+void hb_dispose_cell( hb_csv_cell_t *cell );