void ghb_show_container_options(signal_user_data_t *ud)
{
- GtkWidget *w1, *w2, *w3;
- w1 = GHB_WIDGET(ud->builder, "Mp4LargeFile");
+ GtkWidget *w2, *w3;
w2 = GHB_WIDGET(ud->builder, "Mp4HttpOptimize");
w3 = GHB_WIDGET(ud->builder, "Mp4iPodCompatible");
gint enc = ghb_settings_video_encoder_codec(ud->settings, "VideoEncoder");
- gtk_widget_set_visible(w1, (mux->format == HB_MUX_MP4V2));
gtk_widget_set_visible(w2, (mux->format & HB_MUX_MASK_MP4));
gtk_widget_set_visible(w3, (mux->format & HB_MUX_MASK_MP4) &&
(enc == HB_VCODEC_X264));
<signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
</object>
<packing>
- <property name="top_attach">0</property>
+ <property name="top_attach">1</property>
<property name="left_attach">1</property>
<property name="width">1</property>
<property name="height">1</property>
<property name="height">1</property>
</packing>
</child>
- <child>
- <object class="GtkCheckButton" id="Mp4LargeFile">
- <property name="label" translatable="yes">Large file (>4GB)</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">False</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="tooltip_markup" translatable="yes">Allow 64 bit MP4 file which can be over 4GB.
-
-<b>Caution:</b> This option may break device compatibility.</property>
- <property name="halign">start</property>
- <property name="draw_indicator">True</property>
- <signal name="toggled" handler="setting_widget_changed_cb" swapped="no"/>
- </object>
- <packing>
- <property name="top_attach">1</property>
- <property name="left_attach">1</property>
- <property name="width">1</property>
- <property name="height">1</property>
- </packing>
- </child>
</object>
<packing>
<property name="expand">False</property>
job->mux = mux->format;
if (job->mux & HB_MUX_MASK_MP4)
{
- job->largeFileSize = ghb_settings_get_boolean(js, "Mp4LargeFile");
job->mp4_optimize = ghb_settings_get_boolean(js, "Mp4HttpOptimize");
}
else
{
- job->largeFileSize = FALSE;
job->mp4_optimize = FALSE;
}
if (!job->start_at_preview)
<false />
<key>PictureKeepRatio</key>
<true />
- <key>Mp4LargeFile</key>
- <false />
<key>AudioAllowMP3Pass</key>
<true />
<key>AudioAllowAACPass</key>
// Next line in the display (Container options)
// Container Options: - Chapter Markers
- gboolean ipod = FALSE, http = FALSE, large = FALSE;
+ gboolean ipod = FALSE, http = FALSE;
if (mux->format & HB_MUX_MASK_MP4)
{
ipod = ghb_settings_get_boolean(settings, "Mp4iPodCompatible");
http = ghb_settings_get_boolean(settings, "Mp4HttpOptimize");
- large = ghb_settings_get_boolean(settings, "Mp4LargeFile");
}
- if (http || ipod || large || markers)
+ if (http || ipod || markers)
{
const char *prefix = " ";
XPRINT(_("<b>Container Options:</b><small>"));
XPRINT(_("%sWeb Optimized"), prefix);
prefix = " - ";
}
- if (large)
- {
- XPRINT(_("%sLarge File Size (>4GB)"), prefix);
- prefix = " - ";
- }
XPRINT("</small>\n");
}
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>0</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>0</integer>
<key>Mp4iPodCompatible</key>
<integer>1</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>1</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>1</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>1</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>1</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>1</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>0</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>0</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>0</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>0</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
<false/>
<key>Mp4HttpOptimize</key>
<integer>0</integer>
- <key>Mp4LargeFile</key>
- <integer>1</integer>
<key>Mp4iPodCompatible</key>
<integer>0</integer>
<key>PictureAutoCrop</key>
int mux;
char * file;
- /* Allow MP4 files > 4 gigs */
- int largeFileSize;
int mp4_optimize;
int ipod_atom;
if (job->mux & HB_MUX_MASK_MP4)
{
json_t *mp4_dict;
- mp4_dict = json_pack_ex(&error, 0, "{s:o, s:o, s:o}",
+ mp4_dict = json_pack_ex(&error, 0, "{s:o, s:o}",
"Mp4Optimize", json_boolean(job->mp4_optimize),
- "LargeFileSize", json_boolean(job->largeFileSize),
"IpodAtom", json_boolean(job->ipod_atom));
json_object_set_new(dest_dict, "Mp4Options", mp4_dict);
}
"{"
"s:i,"
// Destination {File, Mux, ChapterMarkers, Mp4Options {
- // Mp4Optimize, LargeFileSize, IpodAtom}
- "s:{s?s, s:i, s:b s?{s?b, s?b, s?b}},"
+ // Mp4Optimize, IpodAtom}
+ "s:{s?s, s:i, s:b s?{s?b, s?b}},"
// Source {Angle, Range {ChapterStart, ChapterEnd, PtsToStart, PtsToStop,
// FrameToStart, FrameToStop, StartAtPreview, SeekPoints}
"s:{s?i, s:{s?i, s?i, s?I, s?I, s?i, s?i, s?i, s?i}},"
"ChapterMarkers", unpack_b(&job->chapter_markers),
"Mp4Options",
"Mp4Optimize", unpack_b(&job->mp4_optimize),
- "LargeFileSize", unpack_b(&job->largeFileSize),
"IpodAtom", unpack_b(&job->ipod_atom),
"Source",
"Angle", unpack_i(&job->angle),
hb_log(" + container: %s", hb_container_get_long_name(job->mux));
switch (job->mux)
{
- case HB_MUX_MP4V2:
- if (job->largeFileSize)
- hb_log(" + 64-bit chunk offsets");
case HB_MUX_AV_MP4:
if (job->mp4_optimize)
hb_log(" + optimized for HTTP streaming (fast start)");
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @0;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @0;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @1;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @1;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @1;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @1;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @1;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @1;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @0;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @0;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @0;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @0;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
/* Container format and related settings */
preset[@"FileFormat"] = @"MP4 file";
- preset[@"Mp4LargeFile"] = @1;
preset[@"Mp4HttpOptimize"] = @0;
preset[@"Mp4iPodCompatible"] = @0;
commandString << " -I"
end
- # 64-bit files
- if hash["Mp4LargeFile"] == 1
- commandString << " -4"
- end
-
#MP4 Optimize for HTTP Streaming
if hash["Mp4HttpOptimize"].to_i == 1
commandString << " -O"
commandString << " -I"
end
- # 64-bit files
- if hash["Mp4LargeFile"] == 1
- commandString << " -4"
- end
-
#MP4 Optimize for HTTP Streaming
if hash["Mp4HttpOptimize"].to_i == 1
commandString << " -O"
commandString << "job->ipod_atom = 1;\n "
end
- # 64-bit files
- if hash["Mp4LargeFile"] == 1
- commandString << "job->largeFileSize = 1;\n "
- end
-
#MP4 Optimize for HTTP Streaming
if hash["Mp4HttpOptimize"].to_i == 1
commandString << "job->mp4_optimize = 1;\n "
commandString << " -I"
end
- # 64-bit files
- if hash["Mp4LargeFile"] == 1
- commandString << " -4"
- end
-
#MP4 Optimize for HTTP Streaming
if hash["Mp4HttpOptimize"].to_i == 1
commandString << " -O"
static int maxHeight = 0;
static int maxWidth = 0;
static int turbo_opts_enabled = 0;
-static int largeFileSize = 0;
static int preset = 0;
static char * preset_name = 0;
static int cfr = 0;
{
mux = HB_MUX_MP4;
}
- job->largeFileSize = 1;
vcodec = HB_VCODEC_X264;
job->vquality = 22.0;
filter_vrate.den = 900000;
{
mux = HB_MUX_MP4;
}
- job->largeFileSize = 1;
vcodec = HB_VCODEC_X264;
job->vquality = 20.0;
filter_vrate.den = 900000;
{
mux = HB_MUX_MP4;
}
- job->largeFileSize = 1;
vcodec = HB_VCODEC_X264;
job->vquality = 20.0;
filter_vrate.den = 900000;
{
mux = HB_MUX_MP4;
}
- job->largeFileSize = 1;
vcodec = HB_VCODEC_X264;
job->vquality = 20.0;
filter_vrate.den = 900000;
{
mux = HB_MUX_MP4;
}
- job->largeFileSize = 1;
vcodec = HB_VCODEC_X264;
job->vquality = 20.0;
filter_vrate.den = 900000;
{
mux = HB_MUX_MP4;
}
- job->largeFileSize = 1;
vcodec = HB_VCODEC_X264;
job->vquality = 20.0;
if( !atracks )
job->mux = mux;
}
// then, muxer options
- if (largeFileSize)
- {
- job->largeFileSize = 1;
- }
if (mp4_optimize)
{
job->mp4_optimize = 1;
{ "format", required_argument, NULL, 'f' },
{ "input", required_argument, NULL, 'i' },
{ "output", required_argument, NULL, 'o' },
- { "large-file", no_argument, NULL, '4' },
{ "optimize", no_argument, NULL, 'O' },
{ "ipod-atom", no_argument, NULL, 'I' },
{ "use-opencl", no_argument, NULL, 'P' },
case 'o':
output = strdup( optarg );
break;
- case '4':
- largeFileSize = 1;
- break;
case 'O':
mp4_optimize = 1;
break;