summaryrefslogtreecommitdiffstats
path: root/TOOLS/vivodump.c
diff options
context:
space:
mode:
Diffstat (limited to 'TOOLS/vivodump.c')
-rw-r--r--TOOLS/vivodump.c314
1 files changed, 0 insertions, 314 deletions
diff --git a/TOOLS/vivodump.c b/TOOLS/vivodump.c
deleted file mode 100644
index 5c2e81c23b..0000000000
--- a/TOOLS/vivodump.c
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * This program 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 of the License, or
- * (at your option) any later version.
- *
- * This program 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 this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <inttypes.h>
-
-#include "loader/wine/mmreg.h"
-#include "loader/wine/vfw.h"
-
-#include "stream/stream.h"
-#include "libmpdemux/muxer.h"
-#include "libmpdemux/demuxer.h"
-
-/* linking hacks */
-char *info_name;
-char *info_artist;
-char *info_genre;
-char *info_subject;
-char *info_copyright;
-char *info_sourceform;
-char *info_comment;
-
-char* out_filename = NULL;
-char* force_fourcc=NULL;
-char* passtmpfile="divx2pass.log";
-
-static const short h263_format[8][2] = {
- { 0, 0 },
- { 128, 96 },
- { 176, 144 },
- { 352, 288 },
- { 704, 576 },
- { 1408, 1152 },
- { 320, 240 }
-};
-
-unsigned char* buffer;
-int bufptr=0;
-int bitcnt=0;
-unsigned char buf=0;
-
-static unsigned int x_get_bits(int n){
- unsigned int x=0;
- while(n-->0){
- if(!bitcnt){
- // fill buff
- buf=buffer[bufptr++];
- bitcnt=8;
- }
- //x=(x<<1)|(buf&1);buf>>=1;
- x=(x<<1)|(buf>>7);buf<<=1;
- --bitcnt;
- }
- return x;
-}
-
-#define get_bits(xxx,n) x_get_bits(n)
-#define get_bits1(xxx) x_get_bits(1)
-#define skip_bits(xxx,n) x_get_bits(n)
-#define skip_bits1(xxx) x_get_bits(1)
-
-int format;
-int width=320;
-int height=240;
-
-/* most is hardcoded. should extend to handle all h263 streams */
-static int h263_decode_picture_header(unsigned char *b_ptr)
-{
- int i;
-
- for(i=0;i<16;i++) printf(" %02X",b_ptr[i]); printf("\n");
-
- buffer=b_ptr;
- bufptr=bitcnt=buf=0;
-
- /* picture header */
- if (get_bits(&s->gb, 22) != 0x20){
- printf("bad picture header\n");
- return -1;
- }
- skip_bits(&s->gb, 8); /* picture timestamp */
-
- if (get_bits1(&s->gb) != 1){
- printf("bad marker\n");
- return -1; /* marker */
- }
- if (get_bits1(&s->gb) != 0){
- printf("bad h263 id\n");
- return -1; /* h263 id */
- }
- skip_bits1(&s->gb); /* split screen off */
- skip_bits1(&s->gb); /* camera off */
- skip_bits1(&s->gb); /* freeze picture release off */
-
- format = get_bits(&s->gb, 3);
-
- if (format != 7) {
- printf("h263_plus = 0 format = %d\n",format);
- /* H.263v1 */
- width = h263_format[format][0];
- height = h263_format[format][1];
- printf("%d x %d\n",width,height);
-// if (!width) return -1;
-
- printf("pict_type=%d\n",get_bits1(&s->gb));
- printf("unrestricted_mv=%d\n",get_bits1(&s->gb));
-#if 1
- printf("SAC: %d\n",get_bits1(&s->gb));
- printf("advanced prediction mode: %d\n",get_bits1(&s->gb));
- printf("PB frame: %d\n",get_bits1(&s->gb));
-#else
- if (get_bits1(&s->gb) != 0)
- return -1; /* SAC: off */
- if (get_bits1(&s->gb) != 0)
- return -1; /* advanced prediction mode: off */
- if (get_bits1(&s->gb) != 0)
- return -1; /* not PB frame */
-#endif
- printf("qscale=%d\n",get_bits(&s->gb, 5));
- skip_bits1(&s->gb); /* Continuous Presence Multipoint mode: off */
- } else {
- printf("h263_plus = 1\n");
- /* H.263v2 */
- if (get_bits(&s->gb, 3) != 1){
- printf("H.263v2 A error\n");
- return -1;
- }
- if (get_bits(&s->gb, 3) != 6){ /* custom source format */
- printf("custom source format\n");
- return -1;
- }
- skip_bits(&s->gb, 12);
- skip_bits(&s->gb, 3);
- printf("pict_type=%d\n",get_bits(&s->gb, 3) + 1);
-// if (s->pict_type != I_TYPE &&
-// s->pict_type != P_TYPE)
-// return -1;
- skip_bits(&s->gb, 7);
- skip_bits(&s->gb, 4); /* aspect ratio */
- width = (get_bits(&s->gb, 9) + 1) * 4;
- skip_bits1(&s->gb);
- height = get_bits(&s->gb, 9) * 4;
- printf("%d x %d\n",width,height);
- //if (height == 0)
- // return -1;
- printf("qscale=%d\n",get_bits(&s->gb, 5));
- }
-
- /* PEI */
- while (get_bits1(&s->gb) != 0) {
- skip_bits(&s->gb, 8);
- }
-// s->f_code = 1;
-// s->width = width;
-// s->height = height;
- return 0;
-}
-
-int postable[32768];
-
-int main(int argc,char ** argv){
-int c;
-FILE *f;
-FILE *f2;
-muxer_t* avi;
-muxer_stream_t* mux;
-//unsigned char* buffer=malloc(0x200000);
-int i,len;
-int v_id=0;
-int flag2=0;
-int prefix=0;
-
-// check if enough args were given
-if ( argc < 3 ){
- printf("Too few arguments given!\n"
- "Usage: %s <input_file> <output_file>\n", argv[0]);
-
- return -1;
-}
-// input
-if(!(f=fopen(argv[1],"rb"))){
- printf("Couldn't open input file.\n");
- return -1;
-}
-// output
-if(!(f2=fopen(argv[2],"wb"))){
- printf("Couldn't open output file.\n");
- return -1;
-}
-
-avi=muxer_new_muxer(MUXER_TYPE_AVI,f2);
-mux=muxer_new_stream(avi,MUXER_TYPE_VIDEO);
-
-mux->buffer_size=0x200000;
-mux->buffer=malloc(mux->buffer_size);
-
-mux->h.dwScale=1;
-mux->h.dwRate=10;
-
-mux->bih=malloc(sizeof(*mux->bih));
-mux->bih->biSize=sizeof(*mux->bih);
-mux->bih->biPlanes=1;
-mux->bih->biBitCount=24;
-mux->bih->biCompression=0x6f766976;// 7669766f;
-muxer_write_header(avi);
-
-/*
-c=fgetc(f); if(c) printf("error! not vivo file?\n");
-len=0;
-while((c=fgetc(f))>=0x80) len+=0x80*(c&0x0F);
-len+=c;
-printf("hdr1: %d\n",len);
-for(i=0;i<len;i++) fgetc(f);
-*/
-
-while((c=fgetc(f))>=0){
-
- printf("%08lX %02X\n",ftell(f),c);
-
- prefix=0;
- if(c==0x82){
- prefix=1;
- //continue;
- c=fgetc(f);
- printf("%08lX %02X\n",ftell(f),c);
- }
-
- if(c==0x00){
- // header
- int len=0;
- while((c=fgetc(f))>=0x80) len+=0x80*(c&0x0F);
- len+=c;
- printf("header: 00 (%d)\n",len);
- for(i=0;i<len;i++) fgetc(f);
- continue;
- }
-
- if((c&0xF0)==0x40){
- // audio
- len=24;
- if(prefix) len=fgetc(f);
- printf("audio: %02X (%d)\n",c,len);
- for(i=0;i<len;i++) fgetc(f);
- continue;
- }
- if((c&0xF0)==0x30){
- // audio
- len=40;
- if(prefix) len=fgetc(f);
- printf("audio: %02X (%d)\n",c,len);
- for(i=0;i<len;i++) fgetc(f);
- continue;
- }
- if(flag2 || (((c&0xF0)==0x10 || (c&0xF0)==0x20) && (c&0x0F)!=(v_id&0xF))){
- // end of frame:
- printf("Frame size: %d\n",mux->buffer_len);
- h263_decode_picture_header(mux->buffer);
- muxer_write_chunk(mux,mux->buffer_len,0x10, MP_NOPTS_VALUE, MP_NOPTS_VALUE);
- mux->buffer_len=0;
-
- if((v_id&0xF0)==0x10) fprintf(stderr,"hmm. last video packet %02X\n",v_id);
- }
- flag2=0;
- if((c&0xF0)==0x10){
- // 128 byte
- len=128;
- if(prefix) len=fgetc(f);
- printf("video: %02X (%d)\n",c,len);
- fread(mux->buffer+mux->buffer_len,len,1,f);
- mux->buffer_len+=len;
- v_id=c;
- continue;
- }
- if((c&0xF0)==0x20){
- int len=fgetc(f);
- printf("video: %02X (%d)\n",c,len);
- fread(mux->buffer+mux->buffer_len,len,1,f);
- mux->buffer_len+=len;
- flag2=1;
- v_id=c;
- continue;
- }
- printf("error: %02X!\n",c);
- exit(1);
-}
-
-if(!width) width=320;
-if(!height) height=240;
-
-mux->bih->biWidth=width;
-mux->bih->biHeight=height;
-mux->bih->biSizeImage=3*width*height;
-
-muxer_write_index(avi);
-fseek(f2,0,SEEK_SET);
-muxer_write_header(avi);
-
-return 0;
-}