Mailing List archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[vdr] Re: is it possible to recreate the index



Hi Carsten - kannst du mir sagen, wie ich folgnede Datei compilieren kann ?

Danke im Voraus !

> --------------------------------------------------------------------------
> -
> #include <stdio.h>

> #define BUFFER_SIZE  1024*128

> #define SC_PICTURE   0x00

> #define I_FRAME      1
> #define P_FRAME      2
> #define B_FRAME      3


> static FILE* fp;
> static FILE* idx;
> static int Foffset;

> unsigned char buf(int p)
> {
>    static unsigned char ringbuf[BUFFER_SIZE];

>    if ((p >= Foffset) && ( p < (Foffset+BUFFER_SIZE)) )
>        {return ringbuf[p-Foffset];}
>    Foffset=p;
>    if (fseek(fp, p, SEEK_SET)==0)
>    {
>       fread(ringbuf, 1, BUFFER_SIZE, fp);
>       return ringbuf[p-Foffset];
>    }
>    return 0;
> }


> int readfile(const unsigned char number)
> {
>    int filesize;
>    int c;
>    char fname[20];

>    sprintf(fname,"%03d.vdr", number);
>    fp = fopen(fname, "r");
>    if(!fp) { printf("Could not open %s.          \n", fname); return -1;}
>    fseek(fp, 0, SEEK_END);
>    filesize = ftell(fp);
>    printf("\nReading %s, %d bytes.\n", fname, filesize);
>    Foffset=filesize;
>    for (c=0; c < filesize-32; c++)
>       if (buf(c) == 0 && buf(c+1) == 0 && buf(c+2) == 1 &&
>       buf(c+3)==SC_PICTURE)
>       {
>          const char Ptype=(buf(c+5)>>3) & 0x07;
>          if ((Ptype == I_FRAME) || (Ptype == P_FRAME) || (Ptype ==
>          B_FRAME))
>          {
>             const char index_entry[8]={c, c>>8, c>>16, c>>24, Ptype,
>             number, 0};
>             const int  length = (buf(c+4) << 8) + buf(c+5) + 6;

>             if (fwrite(index_entry, 1, 8, idx) != 8)
>             { printf("Error writing index file\n"); return -1;}
>             if (Ptype == I_FRAME)
>             {
>                printf("I-Frame found at %d\r", c);
>                fflush(stdout);
>             }
>             c+=length;
>          }
>       }
>    fclose(fp);
>    return 0;
> }

> int main()
> {
>    int c;
>    idx = fopen("index.vdr", "w");
>    for (c=1; readfile(c)==0; c++) { }
>    fclose(idx);
>    return 0;
> }
> --------------------------------------------------------------------------
> -

> IIRC this is based on the original version and has some modifications
> I made. They improved matters for me, but it is quite possible that
> one of the other versions may work better for you. Let me know how
> this version works for you. If it is not perfect, I'll try to dig
> out one of the other versions or maybe someone who knows more about
> MPEG file formats would like to create a "universal" genindex that
> works with many different MPEG files?



>> Would it be an alternative to use DVB card directly for
>> regenerating the index by pumping the mpeg file into one
>> (which ?) of the DVB devices and record the output with vdr ?

> Good idea!
> I do not think that the driver supports this.
> But maybe one of the conversion tools that comes with
> the driver does.
> Check out DVB/apps/mpegtools and see if you can come
> up with a shell script that converts what you have into
> something that genindex AND vdr like.

> Carsten.






Home | Main Index | Thread Index