From c46d29a5bbe5605c6f3666a11fd13f857511ab1e Mon Sep 17 00:00:00 2001 From: gryf Date: Tue, 7 Apr 2009 19:42:44 +0000 Subject: [PATCH] added video module - replacement for midentify added some mocks for images tests --- src/lib/video.py | 170 ++++++++++++++++++ src/test/mocks/Canon_40D.jpg | Bin 0 -> 7958 bytes src/test/mocks/Canon_40D_photoshop_import.jpg | Bin 0 -> 9686 bytes src/test/mocks/Canon_DIGITAL_IXUS_400.jpg | Bin 0 -> 9198 bytes src/test/mocks/Fujifilm_FinePix6900ZOOM.jpg | Bin 0 -> 4278 bytes src/test/mocks/Fujifilm_FinePix_E500.jpg | Bin 0 -> 2241 bytes src/test/mocks/Kodak_CX7530.jpg | Bin 0 -> 5958 bytes src/test/mocks/Konica_Minolta_DiMAGE_Z3.jpg | Bin 0 -> 36971 bytes src/test/mocks/Nikon_COOLPIX_P1.jpg | Bin 0 -> 7068 bytes src/test/mocks/Nikon_D70.jpg | Bin 0 -> 14034 bytes src/test/mocks/Olympus_C8080WZ.jpg | Bin 0 -> 3224 bytes src/test/mocks/PaintTool_sample.jpg | Bin 0 -> 5738 bytes src/test/mocks/Panasonic_DMC-FZ30.jpg | Bin 0 -> 10769 bytes src/test/mocks/Pentax_K10D.jpg | Bin 0 -> 12077 bytes src/test/mocks/Ricoh_Caplio_RR330.jpg | Bin 0 -> 3662 bytes src/test/mocks/Samsung_Digimax_i50_MP3.jpg | Bin 0 -> 45286 bytes src/test/mocks/Sony_HDR-HC3.jpg | Bin 0 -> 3565 bytes src/test/mocks/WWL_(Polaroid)_ION230.jpg | Bin 0 -> 3998 bytes src/test/mocks/long_description.jpg | Bin 0 -> 7585 bytes src/test/mocks/test_image_info.txt | 44 +++++ src/test/unit/video_test.py | 105 +++++++++++ 21 files changed, 319 insertions(+) create mode 100644 src/lib/video.py create mode 100644 src/test/mocks/Canon_40D.jpg create mode 100644 src/test/mocks/Canon_40D_photoshop_import.jpg create mode 100644 src/test/mocks/Canon_DIGITAL_IXUS_400.jpg create mode 100644 src/test/mocks/Fujifilm_FinePix6900ZOOM.jpg create mode 100644 src/test/mocks/Fujifilm_FinePix_E500.jpg create mode 100644 src/test/mocks/Kodak_CX7530.jpg create mode 100644 src/test/mocks/Konica_Minolta_DiMAGE_Z3.jpg create mode 100644 src/test/mocks/Nikon_COOLPIX_P1.jpg create mode 100644 src/test/mocks/Nikon_D70.jpg create mode 100644 src/test/mocks/Olympus_C8080WZ.jpg create mode 100644 src/test/mocks/PaintTool_sample.jpg create mode 100644 src/test/mocks/Panasonic_DMC-FZ30.jpg create mode 100644 src/test/mocks/Pentax_K10D.jpg create mode 100644 src/test/mocks/Ricoh_Caplio_RR330.jpg create mode 100644 src/test/mocks/Samsung_Digimax_i50_MP3.jpg create mode 100644 src/test/mocks/Sony_HDR-HC3.jpg create mode 100644 src/test/mocks/WWL_(Polaroid)_ION230.jpg create mode 100644 src/test/mocks/long_description.jpg create mode 100644 src/test/mocks/test_image_info.txt create mode 100644 src/test/unit/video_test.py diff --git a/src/lib/video.py b/src/lib/video.py new file mode 100644 index 0000000..a100c65 --- /dev/null +++ b/src/lib/video.py @@ -0,0 +1,170 @@ +""" + Project: pyGTKtalog + Description: Gather video file information, make "screenshot" with content + of the movie file. Uses external tools like mplayer and + ImageMagick tools (montage, convert). + Type: lib + Author: Roman 'gryf' Dobosz, gryf73@gmail.com + Created: 2009-04-04 +""" +import os +import shutil +from tempfile import mkdtemp, mkstemp +import math + +from misc import float_to_string + +class Video(object): + """Class for retrive midentify script output and put it in dict. + Usually there is no need for such a detailed movie/clip information. + Midentify script belongs to mplayer package. + """ + + def __init__(self, filename): + """Init class instance. Filename of a video file is required.""" + self.filename = filename + self.tags = {} + + output = os.popen('midentify "%s"' % self.filename).readlines() + + attrs = {'ID_VIDEO_WIDTH': ['width', int], + 'ID_VIDEO_HEIGHT': ['height', int], + 'ID_LENGTH': ['length', lambda x: int(x.split(".")[0])], + # length is in seconds + 'ID_DEMUXER': ['container', str], + 'ID_VIDEO_FORMAT': ['video_format', str], + 'ID_VIDEO_CODEC': ['video_codec', str], + 'ID_AUDIO_CODEC': ['audio_codec', str], + 'ID_AUDIO_FORMAT': ['audio_format', str], + 'ID_AUDIO_NCH': ['audio_no_channels', int],} + + for line in output: + line = line.strip() + for attr in attrs: + if attr in line: + self.tags[attrs[attr][0]] = \ + attrs[attr][1](line.replace("%s=" % attr, "")) + + if 'length' in self.tags: + if self.tags['length'] > 0: + hours = self.tags['length'] / 3600 + seconds = self.tags['length'] - hours * 3600 + minutes = seconds / 60 + seconds -= minutes * 60 + length_str = "%02d:%02d:%02d" % (hours, minutes, seconds) + self.tags['duration'] = length_str + + def capture(self, out_width=1024): + """ + Extract images for given video filename and montage it into one, big + picture, similar to output from Windows Media Player thing, but without + captions and time (who need it anyway?). + Arguments: + @out_width - width of generated image. If actual image width + exceeds this number scale is performed. + Returns: image filename or None + + NOTE: You should remove returned file manually, or move it in some + other place, otherwise it stays in filesystem. + """ + + if not (self.tags.has_key('length') or self.tags.has_key('width')): + return None + + # Calculate number of pictures. Base is equivalent 72 pictures for + # 1:30:00 movie length + scale = int(10 * math.log(self.tags['length'], math.e) - 11) + no_pictures = self.tags['length'] / scale + if no_pictures > 8: + # for really short movies + no_pictures = (no_pictures / 8 ) * 8 # only multiple of 8, please. + + if not no_pictures: + # movie too short or length is 0 + return None + + if no_pictures < 4: + no_pictures = 4 + + tempdir = mkdtemp() + file_desc, image_fn = mkstemp() + os.close(file_desc) + self.__make_captures(tempdir, no_pictures) + self.__make_montage(tempdir, image_fn, no_pictures, out_width) + + shutil.rmtree(tempdir) + return image_fn + + + def __make_captures(self, directory, no_pictures): + """ + Make screens with mplayer into given directory + Arguments: + @directory - full output directory name + @no_pictures - number of pictures to take + """ + step = float(self.tags['length']/(no_pictures + 1)) + current_time = 0 + for dummy in range(1, no_pictures + 1): + current_time += step + time = float_to_string(current_time) + cmd = "mplayer \"%s\" -ao null -brightness 0 -hue 0 " \ + "-saturation 0 -contrast 0 -vf-clr -vo jpeg:outdir=\"%s\" -ss %s" \ + " -frames 1 2>/dev/null" + os.popen(cmd % (self.filename, directory, time)).readlines() + + shutil.move(os.path.join(directory, "00000001.jpg"), + os.path.join(directory, "picture_%s.jpg" % time)) + + def __make_montage(self, directory, image_fn, no_pictures, out_width): + """ + Generate one big image from screnshots and optionally resize it. + Arguments: + @directory - source directory containing images + @image_fn - destination final image + @no_pictures - number of pictures + @out_width - width of final image to be scaled to. + """ + scale = False + row_length = 4 + if no_pictures < 8: + row_length = 2 + + if (self.tags['width'] * row_length) > out_width: + scale = True + else: + for i in [8, 6, 5]: + if (no_pictures % i) == 0 and \ + (i * self.tags['width']) <= out_width: + row_length = i + break + + tile = "%dx%d" % (row_length, no_pictures / row_length) + + _curdir = os.path.abspath(os.path.curdir) + os.chdir(directory) + + # composite pictures + # readlines trick will make to wait for process end + cmd = "montage -tile %s -geometry +2+2 picture_*.jpg montage.jpg" + os.popen(cmd % tile).readlines() + + # scale it to minimum 'modern' width: 1024 + if scale: + cmd = "convert -scale %s montage.jpg montage_scaled.jpg" + os.popen(cmd % out_width).readlines() + shutil.move(os.path.join(directory, 'montage_scaled.jpg'), + image_fn) + else: + shutil.move(os.path.join(directory, 'montage.jpg'), + image_fn) + + os.chdir(_curdir) + + + def __str__(self): + str_out = '' + for key in self.tags: + str_out += "%20s: %s\n" % (key, self.tags[key]) + return str_out + diff --git a/src/test/mocks/Canon_40D.jpg b/src/test/mocks/Canon_40D.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6eb33f12d1d9b3e837c151e9913f0a82061028e1 GIT binary patch literal 7958 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 literal 0 HcmV?d00001 diff --git a/src/test/mocks/Canon_40D_photoshop_import.jpg b/src/test/mocks/Canon_40D_photoshop_import.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10ee97e2aa0069c7dd1e787d99fcf42b9e08adbb GIT binary patch literal 9686 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 z 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 literal 0 HcmV?d00001 diff --git a/src/test/mocks/Fujifilm_FinePix_E500.jpg b/src/test/mocks/Fujifilm_FinePix_E500.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8cf1e5ca4e12aba21288c9ebcc5749cf7b26ab21 GIT binary patch literal 2241 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 KSK4VGPX8BK&JPm+ literal 0 HcmV?d00001 diff --git a/src/test/mocks/Konica_Minolta_DiMAGE_Z3.jpg b/src/test/mocks/Konica_Minolta_DiMAGE_Z3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7ac84040c79648390b7f8e47c6c4f97fa5201227 GIT binary patch literal 36971 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 GQ~w8g-0AxO literal 0 HcmV?d00001 diff --git a/src/test/mocks/Nikon_COOLPIX_P1.jpg b/src/test/mocks/Nikon_COOLPIX_P1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6535feaf8dd4a063564f0820420c70fc752408c2 GIT binary patch literal 7068 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 literal 0 HcmV?d00001 diff --git a/src/test/mocks/Nikon_D70.jpg b/src/test/mocks/Nikon_D70.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8ea0bcc5b0a95ba353eea714ae5f6a8b5c2dc4fd GIT binary patch literal 14034 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 literal 0 HcmV?d00001 diff --git a/src/test/mocks/Olympus_C8080WZ.jpg b/src/test/mocks/Olympus_C8080WZ.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6771637aac0f698233869fdaeab1fb8f760788f2 GIT binary patch literal 3224 zcmd6pd0bP+7RTq_o3KX{2*#k55Oyt?ge4&q5s)QlfP@`Ugn$A4om(Sji9T#{D$-aqfXf8IO!%xAuzxo6It-^@LeD{q%S z0c1}%fg3;&1bDz7kUv#@;kqVfDF6b&OrQn;&;*ka6i^{$!bXOSkCwuwjbH$QJ>K*X z;&^`o@-!u%g>0tuK_Ro@TusU_$)5pip^kK@mW@U zYc61d+^vd?Q($UGmAoA?GgXlRp0TNtIgmlRDj>j)#bL9sbj6PBgH8k`=R-y^6g~)4 zfo3S;OL3n}jq&U*K_+G@#%m#~W-8Vq!nkTm#+Oo8vN~i9rGGQ@-o?Y`InuaKE7n#p#Oec#yuFE*=9uMHT0I4(=DKWMf=BH2K7;#0M0f|`*O1a+2@!}Ys%q*Qn$Y148K4M;p#+RbBtW6a2E4=w6r#2P+et-76t2ol zq;j@o6sQ?GS6$T=xAYrXMXcDWt}%r+m9A%OVrphS)7r+C%d_LV%yV^f_Yipc`uPV0 z1_g&mBBPcri;jt1xoUM%@|v~lwr$_Bb64u_J(*eA2M^^O{yw*`sJNuGti0mb>1yej zvo+_=U$}O?_C{TOLu1q3d#!EvAGCMKo<4it{i5gBm#=!?4ZI)x@bUMd;ZL|O1YinT ze<}MXT@@Q(objg4g2H#H#MgfkX^N|JqP2ZN+x#Bh_BlJZU=CCri>T;>^tys^HBFh!* zt@iKl7OiFRt~%_P>(w*t)oPkp|8CQVikdr#X*p4ut$xHR*F}w|ZVgdO8i_9H>z}m6 z4>n@t1+M;$z01v~InDZLIh=Q8>_XC~=3vY0@Q>`<$gA9CoyDo6{d2B9Tq!=rJgUCx z>zka)+7;;-scA)QlSfL)ve)}^Z)SRw9j)PlNm~nZW0vkVaF-$1tET_pdD|w(%00AS z{4p`-ad(VE-O~Y5?I2nlmh%r%tyY_v?QsbsEv~7JU%4xDnAWI0$bD{<@O$M?L*Q#|pv@*Yh3hay ziB@c8yvr?s~k|p)krCYbTIrKgmcG zM3=YycB)}&$dMz`U$4Ch98J}I89bxx!SDeoQ>qh|C@eg*TPm*GjlK*$vHf6f2Uxv0 z?mc?%hdSQ9sm%$7-=POS%XpH-OOPS9X;hQ-oI6=E?bLkP(B(M;!JH48N22^w+|Ny? zu;>LRrA;F5<<-%`8@@8Wuri1_+%wHfJe%=dGf70dO1b{%&Nq79p286mL9+IUYeSNo zZv!(mOJ)*!SzCp9WAjGCgn1=DskcP6cZ+K;_%M!~SkNn5yQOYYQAJDayImuBabu>7 zxsu(QpXX_gG;C|rdl4|a@yaf@yOyK7dd3d=_9k4)Td?`74c=8njFmaf75m~6Zf~Hj zcNS9(s*C809&W2vvFFy*KeLNrAL}|s)fTGnC~@}?cj`wA;?)C$bZLD}osT`kWVE#S zx=Renv@~?#Ua2=X>_BP!O8%pyo)_+c+n8O0_8rgmY3>M+v`<zi)ME=$e_I+vx-d(ThHqNO$`2ax6!y!|YQptIKO zJz#kH^)>c%mtJXQB_U%D9QYP$lvFo0-Ag-2lbJ{FC_Hpj)tD;NUg$i9 z%7`f_wml-v@-jX?<4MxVP8lgaqW4D7+jqv&C2<3>Ch2Wy9*hdx=pg;?e?Ia2m_cA; z=;+9Su2mIF$lX&O?JYkU_Qvv|`1G#6@HJNI^@q|f=>$EV9Wi9yW*^!3%;5CQ-XS?S zS6kzqIyiLWX{;nNv#g6RHWRfwy-NQPbw8EeU%%hS{boa1a-oCXg#%pEuKoHktw90J zZuxtR(iWr+JV@=-e1g2My_1r!>mLFv+zBmt0i}IYppN4&_Gc|MkE!^@rBB_WV5-QW zv`YJiCH&XU3sUrNHj`lRhlkNBN;WaNFhr1JK+oH6gwYh-#3>##Fc@GW^e Hkazq68Gr`U literal 0 HcmV?d00001 diff --git a/src/test/mocks/PaintTool_sample.jpg b/src/test/mocks/PaintTool_sample.jpg new file mode 100644 index 0000000000000000000000000000000000000000..463e05063ad9871e8912fefc75bd886ed0d3000d GIT binary patch literal 5738 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 GjQ#_2<=Aon literal 0 HcmV?d00001 diff --git a/src/test/mocks/Pentax_K10D.jpg b/src/test/mocks/Pentax_K10D.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eeaec60133d2b04e937b3b261a9655a208530685 GIT binary patch literal 12077 zcmd5?cU%)o*WPq`7XeX1M`}7rC<1{%K%^>&H6{U~X(XZOwV)^}R!|WY8(6VnL&e^~ zjuq<#5fv+TuZ?dujiA2wz4!g=+x&KN_RMq6%$%7yb7p6|n!8#ci&!>?4I#ia5-}2j zx>^mAq6&nW5X9klLk188SwrRsBxD1qx8SzW&{zZnSs_pm_*2~u2#n?*g8FD^7m(?t z!5{&S2xN`Hzc=8MGM^7NCa^qA*6(OP&Ooh{K3Bz5`$7LpykulwjK%Uyi!AF z0@`Jk+D0gV^3>1`fQA<0AT;0M z0JKq=y4+O&1Fg~MBoYXSHQnO?xklZ8d;mdd=omovu2N%QQTT%Gw+Gx3a2tVJZ8s{D zK*1A%(E^zy%5Ql9s=|A@LJ(XA7D8!87#2KfN8x)=jCK@$1GN4qL?G2QL<2J+HFOl* zRB*vHg=?n$@6w+ka2Ckyx(l%&Q$r&YBLh|BUGWD>zA zz@HWzA3w#xs8>Lr>(7LN?<@>%D=w4 zjzN|N5E+U=AzUD&B?4uM=sE>CfqG)#`HX;DqPh@B6dHrY85kNF1HfJj2#G+UkZ2SJ zg9hUQF$v^DXiJQhGcg=%oy5ht{kQnqOE zlJcb$%a&JFuUo%izLZZuP%m^)0Y@Ns(jNi@Ga4!^X|cGm4z*3F(F$@?=8M_eT+v-x-5PWzVx9d zDs=jFl5E*Mf;o4@lxHaFuL^ouSY8%f$HZ{uz&_i2REqOYp zbzAV6R(#O17%QUNf(eiIO3g+!(>|Umoid3zIdt*8^uq(MryjF&*)Xf{$WZaOC#!Ba zdbeN}A}-r}#P=hXCVn;j7f~d2?Z~*I!@Itk-Y(%(mxc#dXHC8LCCUAI?8$*UF?UWmbwnjE zVYBdmCAfwh-n5<o|g@N6+^FCpSe?D_@xPp>m*m-ZifX3lWD=IFC~Vqr_} z8Cmv`qJ)%)^CO2D51xAKl3kndOi0cBeY5>a_t9E5)|57ES5}?1v@E=u@40udBMs+v zZO(yVeeY%LNu!rtO_L?WANGEcwp9AftLWY>(~V=xI+|jtoZYzf@9{V4-k97ST!O|` zJ_$~#t2cWRU-R5jxKOg>TSuj=YX9cUcaQGX^cq&_)Xt%vd=UHgoSf5Qw)k{dAH)$U z_p}MkFJoQ2S4n14AIGmvsm1*Ur7d|}a`E($ssof=geAkBR^)ld-Qv&4TY13oVTn&< zEV(tW`A_1bxz|4#^

8^|ML*q78 z4hS_0E?^djWnzJni!Tt1BnoChh^I<96VNa_z!QMv{7hzYBwGUkPa&R~y5#5Q`{$GW zrShx*B7?yQAdmt`BtL-gQ;e4=xdna_g)7itgjeZ^6exIdp-dGNsEbnyGrN`bXc(NM zY8ep6#!`TSSA-J6d+Uy zC2D~BJRLAGTdI@-qsWCkjzlSt11Y5{!U-j5#QrlvrzAlx6adS>Hqe!(&(i@@xMG<| zphy(R6NLo=Q7Bnc#?O46K%$5%;mTQ3Nv1F>R~>rkO88x#PH-q|3`?FURS4lq2_;!N zsb4a5BI(Hjg;bQQY6Y1}fUf`$#1OQ7qMxr58v0*^^z(H>-7PUk508{RlW{B2=rQ>AX1nmP=Jb1X}% z1>Ar~r}$FI1aK1p4fu4jFNs0(B@>9gWFj5h3|}e<++-5q0X=~Pa06^0{7eP;;3iYZ zq@bv9B8g5U5eZR|L<%D?iWoto1xAvHQAApJcqE&qsc4Uy>FOIHRKmkYJz(Hjq@IN- zf*jR@`bi`Vr3VMVGaOJb=HIc^q8gQ&+WcIu8lyM)|HdHzZ=`cBJ^X>z(W%`5fHC8x zd|~GJNUl;43J1P^1gamAkV+yjsZ=JB>O){K;o9W-XgKW4@hZ=u$d=0RQ6hmDcnAfa>QBI@2_<}KzCzs$eJS8k zRh{>pu+<%puzu~ zrITSvMN)YRSgi!Gr%|cVW9eWjx0fC%1lCadW|hlV!GF%`DKk`0M&MAN1`8)wq#I2HN~(4nr5#NwO}_~Iq6+v3;7lh7`2Sc}w}ehvRDn#Y$d#+=7D@~t z(zS-|k)eaL2jz;#2;`weBJ7H_eV}3LP+HkUxim}86~n8Fs!c!he-Vffauq|kqFh0! zo_eiRccxAbjC+9`EGA%<3PP!xQhG3TP_~rE6=_ywhGr$v)?Y76hfjeA1kfx{W=nyE zHPD`19hjA?0E>3AK*ATuL4Rls^AlSK*S1JiZ7sM5QwL4U7Agf1T(Ihbfvko0VCtYL zJb^^O;>wh8caE2J!+*)piGX!nDd&QPMypxJ&_PnTK%Y92(1P?>-LPz~TqXelj!spI zj?)dw9Wz$IQ$`9EO1M4ATuD~<>`eJxrcSiS;zOp8ih>`Af|e-l}Nb-71u@l&**@;txMrnj`<;mAbBl`B;9Cd3nt``{X?!T{|W zB!p)+n=4WXv~EMi0TtFDk_BLfOBV2> z#tT%!`ba%Cz-sFUubRMa|7HybQA>RM?-y}xY$O)L+ckBB6Cclvl=5=nP=XVwvZ7pL zx)9IYTp^!HqOl?<;ZZbtATcU3l1QXSkZCLmjUE|Dpc1H2Y)^cEo-U3=?HD+bp=#;C zzn4};ET9g0a(Wd5D?^@u&z4KY|FM5z!>ad)3T3k3KSVFuhAUvF8lW8;01j_D;oeut zGKD`^p7P%+|BIZSHonfRYEuM~qUc}`#HQ1JZ^+;PwKhFD*c5PN3U^YsE&k+dtibU!&9QehR+PnO&L)1L*x(U2^3edft0uQ+lU2R1vs2Cf%!@SFB{MVK%2-@lUaZch9CozEIoRR z9<3AU6vpuRk7yFLZp2AYUXq zei_dywmSLSOg-G+k#OIt^WP<@`V3)vp_|t&+0BzyK@j}|u+745-k4<&v~LCk+1=^p zxvha9^XU*&cUiAJw(xk-d-o|6@cdze>aPC^&>{abp;w+iT%OJs;3L)E5f6`Q9@s_a z%JB+#AC33>c@Y24f_l}`tA{UGQ^EcT>CZlp&TQ z)*?0|b|MZSjw2coO^DlwRzwHlE#eCjg)~9hAp0UckO4?KG8`F)Oht}BW+8Ks6Ohx9 z^N|(ED&$sV9r8HxJn{yz1^FEL0R^FqQMM>&lpl(YVxbaH8K_K@95oqLf+|N<1hUXOHv2h2Ro!T$~bDj9Z4=iaUzCifhMxHZV4DG9VeS4KfTQ2Gb164QdRI7+f`Y zV(`__!qDB2X_#QhHym%cz;K;mz2RlUcEhhmmPVdNAx5c2V~wU7RTynII&E~%=$)~# zv5PUoILTOOTxeWjTx;B5+-m%niIs`B3Cm=-Nv_F!lZ__FOm3UJGc`5!Fby-!Fjbn) zH{EP{()5ApXESRve>095-)xH63bQ)1t7fmv4b9!n!_7yUPcSbx-)(-`{Dp;~g@*;p zf@?9^Vui&4i(3{SEUhhxmI;<(%ej^{mW`HAt#DQzR#8@btLawNRwu36tWnmk)+}qD zb&>Tt>(kclHdq@^8;;Fbn>jYyY%bY!_Oj|l={2NRL9Z3P4)o>OF;(kZ^bvRi&g*pkH7CRkvdWP?X566q}75G#5PG?8w80TE)wa%BEzq)w340f63 zvcu)RtC1_+HPdym>j~FRHz&7vw~20B-0rv=y3^gW-Iuzbb^qky>5=9!(_^2WiPz01!lxC_mHJ&0$7D$uRw$nNS-2z7kRtDap z+t3r~bLkBX3?qUug>i`S7n8n#4L5iHeMlEQ!1n zWfe6zYI)QHwhKFpy@lNwO^yB|`dADmCN8El<`$>5L7GofLa2&Ll1+Zh73p zf!+h<1MB0F@v-rX;_nS|A0!#HF9Ay6BrHm}pXiyGlXx%*o0OQeBI$85F?nM0*%a%P zQ7JVkA5$Yz7o^@D>@_%d@QESjLxvC8JmgbaWLjBTOL{>1r1bMc9fk^r?$5ww49VD# z@nKlhuqDIVhf{|a55GCWb40<2#*q#qMI#T7G9SeqwR<#XblT{e(cicU+$!#eF`O}# zV>)>(-csIkei(l-ze5lrC=)!%49P6Ze3})KwJ572dq8%1_6s3PxLo*VY|PlzV?T{c z7`Jg;mncoNLu?=(Ej}Qzl8lp_lJ=7pNSkCnvSL|F4l`#-PNzIhzCnRdj8N=X+JIo{ zLatZtjNI0|(7Y9SpYw<0?=G+`kQ7`P?>&C@_$L$C6W0HM{)6|&iHXh=r%r606h3L~ zWW?k#lTS=>oicq&dtr3prm03#$4$LBjWDfj+WVrkqWbB5rx#9dn-M)@OR-t8y!h74 zpqZ;@p=SwaU7Agvy=?Z65`M|KIfOaobH2^x%{@1dIIm(}*Zj=+mln_#tXha&C|P*3 zbU^8*GRv|FWo?V%7u7AsFD_a9e#xjMjpdZ`)k}?*<}Pii7+A4?ncK33%f2noUVdXm z#EKo2j+L`3Kdt1iyt*oE)%MkWSI=4fWsPu6^V;aObyXf!<<;2gyz0m6hO9fgp1ywb z28RuEHhkYG+1RovdDE%QftxqiIMyuKg4~k3rDN;xtyi{1Zri`zZ~NLEwmat3LbbWI z&vuU9d2?6Xt`ocIySMLg-&48QdT&V`qHcU$=f3QHE&GS=Z#ocr;6!~;{oaHA2R9ya zKD6R+ufq$D7#*2@r0eK}qaTjRj=eaZb-eAws1tWjrk}iiD(Tdv({ZO8&als%JR5%Y zXhTTDp+;uofphe8`_9wO*Il4q*n5$BaqlJCrMk<3m-k;`T&ZsgZaQ*xz}4f|BCnmf z&bfa6#-JNbHwWKrzBT+-OEbUu>21;NH+S;xe7#$E4|A{NzQz6W2aXS_{_Owfjuu+W z;nv933lCEs-fiQxJ%6Nl^sRmRW7EgwPn@1?eoA_JsDs^c<=L=j?ayV;zrHAbY5B79 zmDj61uftwn=uGcye^>*$%`*$1PQ{JEWkoe)jNAbt6pGrR4f8O*L{jalM(!MSzC@AW_8e%$L4cXj=L`#>oM;-e7Y+Z^o&N_{}=0)NQ^2P*0dJfg7}2nW9M z@dqC#ArWW@gF?X{Xn_m0{FHDXxC&TERoJc@F|cB7iFCj(bePIn}(U+$>PYYB^U&nEsW|Tx=o+) zT2{8jfqq1?i?sEqW%gqG^4E9CnHlkGt~S5?!w!PpJYcKG^W+&o-{)hZ&o zphilcI`@Q~_6ECTW1}1z%%1I-=vP-#^tNK-y24YRmf6}`S2VfZxiE8D(8+Rw-|;fe z5rb+pviRoPwO%)8By1V)k@@V0V&mG%#*9a8JLWdDE&Aej?7{HZ6UVooQJfcf#cr&K zLuS9_oIQ@)A7xQxx~O=s#VVs}A^#He3ha=6_!H^wUBx|ze)6Q4~P9XK{*RMEDoML*He4` z=Qx{%uQ1VfJ=Yu$z73Uob4Pt4P~2Kq;cl=N zy^`6B`bJ6}=Wacgc7U;Xbir)wLGHJQQ;Xb`(I1@S?=4zkbE@feD78I?F%m!b>F0#m zjT=^6h-^|^JKxM}kDEVuk=1m$aU!?j zD_^qq^tByM^BY^+8fS{OygYc9=67;sQSWDNOK*_I`!l!T+m~i@mR5bKW``|E+!0+E zc4$P>(r>==Vq>L)cF{jRoOQ{R^4{e_{5FN?Sy9{Wc@sS5B)Rw1@G9IrMFGa z&ix*nxn$25fk)`<;PeaEvKxow*e!EExcrH3Bu z+g-JFfeYQ)JYaL-^ETtgM-QDAmu!tAE;{&}>F0&3Gg&dTz_I9oziqsOxcB^y;6kVO zeAL2d+_%i)>VySh;a(q4-rdqLHt9`*9r;vkjm5>UJMQs2k~g}Sz0SG!Cu-}`r}5Nd z<&5Yp;;%`cFQzq&dQ_M<1YOFm*)?&77s+C_U7yvRIU&n-ZjH3cVB~I}OgNEWefjx} zxA*gIESmD%*CjFX-DxX`fxm@)8!W}msN!As*%EXEHF!qLwOJQ~E9%%vzo^7j(4{%- z@q>)>@7hN|jLee@SmpRHe6J&WUcVx2t!|#WWZH>2BiA;bspoGDn>~B1NAqLBLBHTC ya@L{#);C5+-d*oDhe2xH#pM{f?RQ-8k+Ag$aslmTs`Hj>mqt`Qs+-bv`~LvPRM=+# literal 0 HcmV?d00001 diff --git a/src/test/mocks/Ricoh_Caplio_RR330.jpg b/src/test/mocks/Ricoh_Caplio_RR330.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7c0411b95ae4155719bab8ce33ed10d4dcb5329c GIT binary patch literal 3662 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 literal 0 HcmV?d00001 diff --git a/src/test/mocks/long_description.jpg b/src/test/mocks/long_description.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c5dfe67bce2fbc2174aee27391fec1bd417cc660 GIT binary patch literal 7585 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 literal 0 HcmV?d00001 diff --git a/src/test/mocks/test_image_info.txt b/src/test/mocks/test_image_info.txt new file mode 100644 index 0000000..7346596 --- /dev/null +++ b/src/test/mocks/test_image_info.txt @@ -0,0 +1,44 @@ + +|== INFO ON TEST IMAGES ==| + +Unless stated otherwise, all images come from Wikipedia Commons - http://commons.wikimedia.org +For author and license information please refer to their respective description pages. + +All images were scaled down using the GIMP v 2.4.5 since all we care about is the Exif info. +Tested before and after scaling to ensure Exif data was not modified (except for 'software' field). + + +== Filename == == Wiki Filename == + += Camera Makes and Models = +Canon_40D.jpg Iguana_iguana_male_head.jpg +Canon_40D_photoshop_import.jpg Anolis_equestris_-_bright_close_3-4.jpg +Canon_DIGITAL_IXUS_400.jpg Ducati749.jpg +Fujifilm_FinePix6900ZOOM.jpg Hylidae_cinerea.JPG +Fujifilm_FinePix_E500.jpg VlaamseGaaiVeertje1480.JPG +Kodak_CX7530.jpg Red-headed_Rock_Agama.jpg +Konica_Minolta_DiMAGE_Z3.jpg Knechtova01.jpg +Nikon_COOLPIX_P1.jpg Miyagikotsu-castle6861.JPG +Nikon_D70.jpg Anolis_carolinensis_brown.jpg +Olympus_C8080WZ.jpg Pterois_volitans_Manado-e.jpg +Panasonic_DMC-FZ30.jpg Rømø_-_St.Klement_-_Kanzel_3.jpg +Pentax_K10D.jpg Mrs._Herbert_Stevens_May_2008.jpg +Ricoh_Caplio_RR330.jpg Steveston_dusk.JPG +Samsung_Digimax_i50_MP3.jpg Villa_di_Poggio_a_Caiano,_sala_neoclassica_4.JPG +Sony_HDR-HC3.jpg Positive_roll_film.jpg +WWL_(Polaroid)_ION230.jpg PoudriereBoisSousRoche3.jpg + += Other Stuff = +long_description.jpg US_10th_Mountain_Division_soldiers_in_Afghanistan.jpg + + + +Contributions : + +PaintTool_sample.jpg -- Submitted by Jan Trofimov (OXIj) + + +If you come across an image which is incorrectly parsed or errors out, consider +contributing it to the test cases : ianare@gmail.com + + diff --git a/src/test/unit/video_test.py b/src/test/unit/video_test.py new file mode 100644 index 0000000..4d4722d --- /dev/null +++ b/src/test/unit/video_test.py @@ -0,0 +1,105 @@ +""" + Project: pyGTKtalog + Description: Tests for Video class. + Type: test + Author: Roman 'gryf' Dobosz, gryf73@gmail.com + Created: 2008-12-15 +""" +import unittest +import os +from lib.video import Video + +class TestVideo(unittest.TestCase): + """Class for retrive midentify script output and put it in dict. + Usually there is no need for such a detailed movie/clip information. + Video script belongs to mplayer package. + """ + + def test_avi(self): + """test mock avi file, should return dict with expected values""" + avi = Video("mocks/m.avi") + self.assertTrue(len(avi.tags) != 0, "result should have lenght > 0") + self.assertEqual(avi.tags['audio_format'], '85') + self.assertEqual(avi.tags['width'], 128) + self.assertEqual(avi.tags['audio_no_channels'], 2) + self.assertEqual(avi.tags['height'], 96) + self.assertEqual(avi.tags['video_format'], 'XVID') + self.assertEqual(avi.tags['length'], 4) + self.assertEqual(avi.tags['audio_codec'], 'mp3') + self.assertEqual(avi.tags['video_codec'], 'ffodivx') + self.assertEqual(avi.tags['duration'], '00:00:04') + self.assertEqual(avi.tags['container'], 'avi') + + def test_avi2(self): + """test another mock avi file, should return dict with expected + values""" + avi = Video("mocks/m1.avi") + self.assertTrue(len(avi.tags) != 0, "result should have lenght > 0") + self.assertEqual(avi.tags['audio_format'], '85') + self.assertEqual(avi.tags['width'], 128) + self.assertEqual(avi.tags['audio_no_channels'], 2) + self.assertEqual(avi.tags['height'], 96) + self.assertEqual(avi.tags['video_format'], 'H264') + self.assertEqual(avi.tags['length'], 4) + self.assertEqual(avi.tags['audio_codec'], 'mp3') + self.assertEqual(avi.tags['video_codec'], 'ffh264') + self.assertEqual(avi.tags['duration'], '00:00:04') + self.assertEqual(avi.tags['container'], 'avi') + + def test_mkv(self): + """test mock mkv file, should return dict with expected values""" + avi = Video("mocks/m.mkv") + self.assertTrue(len(avi.tags) != 0, "result should have lenght > 0") + self.assertEqual(avi.tags['audio_format'], '8192') + self.assertEqual(avi.tags['width'], 128) + self.assertEqual(avi.tags['audio_no_channels'], 2) + self.assertEqual(avi.tags['height'], 96) + self.assertEqual(avi.tags['video_format'], 'mp4v') + self.assertEqual(avi.tags['length'], 4) + self.assertEqual(avi.tags['audio_codec'], 'a52') + self.assertEqual(avi.tags['video_codec'], 'ffodivx') + self.assertEqual(avi.tags['duration'], '00:00:04') + self.assertEqual(avi.tags['container'], 'mkv') + + def test_mpg(self): + """test mock mpg file, should return dict with expected values""" + avi = Video("mocks/m.mpg") + self.assertTrue(len(avi.tags) != 0, "result should have lenght > 0") + self.assertFalse(avi.tags.has_key('audio_format')) + self.assertEqual(avi.tags['width'], 128) + self.assertFalse(avi.tags.has_key('audio_no_channels')) + self.assertEqual(avi.tags['height'], 96) + self.assertEqual(avi.tags['video_format'], '0x10000001') + self.assertFalse(avi.tags.has_key('lenght')) + self.assertFalse(avi.tags.has_key('audio_codec')) + self.assertEqual(avi.tags['video_codec'], 'ffmpeg1') + self.assertFalse(avi.tags.has_key('duration')) + self.assertEqual(avi.tags['container'], 'mpeges') + + def test_ogm(self): + """test mock ogm file, should return dict with expected values""" + avi = Video("mocks/m.ogm") + self.assertTrue(len(avi.tags) != 0, "result should have lenght > 0") + self.assertEqual(avi.tags['audio_format'], '8192') + self.assertEqual(avi.tags['width'], 160) + self.assertEqual(avi.tags['audio_no_channels'], 2) + self.assertEqual(avi.tags['height'], 120) + self.assertEqual(avi.tags['video_format'], 'H264') + self.assertEqual(avi.tags['length'], 4) + self.assertEqual(avi.tags['audio_codec'], 'a52') + self.assertEqual(avi.tags['video_codec'], 'ffh264') + self.assertEqual(avi.tags['duration'], '00:00:04') + self.assertEqual(avi.tags['container'], 'ogg') + + def test_capture(self): + """test capture with some small movie""" + avi = Video("mocks/m.avi") + filename = avi.capture() + self.assertTrue(filename != None) + self.assertTrue(os.path.exists(filename)) + file_size = os.stat(filename)[6] + self.assertEqual(file_size, 9077) + os.unlink(filename) + +if __name__ == "__main__": + unittest.main()