On 3/25/19 3:59 PM, Michael Niedermayer wrote:
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

Yeah The XV file is a flv file which starts from 0x200000 byte and its _next__0x400_ bytes are encrypted by something like caesar cipher (the bytes after 0x200400 till the end of the file are not encrypted) . So, Please suggest what would be best solution for this situation and how can i change this.

    Thank you, Shivam Goyal




+
+
+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".


_______________________________________________
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".
_______________________________________________
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".

Reply via email to