Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • Thrillseekr/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
400 results
Show changes
Commits on Source (4)
......@@ -150,6 +150,7 @@ typedef struct
unsigned int i_width_bytes;
bool b_flipped;
bool is_qnap;
es_format_t fmt;
es_out_id_t *p_es;
......@@ -194,6 +195,7 @@ struct demux_sys_t
/* meta */
vlc_meta_t *meta;
unsigned int updates;
unsigned int i_attachment;
input_attachment_t **attachment;
......@@ -215,7 +217,7 @@ static int AVI_StreamChunkSet ( demux_t *, avi_track_t *, unsigned int i_ck );
static int AVI_StreamBytesSet ( demux_t *, avi_track_t *, uint64_t i_byte );
vlc_fourcc_t AVI_FourccGetCodec( unsigned int i_cat, vlc_fourcc_t );
static int AVI_GetKeyFlag ( vlc_fourcc_t , uint8_t * );
static int AVI_GetKeyFlag ( const avi_track_t *, const uint8_t * );
static int AVI_PacketGetHeader( demux_t *, avi_packet_t *p_pk );
static int AVI_PacketNext ( demux_t * );
......@@ -247,20 +249,21 @@ static int AVI_TrackStopFinishedStreams( demux_t *);
- to complete....
*/
#define QNAP_HEADER_SIZE 56
static bool IsQNAPCodec(vlc_fourcc_t codec)
#define QNAP_VIDEO_HEADER_SIZE 56
/* https://github.com/qnap-dev/qnap-qiot-sdks/blob/master/doc/QVRPro/live_stream_parser.cpp#L90 */
static bool IsQNAPCodec(uint32_t biCompression)
{
switch (codec)
{
case VLC_FOURCC('w', '2', '6', '4'):
case VLC_FOURCC('q', '2', '6', '4'):
case VLC_FOURCC('Q', '2', '6', '4'):
case VLC_FOURCC('w', 'M', 'P', '4'):
case VLC_FOURCC('q', 'M', 'P', '4'):
case VLC_FOURCC('Q', 'M', 'P', '4'):
case VLC_FOURCC('w', 'I', 'V', 'G'):
case VLC_FOURCC('q', 'I', 'V', 'G'):
case VLC_FOURCC('Q', 'I', 'V', 'G'):
switch (biCompression)
{
case QNAP_FCC_w264:
case QNAP_FCC_q264:
case QNAP_FCC_Q264:
case QNAP_FCC_wMP4:
case QNAP_FCC_qMP4:
case QNAP_FCC_QMP4:
case QNAP_FCC_wIVG:
case QNAP_FCC_qIVG:
case QNAP_FCC_QIVG:
return true;
default:
return false;
......@@ -651,8 +654,7 @@ static int Open( vlc_object_t * p_this )
break;
}
es_format_Init( &tk->fmt, VIDEO_ES,
AVI_FourccGetCodec( VIDEO_ES, p_bih->biCompression ) );
es_format_Init( &tk->fmt, VIDEO_ES, 0 );
if( p_bih->biCompression == BI_RGB )
{
......@@ -723,8 +725,11 @@ static int Open( vlc_object_t * p_this )
Set_BMP_RGB_Masks( &tk->fmt );
}
if( IsQNAPCodec( tk->fmt.i_codec ) )
if( IsQNAPCodec( p_bih->biCompression ) )
{
tk->is_qnap = true;
tk->fmt.b_packetized = false;
}
tk->i_samplesize = 0;
......@@ -1078,6 +1083,8 @@ static block_t * ReadFrame( demux_t *p_demux, const avi_track_t *tk,
*****************************************************************************/
static void AVI_SendFrame( demux_t *p_demux, avi_track_t *tk, block_t *p_frame )
{
demux_sys_t *p_sys = p_demux->p_sys;
if( tk->fmt.i_cat != VIDEO_ES )
p_frame->i_dts = p_frame->i_pts;
else
......@@ -1089,17 +1096,32 @@ static void AVI_SendFrame( demux_t *p_demux, avi_track_t *tk, block_t *p_frame )
if( tk->i_dv_audio_rate )
AVI_DvHandleAudio( p_demux, tk, p_frame );
/* Strip QNAP header */
if( IsQNAPCodec( tk->fmt.i_codec ) )
/* Strip 3rd party header */
if( tk->is_qnap )
{
if( p_frame->i_buffer <= QNAP_HEADER_SIZE )
if( p_frame->i_buffer >= QNAP_VIDEO_HEADER_SIZE )
{
block_Release( p_frame );
return;
const uint8_t *p = p_frame->p_buffer;
/* Check header is really there */
vlc_fourcc_t fcc = VLC_FOURCC(p[0],p[1],p[2],p[3]);
/* Parse QNAP header */
if( IsQNAPCodec(fcc) && p_sys->meta )
{
const char *psz_title = vlc_meta_Get( p_sys->meta, vlc_meta_Title );
char *psz_osd = (char *) &p_frame->p_buffer[24];
if( *psz_osd != 0 )
{
psz_osd[23] = 0;
if( !psz_title || strncmp( psz_osd, psz_title, 24 ) )
{
vlc_meta_Set( p_sys->meta, vlc_meta_Title, psz_osd );
p_sys->updates |= INPUT_UPDATE_META;
}
}
}
p_frame->i_buffer -= QNAP_VIDEO_HEADER_SIZE;
p_frame->p_buffer += QNAP_VIDEO_HEADER_SIZE;
}
p_frame->i_buffer -= QNAP_HEADER_SIZE;
p_frame->p_buffer += QNAP_HEADER_SIZE;
}
if( tk->i_next_block_flags )
......@@ -1336,7 +1358,7 @@ static int Demux_Seekable( demux_t *p_demux )
/* add this chunk to the index */
avi_entry_t index;
index.i_id = avi_pk.i_fourcc;
index.i_flags = AVI_GetKeyFlag(tk->fmt.i_codec, avi_pk.i_peek);
index.i_flags = AVI_GetKeyFlag(tk, avi_pk.i_peek);
index.i_pos = avi_pk.i_pos;
index.i_length = avi_pk.i_size;
index.i_lengthtotal = index.i_length;
......@@ -1882,6 +1904,14 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
return VLC_EGENERIC;
}
case DEMUX_TEST_AND_CLEAR_FLAGS:
{
unsigned *restrict flags = va_arg( args, unsigned * );
*flags &= p_sys->updates;
p_sys->updates &= ~*flags;
return VLC_SUCCESS;
}
default:
return VLC_EGENERIC;
}
......@@ -2025,7 +2055,7 @@ static int AVI_StreamChunkFind( demux_t *p_demux, avi_track_t *tk )
/* add this chunk to the index */
avi_entry_t index;
index.i_id = avi_pk.i_fourcc;
index.i_flags = AVI_GetKeyFlag(tk_pk->fmt.i_codec, avi_pk.i_peek);
index.i_flags = AVI_GetKeyFlag(tk_pk, avi_pk.i_peek);
index.i_pos = avi_pk.i_pos;
index.i_length = avi_pk.i_size;
index.i_lengthtotal = index.i_length;
......@@ -2208,9 +2238,16 @@ static int AVI_TrackSeek( demux_t *p_demux,
/****************************************************************************
* Return true if it's a key frame
****************************************************************************/
static int AVI_GetKeyFlag( vlc_fourcc_t i_fourcc, uint8_t *p_byte )
static int AVI_GetKeyFlag( const avi_track_t *tk, const uint8_t *p_byte )
{
switch( i_fourcc )
if( tk->is_qnap )
{
const uint8_t *p = p_byte;
if( IsQNAPCodec(VLC_FOURCC(p[0],p[1],p[2],p[3])) )
return p[4] & 0x01 ? AVIIF_KEYFRAME : 0;
}
switch( tk->fmt.i_codec )
{
case VLC_CODEC_DIV1:
/* we have:
......@@ -2820,7 +2857,7 @@ static void AVI_IndexCreate( demux_t *p_demux )
avi_entry_t index;
index.i_id = pk.i_fourcc;
index.i_flags = AVI_GetKeyFlag(tk->fmt.i_codec, pk.i_peek);
index.i_flags = AVI_GetKeyFlag(tk, pk.i_peek);
index.i_pos = pk.i_pos;
index.i_length = pk.i_size;
index.i_lengthtotal = pk.i_size;
......
......@@ -366,3 +366,14 @@ int AVI_ChunkFetchIndexes( stream_t *, avi_chunk_t *p_riff );
#define FOURCC_dvsl VLC_FOURCC('d','v','s','l')
#define FOURCC_dv25 VLC_FOURCC('d','v','2','5')
#define FOURCC_dv50 VLC_FOURCC('d','v','5','0')
/* QNap */
#define QNAP_FCC_w264 VLC_FOURCC('w','2','6','4')
#define QNAP_FCC_q264 VLC_FOURCC('q','2','6','4')
#define QNAP_FCC_Q264 VLC_FOURCC('Q','2','6','4')
#define QNAP_FCC_wMP4 VLC_FOURCC('w','M','P','4')
#define QNAP_FCC_qMP4 VLC_FOURCC('q','M','P','4')
#define QNAP_FCC_QMP4 VLC_FOURCC('Q','M','P','4')
#define QNAP_FCC_wIVG VLC_FOURCC('w','I','V','G')
#define QNAP_FCC_qIVG VLC_FOURCC('q','I','V','G')
#define QNAP_FCC_QIVG VLC_FOURCC('Q','I','V','G')