Recherche avancée

Médias (1)

Mot : - Tags -/Christian Nold

Autres articles (49)

  • Mise à jour de la version 0.1 vers 0.2

    24 juin 2013, par

    Explications des différents changements notables lors du passage de la version 0.1 de MediaSPIP à la version 0.3. Quelles sont les nouveautés
    Au niveau des dépendances logicielles Utilisation des dernières versions de FFMpeg (>= v1.2.1) ; Installation des dépendances pour Smush ; Installation de MediaInfo et FFprobe pour la récupération des métadonnées ; On n’utilise plus ffmpeg2theora ; On n’installe plus flvtool2 au profit de flvtool++ ; On n’installe plus ffmpeg-php qui n’est plus maintenu au (...)

  • 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 ;

  • 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 (8649)

  • 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 ;-)