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
  • djain/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
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
  • shocknovaa/vlc
  • gremlinflat/vlc
  • Pratham24D/vlc
  • hmaarrfk/vlc
412 results
Show changes
Commits on Source (14)
......@@ -258,19 +258,29 @@ static void probe_video_frame_rate( encoder_t *p_enc, AVCodecContext *p_context,
( p_enc->fmt_out.i_codec == VLC_CODEC_MP4V ? 25 : CLOCK_FREQ );
msg_Dbg( p_enc, "Time base for probing set to %d/%d", p_context->time_base.num, p_context->time_base.den );
if( p_codec->supported_framerates )
const AVRational *supported_framerates;
#if LIBAVCODEC_VERSION_CHECK( 61, 13, 100 )
if (avcodec_get_supported_config(p_context, p_codec, AV_CODEC_CONFIG_FRAME_RATE, 0,
(const void **)&supported_framerates, NULL) < 0)
supported_framerates = NULL;
#else
supported_framerates = p_codec->supported_framerates;
#endif
if( supported_framerates )
{
/* We are finding fps values so 1/time_base */
AVRational target = {
.num = p_context->time_base.den,
.den = p_context->time_base.num
};
int idx = av_find_nearest_q_idx(target, p_codec->supported_framerates);
int idx = av_find_nearest_q_idx(target, supported_framerates);
p_context->time_base.num = p_codec->supported_framerates[idx].den ?
p_codec->supported_framerates[idx].den : 1;
p_context->time_base.den = p_codec->supported_framerates[idx].den ?
p_codec->supported_framerates[idx].num : CLOCK_FREQ;
p_context->time_base.num = supported_framerates[idx].den ?
supported_framerates[idx].den : 1;
p_context->time_base.den = supported_framerates[idx].den ?
supported_framerates[idx].num : CLOCK_FREQ;
/* If we have something reasonable on supported framerates, use that*/
if( p_context->time_base.den && p_context->time_base.den < CLOCK_FREQ )
......@@ -559,7 +569,16 @@ int InitVideoEnc( vlc_object_t *p_this )
p_enc->fmt_in.video.i_chroma = p_enc->fmt_in.i_codec;
GetFfmpegChroma( &p_context->pix_fmt, &p_enc->fmt_in.video );
if( p_codec->pix_fmts )
const enum AVPixelFormat *pix_fmts;
#if LIBAVCODEC_VERSION_CHECK( 61, 13, 100 )
if (avcodec_get_supported_config(p_context, p_codec, AV_CODEC_CONFIG_PIX_FORMAT, 0,
(const void **)&pix_fmts, NULL) < 0)
pix_fmts = NULL;
#else
pix_fmts = p_codec->pix_fmts;
#endif
if( pix_fmts )
{
static const enum AVPixelFormat vlc_pix_fmts[] = {
AV_PIX_FMT_YUV420P,
......@@ -567,8 +586,8 @@ int InitVideoEnc( vlc_object_t *p_this )
AV_PIX_FMT_RGB24,
};
bool found = false;
const enum PixelFormat *p = p_codec->pix_fmts;
for( ; !found && *p != -1; p++ )
const enum AVPixelFormat *p = pix_fmts;
for( ; !found && *p != AV_PIX_FMT_NONE; p++ )
{
for( size_t i = 0; i < ARRAY_SIZE(vlc_pix_fmts); ++i )
{
......@@ -580,7 +599,7 @@ int InitVideoEnc( vlc_object_t *p_this )
}
}
}
if (!found) p_context->pix_fmt = p_codec->pix_fmts[0];
if (!found) p_context->pix_fmt = pix_fmts[0];
GetVlcChroma( &p_enc->fmt_in.video, p_context->pix_fmt );
p_enc->fmt_in.i_codec = p_enc->fmt_in.video.i_chroma;
}
......@@ -705,22 +724,29 @@ int InitVideoEnc( vlc_object_t *p_this )
}
else if( p_enc->fmt_in.i_cat == AUDIO_ES )
{
const enum AVSampleFormat *sample_fmts;
#if LIBAVCODEC_VERSION_CHECK( 61, 13, 100 )
if (avcodec_get_supported_config(p_context, p_codec, AV_CODEC_CONFIG_SAMPLE_FORMAT, 0,
(const void **)&sample_fmts, NULL) < 0)
sample_fmts = NULL;
#else
sample_fmts = p_codec->sample_fmts;
#endif
p_context->codec_type = AVMEDIA_TYPE_AUDIO;
p_context->sample_fmt = p_codec->sample_fmts ?
p_codec->sample_fmts[0] :
AV_SAMPLE_FMT_S16;
p_context->sample_fmt = sample_fmts ? sample_fmts[0] : AV_SAMPLE_FMT_S16;
/* Try to match avcodec input format to vlc format so we could avoid one
format conversion */
if( GetVlcAudioFormat( p_context->sample_fmt ) != p_enc->fmt_in.i_codec
&& p_codec->sample_fmts )
&& sample_fmts )
{
msg_Dbg( p_enc, "Trying to find more suitable sample format instead of %s", av_get_sample_fmt_name( p_context->sample_fmt ) );
for( unsigned int i=0; p_codec->sample_fmts[i] != -1; i++ )
for( unsigned int i=0; sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++ )
{
if( GetVlcAudioFormat( p_codec->sample_fmts[i] ) == p_enc->fmt_in.i_codec )
if( GetVlcAudioFormat( sample_fmts[i] ) == p_enc->fmt_in.i_codec )
{
p_context->sample_fmt = p_codec->sample_fmts[i];
p_context->sample_fmt = sample_fmts[i];
msg_Dbg( p_enc, "Using %s as new sample format", av_get_sample_fmt_name( p_context->sample_fmt ) );
break;
}
......@@ -729,14 +755,14 @@ int InitVideoEnc( vlc_object_t *p_this )
p_sys->b_planar = av_sample_fmt_is_planar( p_context->sample_fmt );
// Try if we can use interleaved format for codec input as VLC doesn't really do planar audio yet
// FIXME: Remove when planar/interleaved audio in vlc is equally supported
if( p_sys->b_planar && p_codec->sample_fmts )
if( p_sys->b_planar && sample_fmts )
{
msg_Dbg( p_enc, "Trying to find packet sample format instead of planar %s", av_get_sample_fmt_name( p_context->sample_fmt ) );
for( unsigned int i=0; p_codec->sample_fmts[i] != -1; i++ )
for( unsigned int i=0; sample_fmts[i] != AV_SAMPLE_FMT_NONE; i++ )
{
if( !av_sample_fmt_is_planar( p_codec->sample_fmts[i] ) )
if( !av_sample_fmt_is_planar( sample_fmts[i] ) )
{
p_context->sample_fmt = p_codec->sample_fmts[i];
p_context->sample_fmt = sample_fmts[i];
msg_Dbg( p_enc, "Changing to packet format %s as new sample format", av_get_sample_fmt_name( p_context->sample_fmt ) );
break;
}
......@@ -1227,8 +1253,19 @@ static block_t *EncodeVideo( encoder_t *p_enc, picture_t *p_pict )
frame->pict_type = 0;
frame->repeat_pict = p_pict->i_nb_fields - 2;
#if LIBAVUTIL_VERSION_CHECK( 58, 7, 100 )
if (p_pict->b_progressive)
frame->flags &= ~AV_FRAME_FLAG_INTERLACED;
else
frame->flags |= AV_FRAME_FLAG_INTERLACED;
if (p_pict->b_top_field_first)
frame->flags |= AV_FRAME_FLAG_TOP_FIELD_FIRST;
else
frame->flags &= ~AV_FRAME_FLAG_TOP_FIELD_FIRST;
#else
frame->interlaced_frame = !p_pict->b_progressive;
frame->top_field_first = !!p_pict->b_top_field_first;
#endif
frame->format = p_sys->p_context->pix_fmt;
frame->width = p_sys->p_context->width;
......@@ -1483,9 +1520,8 @@ void EndVideoEnc( vlc_object_t *p_this )
av_frame_free( &p_sys->frame );
vlc_avcodec_lock();
avcodec_close( p_sys->p_context );
vlc_avcodec_unlock();
avcodec_free_context( &p_sys->p_context );
vlc_avcodec_unlock();
av_free( p_sys->p_interleave_buf );
......
......@@ -205,8 +205,7 @@ static int lavc_GetVideoFormat(decoder_t *dec, video_format_t *restrict fmt,
else if (ctx->time_base.num > 0 && ctx->time_base.den > 0)
{
fmt->i_frame_rate = ctx->time_base.den;
fmt->i_frame_rate_base = ctx->time_base.num
* __MAX(ctx->ticks_per_frame, 1);
fmt->i_frame_rate_base = ctx->time_base.num;
}
/* FIXME we should only set the known values and let the core decide
......@@ -328,12 +327,10 @@ static int lavc_UpdateVideoFormat(decoder_t *dec, AVCodecContext *ctx,
/* always have date in fields/ticks units */
if(dec->p_sys->pts.i_divider_num)
date_Change(&dec->p_sys->pts, fmt_out.i_frame_rate *
__MAX(ctx->ticks_per_frame, 1),
date_Change(&dec->p_sys->pts, fmt_out.i_frame_rate,
fmt_out.i_frame_rate_base);
else
date_Init(&dec->p_sys->pts, fmt_out.i_frame_rate *
__MAX(ctx->ticks_per_frame, 1),
date_Init(&dec->p_sys->pts, fmt_out.i_frame_rate,
fmt_out.i_frame_rate_base);
fmt_out.p_palette = dec->fmt_out.video.p_palette;
......@@ -946,9 +943,11 @@ static vlc_tick_t interpolate_next_pts( decoder_t *p_dec, AVFrame *frame )
p_sys->pts.i_divider_num == 0 )
return VLC_TICK_INVALID;
#if LIBAVCODEC_VERSION_CHECK( 60, 12, 100 )
int i_tick = p_context->codec_descriptor->props & AV_CODEC_PROP_FIELDS ? 2 : 1;
#else
int i_tick = p_context->ticks_per_frame;
if( i_tick <= 0 )
i_tick = 1;
#endif
/* interpolate the next PTS */
return date_Increment( &p_sys->pts, i_tick + frame->repeat_pict );
......
......@@ -111,18 +111,63 @@ static vlc_fourcc_t CodecTagToFourcc( uint32_t codec_tag )
#endif
}
static inline void* GetStreamSideData(const AVStream *s, enum AVPacketSideDataType type)
{
#if LIBAVCODEC_VERSION_CHECK( 60, 29, 100 )
const AVCodecParameters *cp = s->codecpar;
const AVPacketSideData *psd =
av_packet_side_data_get(cp->coded_side_data, cp->nb_coded_side_data, type);
return psd ? psd->data : NULL;
#else
return av_stream_get_side_data(s, type, NULL);
#endif
}
/*****************************************************************************
* Open
*****************************************************************************/
static void get_rotation(es_format_t *fmt, AVStream *s)
static void get_rotation(es_format_t *fmt, const AVStream *s)
{
char const *kRotateKey = "rotate";
AVDictionaryEntry *rotation = av_dict_get(s->metadata, kRotateKey, NULL, 0);
long angle = 0;
if( rotation )
{
int32_t *matrix = GetStreamSideData(s, AV_PKT_DATA_DISPLAYMATRIX);
if( matrix ) {
bool flipped = (int64_t)matrix[0] * matrix[4] < (int64_t)matrix[1] * matrix[3];
if (flipped) {
/* Flip the matrix to decouple flip and rotation operations.
* Always assume an horizontal flip for simplicity,
* it can be changed later if rotation is 180º. */
av_display_matrix_flip(matrix, 1, 0);
}
angle = lround(av_display_rotation_get(matrix));
if (angle > 45 && angle < 135)
fmt->video.orientation = ORIENT_ROTATED_270;
else if (angle > 135 || angle < -135) {
if (flipped)
fmt->video.orientation = ORIENT_VFLIPPED;
else
fmt->video.orientation = ORIENT_ROTATED_180;
}
else if (angle < -45 && angle > -135)
fmt->video.orientation = ORIENT_ROTATED_90;
else
fmt->video.orientation = ORIENT_NORMAL;
/* Flip is already applied to the 180º case. */
if (flipped && !(angle > 135 || angle < -135)) {
video_transform_t transform = (video_transform_t)fmt->video.orientation;
/* Flip first then rotate */
fmt->video.orientation = ORIENT_HFLIPPED;
video_format_TransformBy(&fmt->video, transform);
}
} else if( rotation ) {
angle = strtol(rotation->value, NULL, 10);
if (angle > 45 && angle < 135)
......@@ -137,21 +182,18 @@ static void get_rotation(es_format_t *fmt, AVStream *s)
else
fmt->video.orientation = ORIENT_NORMAL;
}
int32_t *matrix = (int32_t *)av_stream_get_side_data(s, AV_PKT_DATA_DISPLAYMATRIX, NULL);
if( matrix ) {
angle = lround(av_display_rotation_get(matrix));
if (angle > 45 && angle < 135)
fmt->video.orientation = ORIENT_ROTATED_270;
else if (angle > 135 || angle < -135)
fmt->video.orientation = ORIENT_ROTATED_180;
else if (angle < -45 && angle > -135)
fmt->video.orientation = ORIENT_ROTATED_90;
}
else
fmt->video.orientation = ORIENT_NORMAL;
static void get_palette(es_format_t *fmt, const AVStream *s)
{
const uint8_t *pal = GetStreamSideData(s, AV_PKT_DATA_PALETTE);
if (pal) {
video_palette_t *p_palette = fmt->video.p_palette;
for (size_t i=0; i<ARRAY_SIZE(p_palette->palette); i++)
{
memcpy(p_palette->palette[i], pal, sizeof(p_palette->palette[0]));
pal += sizeof(p_palette->palette[0]);
}
}
}
......@@ -450,8 +492,8 @@ int avformat_OpenDemux( vlc_object_t *p_this )
es_fmt.video.i_visible_height = es_fmt.video.i_height;
get_rotation(&es_fmt, s);
get_palette(&es_fmt, s);
# warning FIXME: implement palette transmission
psz_type = "video";
AVRational rate;
......