summaryrefslogtreecommitdiffstats
path: root/debian/transcode/transcode-1.1.7/import/tcxmlcheck.c
diff options
context:
space:
mode:
Diffstat (limited to 'debian/transcode/transcode-1.1.7/import/tcxmlcheck.c')
-rw-r--r--debian/transcode/transcode-1.1.7/import/tcxmlcheck.c257
1 files changed, 257 insertions, 0 deletions
diff --git a/debian/transcode/transcode-1.1.7/import/tcxmlcheck.c b/debian/transcode/transcode-1.1.7/import/tcxmlcheck.c
new file mode 100644
index 00000000..9503ba0f
--- /dev/null
+++ b/debian/transcode/transcode-1.1.7/import/tcxmlcheck.c
@@ -0,0 +1,257 @@
+/*
+ * tcxmlcheck.c
+ *
+ * Copyright (C) Malanchini Marzio - March 2003
+ *
+ * This file is part of transcode, a video stream processing tool
+ *
+ * transcode is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * transcode is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNU Make; see the file COPYING. If not, write to
+ * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#include "transcode.h"
+
+#include <math.h>
+
+#include "ioxml.h"
+#include "ioaux.h"
+#include "magic.h"
+
+#define EXE "tcxmlcheck"
+
+#define MAX_BUF 1024
+#define VIDEO_MODE 0x01
+#define AUDIO_MODE 0x02
+
+void version(void)
+{
+ /* print id string to stderr */
+ fprintf(stderr, "%s (%s v%s) (C) 2001-2003 Thomas Oestreich,"
+ " 2003-2010 Transcode Team\n",
+ EXE, PACKAGE, VERSION);
+}
+
+static void usage(int status)
+{
+ version();
+ fprintf(stderr,"\nUsage: %s [options] [-]\n", EXE);
+#ifdef HAVE_LIBXML2
+ fprintf(stderr," -i name input video/audio xml file [stdin]\n");
+ fprintf(stderr," -p name input audio xml file [none]\n");
+ fprintf(stderr," -B binary output to stdout (used by transcode) [off]\n");
+ fprintf(stderr," -S write stdin into shared memory (used by transcode)[off]\n");
+ fprintf(stderr," -V check only video file input [off]\n");
+ fprintf(stderr," -A check only audio file input [off]\n");
+#endif
+ fprintf(stderr," -v print version\n");
+
+ exit(status);
+}
+
+#ifdef HAVE_LIBXML2
+
+int binary_dump = 1; //force to use the binary dump in probe_xml
+
+
+/* ------------------------------------------------------------
+ *
+ * print a usage/version message
+ *
+ * ------------------------------------------------------------*/
+
+
+
+static int f_complete_vob_info(vob_t *p_vob,int s_type_check)
+{
+ audiovideo_t s_audiovideo;
+ int s_rc;
+
+ s_rc=0;
+ if ((s_type_check & VIDEO_MODE) !=0)
+ {
+ if( p_vob->video_in_file != NULL)
+ {
+ int err = f_manage_input_xml(p_vob->video_in_file,1,&s_audiovideo);
+ if(err)
+ {
+ tc_log_error(EXE,"Error parsing XML %s file",p_vob->video_in_file);
+ if (err == 1) {
+ /* free tree */
+ f_manage_input_xml(NULL,0,&s_audiovideo);
+ }
+ return(1);
+ }
+ if (s_audiovideo.p_next->s_v_codec != TC_CODEC_UNKNOWN)
+ p_vob->im_v_codec=s_audiovideo.p_next->s_v_codec;
+ if (s_audiovideo.p_next->s_a_codec != TC_CODEC_UNKNOWN)
+ p_vob->im_a_codec=s_audiovideo.p_next->s_a_codec;
+ if ((s_audiovideo.p_next->s_v_tg_height !=0) || (s_audiovideo.p_next->s_v_tg_width !=0))
+ s_rc=2;
+ (void) f_manage_input_xml(NULL,0,&s_audiovideo);
+ }
+ }
+ if ((s_type_check & AUDIO_MODE) !=0)
+ {
+ if( p_vob->audio_in_file != NULL) //there is an xml file for audio?
+ {
+ if( f_manage_input_xml(p_vob->audio_in_file,1,&s_audiovideo))
+ {
+ tc_log_error(EXE,"Error parsing XML %s file",p_vob->video_in_file);
+ (void) f_manage_input_xml(NULL,0,&s_audiovideo);
+ return(1);
+ }
+ if (s_audiovideo.p_next->s_a_codec != TC_CODEC_UNKNOWN)
+ p_vob->im_a_codec=s_audiovideo.p_next->s_a_codec;
+ (void) f_manage_input_xml(NULL,0,&s_audiovideo);
+ }
+ }
+ return(s_rc);
+}
+
+/* ------------------------------------------------------------
+ *
+ * check the consistence of XML file
+ *
+ * ------------------------------------------------------------*/
+
+int main(int argc, char *argv[])
+{
+
+ vob_t s_vob;
+ const char *p_in_v_file="/dev/stdin",*p_in_a_file=NULL,*p_audio_tmp=NULL,*p_video_tmp=NULL;
+ pid_t s_pid;
+ int s_bin_dump=0,s_type_check=VIDEO_MODE|AUDIO_MODE;
+ int s_rc,s_cmd;
+
+ //proper initialization
+ memset(&s_vob, 0, sizeof(vob_t));
+ s_pid=getpid();
+
+
+ s_vob.audio_in_file= "/dev/zero";
+ s_vob.video_in_file= "/dev/zero";
+
+ libtc_init(&argc, &argv);
+
+ while ((s_cmd = getopt(argc, argv, "i:p:vSBAVh")) != -1)
+ {
+ switch (s_cmd)
+ {
+ case 'i':
+ if(optarg[0]=='-')
+ usage(EXIT_FAILURE);
+ p_in_v_file = optarg;
+ break;
+ case 'p':
+ if(optarg[0]=='-')
+ usage(EXIT_FAILURE);
+ p_in_a_file = optarg;
+ break;
+ case 'B':
+ s_bin_dump = 1;
+ break;
+ case 'A':
+ s_type_check = AUDIO_MODE;
+ break;
+ case 'V':
+ s_type_check = VIDEO_MODE;
+ break;
+ case 'v':
+ version();
+ exit(0);
+ break;
+ case 'h':
+ usage(EXIT_SUCCESS);
+ default:
+ usage(EXIT_FAILURE);
+ }
+ }
+
+ if(optind < argc)
+ {
+ if(strcmp(argv[optind],"-")!=0)
+ usage(EXIT_FAILURE);
+ }
+ // need at least a file name
+ if(argc==1)
+ usage(EXIT_FAILURE);
+ /* ------------------------------------------------------------
+ *
+ * fill out defaults for info structure
+ *
+ * ------------------------------------------------------------*/
+
+ if (s_bin_dump)
+ {
+ if((tc_pread(STDIN_FILENO, (uint8_t *) &s_vob, sizeof(vob_t))) != sizeof(vob_t))
+ {
+ tc_log_error(EXE,"Error reading data from stdin");
+ exit(1);
+ }
+ p_video_tmp=s_vob.video_in_file;
+ p_audio_tmp=s_vob.audio_in_file;
+ }
+ if(p_in_v_file==NULL)
+ {
+ s_vob.video_in_file= p_in_v_file;
+ if(p_in_a_file==NULL)
+ s_vob.audio_in_file= p_in_a_file;
+ else
+ s_vob.audio_in_file= p_in_a_file;
+ }
+ else
+ {
+ s_vob.video_in_file= p_in_v_file;
+ if(p_in_a_file==NULL)
+ s_vob.audio_in_file= p_in_v_file;
+ else
+ s_vob.audio_in_file= p_in_a_file;
+ }
+
+
+ /* ------------------------------------------------------------
+ *
+ * start with the program
+ *
+ * ------------------------------------------------------------*/
+ if ((s_rc=f_complete_vob_info(&s_vob,s_type_check)) == 1)
+ return(1);
+ else
+ {
+ if (s_bin_dump)
+ {
+ s_vob.video_in_file=p_video_tmp;
+ s_vob.audio_in_file=p_audio_tmp;
+ if(tc_pwrite(STDOUT_FILENO, (uint8_t *) &s_vob, sizeof(vob_t)) != sizeof(vob_t))
+ {
+ tc_log_error(EXE,"Error writing data to stdout");
+ exit(1);
+ }
+ if(tc_pwrite(STDOUT_FILENO, (uint8_t *)&s_rc, sizeof(int)) != sizeof(int))
+ {
+ tc_log_error(EXE,"Error writing data to stdout");
+ exit(1);
+ }
+ }
+ return(0);
+ }
+}
+#else
+int main(int argc, char *argv[])
+{
+ usage(EXIT_SUCCESS);
+ return(EXIT_SUCCESS); // Avoid a compiler warning
+}
+#endif