int main(int argc, char **argv) { int use_stdin = FALSE; char *input_name = NULL; int had_input_name = FALSE; PS_reader_p ps; // The PS file we're reading int max = 0; // The maximum number of PS packets to read (or 0) int verbose = FALSE; // True => output diagnostic/progress messages int err = 0; int ii = 1; if (argc < 2) { print_usage(); return 0; } while (ii < argc) { if (argv[ii][0] == '-') { if (!strcmp("--help",argv[ii]) || !strcmp("-h",argv[ii]) || !strcmp("-help",argv[ii])) { print_usage(); return 0; } else if (!strcmp("-err",argv[ii])) { CHECKARG("psdots",ii); if (!strcmp(argv[ii+1],"stderr")) redirect_output_stderr(); else if (!strcmp(argv[ii+1],"stdout")) redirect_output_stdout(); else { fprint_err("### psdots: " "Unrecognised option '%s' to -err (not 'stdout' or" " 'stderr')\n",argv[ii+1]); return 1; } ii++; } else if (!strcmp("-verbose",argv[ii]) || !strcmp("-v",argv[ii])) { verbose = TRUE; } else if (!strcmp("-max",argv[ii]) || !strcmp("-m",argv[ii])) { CHECKARG("psdots",ii); err = int_value("psdots",argv[ii],argv[ii+1],TRUE,10,&max); if (err) return 1; ii++; } else if (!strcmp("-stdin",argv[ii])) { use_stdin = TRUE; had_input_name = TRUE; // so to speak } else { fprint_err("### psdots: " "Unrecognised command line switch '%s'\n",argv[ii]); return 1; } } else { if (had_input_name) { fprint_err("### psdots: Unexpected '%s'\n",argv[ii]); return 1; } else { input_name = argv[ii]; had_input_name = TRUE; } } ii++; } if (!had_input_name) { print_err("### psdots: No input file specified\n"); return 1; } err = open_PS_file(input_name,FALSE,&ps); if (err) { fprint_err("### psdots: Unable to open input file %s\n", (use_stdin?"<stdin>":input_name)); return 1; } fprint_msg("Reading from %s\n",(use_stdin?"<stdin>":input_name)); if (max) fprint_msg("Stopping after %d PS packets\n",max); err = report_ps_dots(ps,max,verbose); if (err) print_err("### psdots: Error reporting on input stream\n"); err = close_PS_file(&ps); if (err) { fprint_err("### psdots: Error closing input file %s\n", (use_stdin?"<stdin>":input_name)); return 1; } return 0; }
int main(int argc, char **argv) { int had_video_name = FALSE; int had_audio_name = FALSE; int had_output_name = FALSE; char *video_name = NULL; char *audio_name = NULL; char *output_name = NULL; int err = 0; ES_p video_es = NULL; access_unit_context_p h264_video_context = NULL; avs_context_p avs_video_context = NULL; int audio_file = -1; TS_writer_p output1 = NULL; // TS_writer_p output2 = NULL; int quiet = FALSE; int verbose = FALSE; int debugging = FALSE; int audio_samples_per_frame = ADTS_SAMPLES_PER_FRAME; int audio_sample_rate = CD_RATE; int video_frame_rate = DEFAULT_VIDEO_FRAME_RATE; int audio_type = AUDIO_ADTS; int video_type = VIDEO_H264; int pat_pmt_freq = 0; int ii = 1; #if TEST_PTS_DTS test_pts(); return 0; #endif if (argc < 2) { print_usage(); return 0; } while (ii < argc) { if (argv[ii][0] == '-') { if (!strcmp("--help",argv[ii]) || !strcmp("-help",argv[ii]) || !strcmp("-h",argv[ii])) { print_usage(); return 0; } else if (!strcmp("-err",argv[ii])) { CHECKARG("esmerge",ii); if (!strcmp(argv[ii+1],"stderr")) redirect_output_stderr(); else if (!strcmp(argv[ii+1],"stdout")) redirect_output_stdout(); else { fprint_err("### esmerge: " "Unrecognised option '%s' to -err (not 'stdout' or" " 'stderr')\n",argv[ii+1]); return 1; } ii++; } else if (!strcmp("-verbose",argv[ii]) || !strcmp("-v",argv[ii])) { verbose = TRUE; } else if (!strcmp("-quiet",argv[ii]) || !strcmp("-q",argv[ii])) { quiet = TRUE; } else if (!strcmp("-x",argv[ii])) { debugging = TRUE; quiet = FALSE; } else if (!strcmp("-rate",argv[ii])) { CHECKARG("esmerge",ii); err = int_value("esmerge",argv[ii],argv[ii+1],TRUE,10,&audio_sample_rate); if (err) return 1; ii++; } else if (!strcmp("-cd",argv[ii])) { audio_sample_rate = CD_RATE; } else if (!strcmp("-dat",argv[ii])) { audio_sample_rate = DAT_RATE; } else if (!strcmp("-vidrate",argv[ii])) { CHECKARG("esmerge",ii); err = int_value("esmerge",argv[ii],argv[ii+1],TRUE,10,&video_frame_rate); if (err) return 1; ii++; } else if (!strcmp("-adts",argv[ii])) { audio_type = AUDIO_ADTS; } else if (!strcmp("-l2",argv[ii])) { audio_type = AUDIO_L2; } else if (!strcmp("-ac3", argv[ii])) { audio_type = AUDIO_AC3; } else if (!strcmp("-h264",argv[ii])) { video_type = VIDEO_H264; } else if (!strcmp("-mp2adts", argv[ii])) { audio_type = AUDIO_ADTS_MPEG2; } else if (!strcmp("-mp4adts", argv[ii])) { audio_type = AUDIO_ADTS_MPEG4; } else if (!strcmp("-avs",argv[ii])) { video_type = VIDEO_AVS; } else if (!strcmp("-patpmtfreq", argv[ii])) { CHECKARG("esmerge",ii); err = int_value("esmerge", argv[ii], argv[ii+1], TRUE, 10, &pat_pmt_freq); if (err) { return 1; } ++ii; } else { fprint_err("### esmerge: " "Unrecognised command line switch '%s'\n",argv[ii]); return 1; } } else { if (!had_video_name) { video_name = argv[ii]; had_video_name = TRUE; } else if (!had_audio_name) { audio_name = argv[ii]; printf("got audio name 123 %s\n",audio_name); had_audio_name = TRUE; } else if (!had_output_name) { output_name = argv[ii]; had_output_name = TRUE; } else { fprint_err("### esmerge: Unexpected '%s'\n",argv[ii]); return 1; } } ii++; } if (!had_video_name) { print_err("### esmerge: No video input file specified\n"); return 1; } /* if (!had_audio_name) { print_err("### esmerge: No audio input file specified\n"); return 1; }*/ if (!had_output_name) { print_err("### esmerge: No output file specified\n"); return 1; } char output_name1[255]; char output_name2[255]; strcpy(output_name1, output_name); strcpy(output_name2, output_name); int num1=atoi(audio_name); char fileSerial1[20]; char fileSerial2[20]; sprintf(fileSerial1,"%d.ts", num1); sprintf(fileSerial2,"%d.te", num1); strcat(output_name1,fileSerial1); strcat(output_name2,fileSerial2); uint32_t timeElapsed=0; err = open_elementary_stream(video_name,&video_es); if (err) { print_err("### esmerge: " "Problem starting to read video as ES - abandoning reading\n"); return 1; } if (video_type == VIDEO_H264) { err = build_access_unit_context(video_es,&h264_video_context); if (err) { print_err("### esmerge: " "Problem starting to read video as H.264 - abandoning reading\n"); close_elementary_stream(&video_es); return 1; } } else if (video_type == VIDEO_AVS) { err = build_avs_context(video_es,&avs_video_context); if (err) { print_err("### esmerge: " "Problem starting to read video as H.264 - abandoning reading\n"); close_elementary_stream(&video_es); return 1; } } else { print_err("### esmerge: Unknown video type\n"); return 1; } /* audio_file = open_binary_file(audio_name,FALSE); if (audio_file == -1) { print_err("### esmerge: " "Problem opening audio file - abandoning reading\n"); close_elementary_stream(&video_es); free_access_unit_context(&h264_video_context); free_avs_context(&avs_video_context); return 1; }*/ err = tswrite_open(TS_W_FILE,output_name1,NULL,0,quiet,&output1); //err = tswrite_open(TS_W_FILE,output_name2,NULL,0,quiet,&output2); if (err) { fprint_err("### esmerge: " "Problem opening output file %s - abandoning reading\n", output_name); close_elementary_stream(&video_es); close_file(audio_file); free_access_unit_context(&h264_video_context); free_avs_context(&avs_video_context); return 1; } /* switch (audio_type) { case AUDIO_ADTS: audio_samples_per_frame = ADTS_SAMPLES_PER_FRAME; break; case AUDIO_L2: audio_samples_per_frame = L2_SAMPLES_PER_FRAME; break; case AUDIO_AC3: audio_samples_per_frame = AC3_SAMPLES_PER_FRAME; break; default: // hmm - or we could give up... audio_samples_per_frame = ADTS_SAMPLES_PER_FRAME; break; } */ if (!quiet) { fprint_msg("Reading video from %s\n",video_name); fprint_msg("Reading audio from %s (as %s)\n",audio_name,AUDIO_STR(audio_type)); fprint_msg("Writing output to %s\n",output_name); fprint_msg("Audio sample rate: %dHz (%.2fKHz)\n",audio_sample_rate, audio_sample_rate/1000.0); fprint_msg("Audio samples per frame: %d\n",audio_samples_per_frame); fprint_msg("Video frame rate: %dHz\n",video_frame_rate); } if (video_type == VIDEO_H264) err = merge_with_h264(h264_video_context,audio_file,output1,//output2, audio_type, audio_samples_per_frame,audio_sample_rate, video_frame_rate, pat_pmt_freq, quiet,verbose,debugging,num1, &timeElapsed); else if (video_type == VIDEO_AVS) printf("disable"); /*err = merge_with_avs(avs_video_context,audio_file,output, audio_type, audio_samples_per_frame,audio_sample_rate, video_frame_rate, pat_pmt_freq, quiet,verbose,debugging);*/ else { print_err("### esmerge: Unknown video type\n"); return 1; } if (err) { print_err("### esmerge: Error merging video and audio streams\n"); close_elementary_stream(&video_es); close_file(audio_file); free_access_unit_context(&h264_video_context); free_avs_context(&avs_video_context); (void) tswrite_close(output1,quiet); //(void) tswrite_close(output2,quiet); return 1; } FILE *pFileLen = fopen (output_name2,"w"); fprintf(pFileLen, "%.2f", timeElapsed/100.0); fclose(pFileLen); close_elementary_stream(&video_es); close_file(audio_file); free_access_unit_context(&h264_video_context); free_avs_context(&avs_video_context); err = tswrite_close(output1,quiet); //err = tswrite_close(output2,quiet); if (err) { fprint_err("### esmerge: Error closing output %s\n",output_name); return 1; } return 0; }
int main(int argc, char **argv) { int use_stdout = FALSE; int use_stdin = FALSE; char *input_name = NULL; char *output_name = NULL; int had_input_name = FALSE; int had_output_name = FALSE; char *action_switch = "None"; EXTRACT extract = EXTRACT_VIDEO; // What we're meant to extract int input = -1; // Our input file descriptor FILE *output = NULL; // The stream we're writing to (if any) int max = 0; // The maximum number of TS packets to read (or 0) uint32_t pid = 0; // The PID of the (single) stream to extract int quiet = FALSE; // True => be as quiet as possible int verbose = FALSE; // True => output diagnostic/progress messages int use_pes = FALSE; int err = 0; int ii = 1; if (argc < 2) { print_usage(); return 0; } while (ii < argc) { if (argv[ii][0] == '-') { if (!strcmp("--help",argv[ii]) || !strcmp("-h",argv[ii]) || !strcmp("-help",argv[ii])) { print_usage(); return 0; } else if (!strcmp("-verbose",argv[ii]) || !strcmp("-v",argv[ii])) { verbose = TRUE; quiet = FALSE; } else if (!strcmp("-quiet",argv[ii]) || !strcmp("-q",argv[ii])) { verbose = FALSE; quiet = TRUE; } else if (!strcmp("-max",argv[ii]) || !strcmp("-m",argv[ii])) { CHECKARG("ts2es",ii); err = int_value("ts2es",argv[ii],argv[ii+1],TRUE,10,&max); if (err) return 1; ii++; } else if (!strcmp("-pes",argv[ii]) || !strcmp("-ps",argv[ii])) { use_pes = TRUE; } else if (!strcmp("-pid",argv[ii])) { CHECKARG("ts2es",ii); err = unsigned_value("ts2es",argv[ii],argv[ii+1],0,&pid); if (err) return 1; ii++; extract = EXTRACT_PID; } else if (!strcmp("-video",argv[ii])) { extract = EXTRACT_VIDEO; } else if (!strcmp("-audio",argv[ii])) { extract = EXTRACT_AUDIO; } else if (!strcmp("-stdin",argv[ii])) { use_stdin = TRUE; had_input_name = TRUE; // so to speak } else if (!strcmp("-stdout",argv[ii])) { use_stdout = TRUE; had_output_name = TRUE; // so to speak redirect_output_stderr(); } else if (!strcmp("-err",argv[ii])) { CHECKARG("ts2es",ii); if (!strcmp(argv[ii+1],"stderr")) redirect_output_stderr(); else if (!strcmp(argv[ii+1],"stdout")) redirect_output_stdout(); else { fprint_err("### ts2es: " "Unrecognised option '%s' to -err (not 'stdout' or" " 'stderr')\n",argv[ii+1]); return 1; } ii++; } else { fprint_err("### ts2es: " "Unrecognised command line switch '%s'\n",argv[ii]); return 1; } } else { if (had_input_name && had_output_name) { fprint_err("### ts2es: Unexpected '%s'\n",argv[ii]); return 1; } else if (had_input_name) // shouldn't do this if had -stdout { output_name = argv[ii]; had_output_name = TRUE; } else { input_name = argv[ii]; had_input_name = TRUE; } } ii++; } if (!had_input_name) { print_err("### ts2es: No input file specified\n"); return 1; } if (!had_output_name) { fprint_err("### ts2es: " "No output file specified for %s\n",action_switch); return 1; } // ============================================================ // Testing PES output if (use_pes && extract == EXTRACT_PID) { print_err("### ts2es: -pid is not supported with -pes\n"); return 1; } if (use_pes && use_stdout) { print_err("### ts2es: -stdout is not supported with -pes\n"); return 1; } if (use_pes && use_stdin) { print_err("### ts2es: -stdin is not supported with -pes\n"); return 1; } if (use_pes) { err = extract_av_via_pes(input_name,output_name,(extract==EXTRACT_VIDEO), quiet); if (err) { print_err("### ts2es: Error writing via PES\n"); return 1; } return 0; } // ============================================================ // Try to stop extraneous data ending up in our output stream if (use_stdout) { verbose = FALSE; quiet = TRUE; } if (use_stdin) input = STDIN_FILENO; else { input = open_binary_file(input_name,FALSE); if (input == -1) { fprint_err("### ts2es: Unable to open input file %s\n",input_name); return 1; } } if (!quiet) fprint_msg("Reading from %s\n",(use_stdin?"<stdin>":input_name)); if (had_output_name) { if (use_stdout) output = stdout; else { output = fopen(output_name,"wb"); if (output == NULL) { if (!use_stdin) (void) close_file(input); fprint_err("### ts2es: " "Unable to open output file %s: %s\n",output_name, strerror(errno)); return 1; } } if (!quiet) fprint_msg("Writing to %s\n",(use_stdout?"<stdout>":output_name)); } if (!quiet) { if (extract == EXTRACT_PID) fprint_msg("Extracting packets for PID %04x (%d)\n",pid,pid); else fprint_msg("Extracting %s\n",(extract==EXTRACT_VIDEO?"video":"audio")); } if (max && !quiet) fprint_msg("Stopping after %d TS packets\n",max); if (extract == EXTRACT_PID) err = extract_pid(input,output,pid,max,verbose,quiet); else err = extract_av(input,output,(extract==EXTRACT_VIDEO), max,verbose,quiet); if (err) { print_err("### ts2es: Error extracting data\n"); if (!use_stdin) (void) close_file(input); if (!use_stdout) (void) fclose(output); return 1; } // And tidy up when we're finished if (!use_stdout) { errno = 0; err = fclose(output); if (err) { fprint_err("### ts2es: Error closing output file %s: %s\n", output_name,strerror(errno)); (void) close_file(input); return 1; } } if (!use_stdin) { err = close_file(input); if (err) fprint_err("### ts2es: Error closing input file %s\n",input_name); } return 0; }
int main(int argc, char **argv) { int use_stdin = FALSE; int use_stdout = FALSE; int use_tcpip = FALSE; int port = 88; // Useful default port number char *input_name = NULL; char *output_name = NULL; int had_input_name = FALSE; int had_output_name = FALSE; PS_reader_p ps = NULL; TS_writer_p output = NULL; int verbose = FALSE; int quiet = FALSE; int max = 0; uint32_t pmt_pid = 0x66; uint32_t video_pid = 0x68; uint32_t pcr_pid = video_pid; // Use PCRs from the video stream uint32_t audio_pid = 0x67; int keep_audio = TRUE; int repeat_program_every = 100; int pad_start = 8; int err = 0; int ii = 1; int video_type = VIDEO_H262; // hopefully a sensible default int force_stream_type = FALSE; int video_stream = -1; int audio_stream = -1; int want_ac3_audio = FALSE; int input_is_dvd = TRUE; int want_dolby_as_dvb = TRUE; if (argc < 2) { print_usage(); return 0; } while (ii < argc) { if (argv[ii][0] == '-') { if (!strcmp("--help",argv[ii]) || !strcmp("-help",argv[ii]) || !strcmp("-h",argv[ii])) { print_usage(); return 0; } else if (!strcmp("-avc",argv[ii]) || !strcmp("-h264",argv[ii])) { force_stream_type = TRUE; video_type = VIDEO_H264; } else if (!strcmp("-h262",argv[ii])) { force_stream_type = TRUE; video_type = VIDEO_H262; } else if (!strcmp("-vtype",argv[ii])) { CHECKARG("ps2ts",ii); err = int_value("ps2ts",argv[ii],argv[ii+1],TRUE,0, &video_type); if (err) return 1; ii++; force_stream_type = TRUE; } else if (!strcmp("-mp42",argv[ii])) { force_stream_type = TRUE; video_type = VIDEO_MPEG4_PART2; } else if (!strcmp("-dolby",argv[ii])) { CHECKARG("ps2ts",ii); if (!strcmp("dvb",argv[ii+1])) want_dolby_as_dvb = TRUE; else if (!strcmp("atsc",argv[ii+1])) want_dolby_as_dvb = FALSE; else { print_err("### ps2ts: -dolby must be followed by dvb or atsc\n"); return 1; } ii++; } else if (!strcmp("-stdin",argv[ii])) { had_input_name = TRUE; // more or less use_stdin = TRUE; } else if (!strcmp("-stdout",argv[ii])) { had_output_name = TRUE; // more or less use_stdout = TRUE; redirect_output_stderr(); } else if (!strcmp("-err",argv[ii])) { CHECKARG("ps2ts",ii); if (!strcmp(argv[ii+1],"stderr")) redirect_output_stderr(); else if (!strcmp(argv[ii+1],"stdout")) redirect_output_stdout(); else { fprint_err("### ps2ts: " "Unrecognised option '%s' to -err (not 'stdout' or" " 'stderr')\n",argv[ii+1]); return 1; } ii++; } else if (!strcmp("-dvd",argv[ii])) { input_is_dvd = TRUE; } else if (!strcmp("-notdvd",argv[ii]) || !strcmp("-nodvd",argv[ii])) { input_is_dvd = FALSE; } else if (!strcmp("-host",argv[ii])) { CHECKARG("ps2ts",ii); err = host_value("ps2ts",argv[ii],argv[ii+1],&output_name,&port); if (err) return 1; had_output_name = TRUE; // more or less use_tcpip = TRUE; ii++; } else if (!strcmp("-verbose",argv[ii]) || !strcmp("-v",argv[ii])) { verbose = TRUE; quiet = FALSE; } else if (!strcmp("-quiet",argv[ii]) || !strcmp("-q",argv[ii])) { verbose = FALSE; quiet = TRUE; } else if (!strcmp("-max",argv[ii]) || !strcmp("-m",argv[ii])) { CHECKARG("ps2ts",ii); err = int_value("ps2ts",argv[ii],argv[ii+1],TRUE,10,&max); if (err) return 1; ii++; } else if (!strcmp("-prepeat",argv[ii])) { CHECKARG("ps2ts",ii); err = int_value("ps2ts",argv[ii],argv[ii+1],TRUE,10, &repeat_program_every); if (err) return 1; ii++; } else if (!strcmp("-pad",argv[ii])) { CHECKARG("ps2ts",ii); err = int_value("ps2ts",argv[ii],argv[ii+1],TRUE,10,&pad_start); if (err) return 1; ii++; } else if (!strcmp("-vpid",argv[ii])) { CHECKARG("ps2ts",ii); err = unsigned_value("ps2ts",argv[ii],argv[ii+1],0,&video_pid); if (err) return 1; ii++; } else if (!strcmp("-apid",argv[ii])) { CHECKARG("ps2ts",ii); err = unsigned_value("ps2ts",argv[ii],argv[ii+1],0,&audio_pid); if (err) return 1; ii++; } else if (!strcmp("-pmt",argv[ii])) { CHECKARG("ps2ts",ii); err = unsigned_value("ps2ts",argv[ii],argv[ii+1],0,&pmt_pid); if (err) return 1; ii++; } else if (!strcmp("-noaudio",argv[ii])) { keep_audio = FALSE; } else if (!strcmp("-vstream",argv[ii])) { CHECKARG("ps2ts",ii); err = int_value_in_range("ps2ts",argv[ii],argv[ii+1],0,0xF,0, &video_stream); if (err) return 1; ii++; } else if (!strcmp("-astream",argv[ii])) { CHECKARG("ps2ts",ii); err = int_value_in_range("ps2ts",argv[ii],argv[ii+1],0,0x1F,0, &audio_stream); if (err) return 1; want_ac3_audio = FALSE; ii++; } else if (!strcmp("-ac3stream",argv[ii])) { CHECKARG("ps2ts",ii); err = int_value_in_range("ps2ts",argv[ii],argv[ii+1],0,0x7,0, &audio_stream); if (err) return 1; want_ac3_audio = TRUE; input_is_dvd = TRUE; ii++; } else { fprint_err("### ps2ts: " "Unrecognised command line switch '%s'\n",argv[ii]); return 1; } } else { if (had_input_name && had_output_name) { fprint_err("### ps2ts: Unexpected '%s'\n",argv[ii]); return 1; } else if (had_input_name) { output_name = argv[ii]; had_output_name = TRUE; } else { input_name = argv[ii]; had_input_name = TRUE; } } ii++; } if (!had_input_name) { print_err("### ps2ts: No input file specified\n"); return 1; } if (!had_output_name) { print_err("### ps2ts: No output file specified\n"); return 1; } // Try to stop extraneous data ending up in our output stream if (use_stdout) { verbose = FALSE; quiet = TRUE; } err = open_PS_file(input_name,quiet,&ps); if (err) { fprint_err("### ps2ts: Unable to open input %s\n", (use_stdin?"<stdin>":input_name)); return 1; } if (!quiet) fprint_msg("Reading from %s\n",(use_stdin?"<stdin>":input_name)); // Try to decide what sort of data stream we have if (force_stream_type || use_stdin) { if (!quiet) fprint_msg("Reading input as %s (0x%02x)\n", h222_stream_type_str(video_type),video_type); } else { err = determine_PS_video_type(ps,&video_type); if (err) return 1; if (!quiet) fprint_msg("Video appears to be %s (0x%02x)\n", h222_stream_type_str(video_type),video_type); } if (!quiet) { if (input_is_dvd) print_msg("Treating input as from DVD\n"); else print_msg("Treating input as NOT from DVD\n"); print_msg("Reading video from "); if (video_stream == -1) print_msg("first stream found"); else fprint_msg("stream %0#x (%d)",video_stream,video_stream); if (keep_audio) { print_msg(", audio from "); if (audio_stream == -1) fprint_msg("first %s found",(want_ac3_audio?"AC3 stream":"stream")); else fprint_msg("%s %0#x (%d)",(want_ac3_audio?"AC3 stream":"stream"), audio_stream,audio_stream); print_msg("\n"); } fprint_msg("Writing video with PID 0x%02x",video_pid); if (keep_audio) fprint_msg(", audio with PID 0x%02x,",audio_pid); fprint_msg(" PMT PID 0x%02x, PCR PID 0x%02x\n",pmt_pid,pcr_pid); if (max) fprint_msg("Stopping after %d program stream packets\n",max); } if (use_stdout) err = tswrite_open(TS_W_STDOUT,NULL,NULL,0,quiet,&output); else if (use_tcpip) err = tswrite_open(TS_W_TCP,output_name,NULL,port,quiet,&output); else err = tswrite_open(TS_W_FILE,output_name,NULL,0,quiet,&output); if (err) { fprint_err("### ps2ts: Unable to open %s\n",output_name); (void) close_PS_file(&ps); return 1; } err = ps_to_ts(ps,output,pad_start,repeat_program_every, video_type,input_is_dvd, video_stream,audio_stream,want_ac3_audio, want_dolby_as_dvb,pmt_pid,pcr_pid,video_pid, keep_audio,audio_pid,max,verbose,quiet); if (err) { print_err("### ps2ts: Error transferring data\n"); (void) close_PS_file(&ps); (void) tswrite_close(output,TRUE); return 1; } // And tidy up when we're finished err = tswrite_close(output,quiet); if (err) fprint_err("### ps2ts: Error closing output %s: %s\n",output_name, strerror(errno)); err = close_PS_file(&ps); if (err) fprint_err("### ps2ts: Error closing input %s\n", (use_stdin?"<stdin>":input_name)); return 0; }
int main(int argc, char **argv) { char *input_name = NULL; int had_input_name = FALSE; int input = -1; int verbose = FALSE; int quiet = FALSE; int err = 0; int ii = 1; int decided = FALSE; int result = STREAM_IS_ERROR; if (argc < 2) { print_usage(); return 0; } while (ii < argc) { if (argv[ii][0] == '-') { if (!strcmp("--help",argv[ii]) || !strcmp("-h",argv[ii]) || !strcmp("-help",argv[ii])) { print_usage(); return STREAM_IS_ERROR; } else if (!strcmp("-verbose",argv[ii]) || !strcmp("-v",argv[ii])) { verbose = TRUE; quiet = FALSE; } else if (!strcmp("-err",argv[ii])) { CHECKARG("stream_type",ii); if (!strcmp(argv[ii+1],"stderr")) redirect_output_stderr(); else if (!strcmp(argv[ii+1],"stdout")) redirect_output_stdout(); else { fprint_err("### stream_type: " "Unrecognised option '%s' to -err (not 'stdout' or" " 'stderr')\n",argv[ii+1]); return 1; } ii++; } else if (!strcmp("-quiet",argv[ii]) || !strcmp("-q",argv[ii])) { verbose = FALSE; quiet = TRUE; } else { fprint_err("### stream_type: " "Unrecognised command line switch '%s'\n",argv[ii]); return STREAM_IS_ERROR; } } else { if (had_input_name) { fprint_err("### stream_type: Unexpected '%s'\n",argv[ii]); return STREAM_IS_ERROR; } else { input_name = argv[ii]; had_input_name = TRUE; } } ii++; } if (!had_input_name) { print_err("### stream_type: No input file specified\n"); return STREAM_IS_ERROR; } input = open_binary_file(input_name,FALSE); if (input == -1) { fprint_err("### stream_type: Unable to open input file %s\n", input_name); return 1; } if (!quiet) fprint_msg("Reading from %s\n",input_name); // Try to guess err = determine_packet_type(input,verbose,&decided,&result); if (err) { print_err("### Unable to decide on stream type due to error\n"); return STREAM_IS_ERROR; } if (!quiet) { if (!decided) { print_msg("Unable to decide\n"); result = STREAM_IS_UNSURE; } else { switch (result) { case STREAM_IS_TS: print_msg("It appears to be Transport Stream\n"); break; case STREAM_IS_PS: print_msg("It appears to be Program Stream\n"); break; case STREAM_IS_H262: print_msg("It appears to be Elementary Stream, MPEG-2 (H.262)\n"); break; case STREAM_IS_H264: print_msg("It appears to be Elementary Stream, MPEG-4 (H.264)\n"); break; case STREAM_IS_AVS: print_msg("It appears to be Elementary Stream, AVS\n"); break; case STREAM_MAYBE_PES: print_msg("It looks likely to be PES\n"); break; case STREAM_IS_UNSURE: print_msg("It is not recognised\n"); break; default: fprint_msg("Unexpected decision value %d\n",result); result = STREAM_IS_ERROR; break; } } } return result; }