cp += snprintf(cp,ep-cp, _("cell times:"));
for( int i=0; i<cell_times.size(); ++i ) {
if( (i%4) == 0 ) *cp++ = '\n';
- cp += snprintf(cp,ep-cp,_(" %3d. %8.3f"),i,cell_times.get(i));
+ cp += snprintf(cp,ep-cp," %3d. %8.3f",i,cell_times.get(i));
}
cp += snprintf(cp,ep-cp, "\n");
}
asset->video_data = mpeg3_has_video(fd);
if( !result && asset->video_data ) {
- asset->interlace_mode = BC_ILACE_MODE_UNDETECTED;
+//TODO: this is not as easy as just looking at headers.
+//most interlaced media is rendered as FRM, not TOP/BOT in coding ext hdrs.
+//currently, just using the assetedit menu to set the required result as needed.
+// if( asset->interlace_mode == BC_ILACE_MODE_UNDETECTED )
+// asset->interlace_mode = mpeg3_detect_interlace(fd, 0);
if( !asset->layers ) {
asset->layers = mpeg3_total_vstreams(fd);
}
{
const char *exec_path = File::get_cinlib_path();
sprintf(mjpeg_command, "%s/%s", exec_path, HVPEG_EXE);
+ append_vcommand_line(mjpeg_command);
if(asset->aspect_ratio > 0)
{
append_vcommand_line(asset->vmpeg_cmodel == BC_YUV422P ? "-422" : "");
if(asset->vmpeg_fix_bitrate)
{
- append_vcommand_line("--cbr -b");
+ append_vcommand_line("-b");
append_vcommand_line(bitrate_string);
}
else
case 2: asset->vmpeg_progressive = 1; break;
}
-// Be quiet
- strcat(mjpeg_command, " -v0");
-
char string[BCTEXTLEN];
// The current usage of mpeg2enc requires bitrate of 0 when quantization is fixed and
// quantization of 1 when bitrate is fixed. Perfectly intuitive.
// verify colormodel supported in MPEG output
switch( output_cmodel ) {
case BC_YUV420P:
+ if( file->preferences->dvd_yuv420p_interlace &&
+ ( asset->interlace_mode == BC_ILACE_MODE_TOP_FIRST ||
+ asset->interlace_mode == BC_ILACE_MODE_BOTTOM_FIRST ) )
+ output_cmodel = BC_YUV420PI;
case BC_YUV422P:
break;
default:
// frame->get_h(),
// temp_frame->get_color_model(),
// frame->get_color_model()); sleep(1);
- BC_CModels::transfer(temp_frame->get_rows(),
- frame->get_rows(),
- temp_frame->get_y(),
- temp_frame->get_u(),
- temp_frame->get_v(),
- frame->get_y(),
- frame->get_u(),
- frame->get_v(),
- 0,
- 0,
- frame->get_w(),
- frame->get_h(),
- 0,
- 0,
- temp_frame->get_w(),
- temp_frame->get_h(),
- frame->get_color_model(),
- temp_frame->get_color_model(),
- 0,
- frame->get_w(),
- temp_frame->get_w());
+ temp_frame->transfer_from(frame);
//printf("FileMPEG::write_frames %d\n", __LINE__);sleep(1);
mjpeg_y = temp_frame->get_y();
int stream_cmdl = mpeg3_colormodel(fd,file->current_layer);
int stream_color_model = bc_colormodel(stream_cmdl);
int frame_color_model = frame->get_color_model();
- int frame_cmdl = zmpeg3_cmdl(frame_color_model);
+ int frame_cmdl = asset->interlace_mode == BC_ILACE_MODE_NOTINTERLACED ?
+ zmpeg3_cmdl(frame_color_model) : -1;
mpeg3_show_subtitle(fd, file->current_layer, file->playback_subtitle);
-
switch( frame_color_model ) { // check for direct copy
case BC_YUV420P:
+ if( frame_cmdl < 0 ) break;
case BC_YUV422P:
if( stream_color_model == frame_color_model &&
width == frame->get_w() && height == frame->get_h() ) {
char *y, *u, *v;
mpeg3_read_yuvframe_ptr(fd, &y, &u, &v, file->current_layer);
if( y && u && v ) {
+ if( stream_color_model == BC_YUV420P &&
+ file->preferences->dvd_yuv420p_interlace && (
+ asset->interlace_mode == BC_ILACE_MODE_TOP_FIRST ||
+ asset->interlace_mode == BC_ILACE_MODE_BOTTOM_FIRST ) )
+ stream_color_model = BC_YUV420PI;
BC_CModels::transfer(frame->get_rows(), 0,
- frame->get_y(),
- frame->get_u(),
- frame->get_v(),
- (unsigned char*)y,
- (unsigned char*)u,
- (unsigned char*)v,
- 0, 0, width, height,
- 0, 0, frame->get_w(), frame->get_h(),
- stream_color_model,
- frame_color_model,
- 0,
- width,
- frame->get_w());
+ frame->get_y(), frame->get_u(), frame->get_v(),
+ (unsigned char*)y, (unsigned char*)u, (unsigned char*)v,
+ 0,0, width,height, 0,0, frame->get_w(),frame->get_h(),
+ stream_color_model, frame_color_model, 0, width, frame->get_w());
}
return result;
}
-
-
-
-
-
-
-
-
-
-
-
MPEGDerivative::MPEGDerivative(int x, int y, MPEGConfigVideo *gui)
: BC_PopupMenu(x, y, 150, derivative_to_string(gui->asset->vmpeg_derivative))
{
int MPEGDerivative::string_to_derivative(char *string)
{
- if(!strcasecmp(derivative_to_string(1), string))
- return 1;
- if(!strcasecmp(derivative_to_string(2), string))
- return 2;
-
+ if( !strcasecmp(derivative_to_string(1), string) ) return 1;
+ if( !strcasecmp(derivative_to_string(2), string) ) return 2;
return 1;
}
char* MPEGDerivative::derivative_to_string(int derivative)
{
- switch(derivative)
- {
- case 1:
- return _("MPEG-1");
- break;
-
- case 2:
- return _("MPEG-2");
- break;
-
- default:
- return _("MPEG-1");
- break;
+ switch(derivative) {
+ case 1: return _("MPEG-1");
+ case 2: return _("MPEG-2");
}
+ return _("MPEG-1");
}
-
-
-
-
-
-
-
-
-
MPEGPreset::MPEGPreset(int x, int y, MPEGConfigVideo *gui)
: BC_PopupMenu(x, y, 200, value_to_string(gui->asset->vmpeg_preset))
{
void MPEGPreset::create_objects()
{
- for(int i = 0; i < 10; i++)
- {
+ for(int i = 0; i < 14; i++) {
add_item(new BC_MenuItem(value_to_string(i)));
}
}
int MPEGPreset::string_to_value(char *string)
{
- for(int i = 0; i < 10; i++)
- {
+ for(int i = 0; i < 14; i++) {
if(!strcasecmp(value_to_string(i), string))
return i;
}
char* MPEGPreset::value_to_string(int derivative)
{
- switch(derivative)
- {
- case 0: return _("Generic MPEG-1"); break;
- case 1: return _("standard VCD"); break;
- case 2: return _("user VCD"); break;
- case 3: return _("Generic MPEG-2"); break;
- case 4: return _("standard SVCD"); break;
- case 5: return _("user SVCD"); break;
- case 6: return _("VCD Still sequence"); break;
- case 7: return _("SVCD Still sequence"); break;
- case 8: return _("DVD NAV"); break;
- case 9: return _("DVD"); break;
- default: return _("Generic MPEG-1"); break;
+ switch( derivative ) {
+ case 0: return _("Generic MPEG-1"); break;
+ case 1: return _("standard VCD"); break;
+ case 2: return _("user VCD"); break;
+ case 3: return _("Generic MPEG-2"); break;
+ case 4: return _("standard SVCD"); break;
+ case 5: return _("user SVCD"); break;
+ case 6: return _("VCD Still sequence"); break;
+ case 7: return _("SVCD Still sequence"); break;
+ case 8: return _("DVD NAV"); break;
+ case 9: return _("DVD"); break;
+ case 10: return _("ATSC 480i"); break;
+ case 11: return _("ATSC 480p"); break;
+ case 12: return _("ATSC 720p"); break;
+ case 13: return _("ATSC 1080i"); break;
}
+ return _("Generic MPEG-1");
}