Recherche avancée

Médias (3)

Mot : - Tags -/pdf

Autres articles (96)

  • Personnaliser en ajoutant son logo, sa bannière ou son image de fond

    5 septembre 2013, par

    Certains thèmes prennent en compte trois éléments de personnalisation : l’ajout d’un logo ; l’ajout d’une bannière l’ajout d’une image de fond ;

  • Ecrire une actualité

    21 juin 2013, par

    Présentez les changements dans votre MédiaSPIP ou les actualités de vos projets sur votre MédiaSPIP grâce à la rubrique actualités.
    Dans le thème par défaut spipeo de MédiaSPIP, les actualités sont affichées en bas de la page principale sous les éditoriaux.
    Vous pouvez personnaliser le formulaire de création d’une actualité.
    Formulaire de création d’une actualité Dans le cas d’un document de type actualité, les champs proposés par défaut sont : Date de publication ( personnaliser la date de publication ) (...)

  • Publier sur MédiaSpip

    13 juin 2013

    Puis-je poster des contenus à partir d’une tablette Ipad ?
    Oui, si votre Médiaspip installé est à la version 0.2 ou supérieure. Contacter au besoin l’administrateur de votre MédiaSpip pour le savoir

Sur d’autres sites (13639)

  • Add support for playing Audible AAXC (.aaxc) files [PATCH v4]

    1er janvier 2000, par Vesselin Bontchev
    Add support for playing Audible AAXC (.aaxc) files [PATCH v4]
    

    The AAXC container format is the same as the (already supported) Audible
    AAX format but it uses a different encryption scheme.

    Note : audible_key and audible_iv values are variable (per file) and are
    externally fed.

    It is possible to extend https://github.com/mkb79/Audible to derive the
    audible_key and audible_key values.

    Relevant code :

    def decrypt_voucher(deviceSerialNumber, customerId, deviceType, asin, voucher) :
    buf = (deviceType + deviceSerialNumber + customerId + asin).encode("ascii")
    digest = hashlib.sha256(buf).digest()
    key = digest[0:16]
    iv = digest[16 :]

    # decrypt "voucher" using AES in CBC mode with no padding
    cipher = AES.new(key, AES.MODE_CBC, iv)
    plaintext = cipher.decrypt(voucher).rstrip(b"\x00") # improve this !
    return json.loads(plaintext)

    The decrypted "voucher" has the required audible_key and audible_iv
    values.

    Update (Nov-2020) : This patch has now been tested by multiple folks -
    details at the following URL :

    https://github.com/mkb79/Audible/issues/3

    Signed-off-by : Vesselin Bontchev <vesselin.bontchev@yandex.com>

    • [DH] libavformat/isom.h
    • [DH] libavformat/mov.c
  • Swscale - image patch (NV12) color conversion - invalid border

    6 juin 2019, par dajuric

    The goal is to convert NV12 to BGR24 image, more exactly an image patch (x:0, y:0, w:220, h:220).
    The issue is the undefined pixel column on the right of the converted patch as shown :
    enter image description here

    The question is why is this happening (even though the coordinates and the dimensions of the patch have even values) ?
    (Interestingly enough for an odd width value, that issue is not present)


    The patch has the following bounding box : (x:0, y:0, w:220, h:220).
    The behavior should be reproducible with any image. Conversion can be done using the ppm conversion page.

    The following code creates a nv12 image from a bgr24 image and then converts a nv12 patch back to bgr24 patch. If everything worked properly the output should have been identical to a source image.

    #include <libswscale></libswscale>swscale.h>
    #include <libavutil></libavutil>imgutils.h>

    void readPPM(const char* filename, uint8_t** bgrData, int* stride, int* w, int* h)
    {
       FILE* fp = fopen(filename, "rb");
       fscanf(fp, "%*s\n"); //skip format check

       fscanf(fp, "%d %d\n", w, h);
       fscanf(fp, "%*d\n"); //skip max value check

       *stride = *w * 3;
       *bgrData = av_malloc(*h * *stride);

       for (int r = 0; r &lt; *h; r++)
       {
           uint8_t* rowData = *bgrData + r * *stride;
           for (int c = 0; c &lt; *w; c++)
           {
               //rgb -> bgr
               fread(&amp;rowData[2], 1, 1, fp);
               fread(&amp;rowData[1], 1, 1, fp);
               fread(&amp;rowData[0], 1, 1, fp);

               rowData += 3;
           }
       }

       fclose(fp);
    }

    void writePPM(const char* filename, uint8_t* bgrData, int stride, int w, int h)
    {
       FILE* fp = fopen(filename, "wb");
       fprintf(fp, "P6\n");
       fprintf(fp, "%d %d\n", w, h);
       fprintf(fp, "%d\n", 255);

       for (int r = 0; r &lt; h; r++)
       {
           uint8_t* rowData = bgrData + r * stride;
           for (int c = 0; c &lt; w; c++)
           {
               //bgr -> rgb
               fwrite(&amp;rowData[2], 1, 1, fp);
               fwrite(&amp;rowData[1], 1, 1, fp);
               fwrite(&amp;rowData[0], 1, 1, fp);

               rowData += 3;      
           }
       }

       fclose(fp);
    }


    void bgrToNV12(uint8_t* srcData[4], int srcStride[4],
                  uint8_t* tgtData[4], int tgtStride[4],
                  int w, int h)
    {
       struct SwsContext* context = sws_getContext(w, h, AV_PIX_FMT_BGR24,
                                                   w, h, AV_PIX_FMT_NV12, SWS_POINT, NULL, NULL, NULL);
       {
           sws_scale(context,
                     srcData, srcStride, 0, h,
                     tgtData, tgtStride);
       }
       sws_freeContext(context);
    }

    void nv12ToBgr(uint8_t* srcData[4], int srcStride[4],
                  uint8_t* tgtData[4], int tgtStride[4],
                  int w, int h)
    {
       struct SwsContext* context = sws_getContext(w, h, AV_PIX_FMT_NV12,
                                                   w, h, AV_PIX_FMT_BGR24, SWS_POINT, NULL, NULL, NULL);
       {
           sws_scale(context,
                     srcData, srcStride, 0, h,
                     tgtData, tgtStride);
       }
       sws_freeContext(context);
    }


    int main()
    {
       //load BGR image
       uint8_t* bgrData[4]; int bgrStride[4]; int bgrW, bgrH;
       readPPM("sample.ppm", &amp;bgrData[0], &amp;bgrStride[0], &amp;bgrW, &amp;bgrH);

       //create NV12 image from the BGR image
       uint8_t* nv12Data[4]; int nv12Stride[4];
       av_image_alloc(nv12Data, nv12Stride, bgrW, bgrH, AV_PIX_FMT_NV12, 16);
       bgrToNV12(bgrData, bgrStride, nv12Data, nv12Stride, bgrW, bgrH);

       //convert nv12 patch to bgr patch
       nv12ToBgr(nv12Data, nv12Stride, bgrData, bgrStride, 220, 220);   //invalid result (random column stripe)
       //nv12ToBgr(nv12Data, nv12Stride, bgrData, bgrStride, 221, 220); //valid result

       //save bgr image (should be exactly as original BGR image)
       writePPM("sample-out.ppm", bgrData[0], bgrStride[0], bgrW, bgrH);

       //cleanup
       av_freep(bgrData);
       av_freep(nv12Data);
       return 0;
    }
  • Evolution #4277 (Nouveau) : Pouvoir utiliser InnoDB à la place de MyISAM (patch)

    24 janvier 2019

    Bonjour,

    Contexte : 3 serveurs MySQL avec réplication des bases depuis chaque serveur vers les autres (pas de notion esclave/maître).
    Ça ne marche pas car la réplication nécessite des bases au format InnoDB.
    Or SPIP dans ecrire/req/mysql.PHP indique explicitement que la création des tables utilise le moteur MyISAM.
    Ligne 702 (en 3.2.3), le type de moteur mysql est en dur :

    1. <span class="CodeRay">. <span class="string"><span class="delimiter">"</span><span class="content"> ENGINE=MyISAM</span><span class="delimiter">"</span></span>
    2. </span>

    Télécharger

    Proposition : utiliser un define par défaut à MyISAM pour pouvoir déclarer l’usage d’un autre moteur de base MySQL.

    Résolution : patch ci-joint (testé avec SPIP 3.2.3).
    J’ai regardé le code de SPIP 3.3 : c’est le même, donc patch applicable de la même manière.

    Merci d’avance ;-)