On Sun, Mar 24, 2019 at 04:35:40PM +0530, Shivam Goyal wrote: > The attached patch is for ticket #3720 > > https://trac.ffmpeg.org/ticket/3720 > > I have tested this demuxer on the files 1.xv and 5.xv attached with the > ticket > > http://samples.ffmpeg.org/ffmpeg-bugs/trac/ticket3720/ > > > It is working on both of these files. > > As XV video files are flv files with some encrypted data. These can be > converted to flv without loosing video quality (and it would be really > fast). I have also tried this and it is working "ffmpeg -i 1.xv -c copy > converted.flv". > > > Please suggest any improvements > > [...]
> diff --git a/libavformat/xvtools.h b/libavformat/xvtools.h > new file mode 100644 > index 0000000000..42c2c65c46 > --- /dev/null > +++ b/libavformat/xvtools.h > @@ -0,0 +1,95 @@ > +int flvid = 0x46; > + > + > +int byte_shift(int byte,int shift); > +int find_rot(AVIOContext *pb); > +int xvio_r8(AVIOContext *pb, int rot); > +unsigned int xvio_rb16(AVIOContext *s, int rot); > +unsigned int xvio_rb24(AVIOContext *s, int rot); > +unsigned int xvio_rb32(AVIOContext *s, int rot); > +uint64_t xvio_rb64(AVIOContext *s, int rot); > +int xv_string_decrypt(int64_t curr_pos, char *buffer, int length, int rot); > + > + > + > +int byte_shift(int byte,int shift){ > + return ((byte + shift)&0xff); > +} > + > + > +int find_rot(AVIOContext *pb){ > + int64_t curr_pos = avio_tell(pb); > + avio_seek(pb,0x200000,SEEK_SET); > + int rot = flvid - avio_r8(pb); > + avio_seek(pb,curr_pos, SEEK_SET); > + return rot; > +} > + > + > + > +int xvio_r8(AVIOContext *pb, int rot){ > + int64_t curr_pos = avio_tell(pb); > + if(curr_pos < 0x200400){ > + int ret=avio_r8(pb); > + if(ret == 0)return 0; > + ret = byte_shift(ret,rot); > + return ret; > + } > + int ret=avio_r8(pb); > + return ret; > +} There is so much wrong with this code global variables are not ok in a demuxer that can have multiple instances global variables do not belong in headers either also non static inline functions do not belong in headers this xvio stuff all looks like a bad idea. Do i guess correctly that this fileformat is flv but scrambled at the IO layer ? if this is true it may be possible to implement a xv demuxer as a descrambler which than passes the data on to a unchanged flv demuxer. If that how this xv fundamentally works then that would be much cleaner. Also theflv demuxer duplication is not ok > + > + > +unsigned int xvio_rb16(AVIOContext *s, int rot) > +{ > + unsigned int val; > + val = xvio_r8(s, rot) << 8; > + val |= xvio_r8(s, rot); > + return val; > +} > + > + > +unsigned int xvio_rb24(AVIOContext *s, int rot) > +{ > + unsigned int val; > + val = xvio_rb16(s, rot) << 8; > + val |= xvio_r8(s, rot); > + return val; > +} > + > + > +unsigned int xvio_rb32(AVIOContext *s, int rot) > +{ > + unsigned int val; > + val = xvio_rb16(s, rot) << 16; > + val |= xvio_rb16(s, rot); > + return val; > +} > + > + > +uint64_t xvio_rb64(AVIOContext *s, int rot) > +{ > + uint64_t val; > + val = (uint64_t)xvio_rb32(s, rot) << 32; > + val |= (uint64_t)xvio_rb32(s, rot); > + return val; > +} > + > + > + > +int xv_string_decrypt(int64_t curr_pos, char *buffer, int length, int rot){ > + if(curr_pos>=0x200400){ > + return 0; > + } > + for(int i=0;i<length;i++){ > + if((curr_pos+i) < 0x200400){ > + buffer[i] = byte_shift(buffer[i],rot); > + } > + else{ > + break; > + } > + } > + return 0; > +} > + > + > -- > 2.21.0 > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe". -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
signature.asc
Description: PGP signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".