
Recherche avancée
Autres articles (77)
-
Personnaliser en ajoutant son logo, sa bannière ou son image de fond
5 septembre 2013, parCertains 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, parPré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 2013Puis-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 (8087)
-
AVFrame in AV_PIX_FMT_YUV420P format to H*W*3 data buffer conversion using sws_scale not accurate ?
13 février 2024, par user3133806I have an AVFrame that is in YUV420 format and I am trying to convert to packed RGB in a data buffer :


// Allocate enough for 8 bits per color in RGB.
 // Note that I want packed, not planar. i.e. RGBRGBRGB...
 // Each pixel is 3 bytes of RGB in row-major order
 buffer = new unsigned char[frame->height * frame->width * 3];

 enum AVPixelFormat frameFormat =
 static_cast<enum avpixelformat="avpixelformat">(frame->format);

 // Make sure the input is in the expected format.
 CHECK_EQ(frameFormat, AV_PIX_FMT_YUV420P);

 SwsContext* swsContext = sws_getContext(
 frame->width,
 frame->height,
 frameFormat,
 frame->width,
 frame->height,
 AV_PIX_FMT_RGB24,

 // I played around with these flags but could not get an accurate image
 SWS_BICUBIC | SWS_ACCURATE_RND,
 nullptr,
 nullptr,
 nullptr);

 // My understanding is that because I am using packed format, not planar
 // I only need to fill in the first pointer.
 unsigned char* out_planes[4];
 out_planes[0] = buffer;
 out_planes[1] = nullptr;
 out_planes[2] = nullptr;
 out_planes[3] = nullptr;

 sws_scale(
 swsContext,
 frame->data,
 frame->linesize,
 0,
 frame->height,
 &out_planes,

 // My understanding is that the stride of each plane is frame->width * 3
 (const int[4]){frame->width * 3, 0, 0, 0});
 sws_freeContext(swsContext);

</enum>


This code does produce an image but the image appears to be wrong.


On a 300x200 video, the right few columns are wrong.


On a bigger resolution video the image seems correct, but on a smaller video it is not :






EDIT : It appears this is a bug in sws_scale (bug or expected feature). Turning off vector instructions causes it to work as expected :


// Adding this line before sws_scale causes the images to be bit exact.
av_set_cpu_flags_mask(0);



I got that idea from this answer on SO : Turn off sw_scale conversion to planar YUV 32 byte alignment requirements


-
intreadwrite : Add intermediate variables in the byteswise AV_W*() macros
1er août 2016, par Martin Storsjöintreadwrite : Add intermediate variables in the byteswise AV_W*() macros
This avoids issues with expanding the argument multiple times,
and makes sure that it is of the right type for the following shifts.Even if the caller of a macro could be expected not to pass parameters
that have side effects if expanded multiple times, these fallback
codepaths are rarely, if ever, tested, so it is expected that such
issues can arise.Thefore, for safety, make sure the fallback codepaths only expand
the arguments once.Signed-off-by : Martin Storsjö <martin@martin.st>
-
ffmpeg hls muxer is missing codec info in master playlist when codecs are copied from input
21 septembre 2021, par doganffmpeg hls muxer has the option to set master playlist but the created playlist is missing the important codec information.


Example :


ffmpeg -hide_banner -i <input /> -c copy -f hls -master_pl_name master.m3u8 stream.m3u8



Expected :


#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=77595,RESOLUTION=1280x720,CODECS="avc1.64001f,mp4a.40.2"
stream.m3u8



Instead I get this


#EXTM3U
#EXT-X-VERSION:3
#EXT-X-STREAM-INF:BANDWIDTH=77595,RESOLUTION=1280x720
stream.m3u8



Is there a way to make ffmpeg set the codec info in playlist from the input source ? It works as expected if I encode the input using libx264 but I do not want to do any expensive encoding but copy the codecs from the input.