[vlc-devel] [Patch] Implementing MP4 DEMUX_GET_FPS control query
Hugo Beauzee-Luyssen
beauze.h at gmail.com
Wed Sep 23 14:30:29 CEST 2009
On Thu, Sep 17, 2009 at 6:27 PM, Hugo Beauzee-Luyssen
<beauze.h at gmail.com> wrote:
> On Mon, Sep 14, 2009 at 2:44 PM, Hugo Beauzee-Luyssen
> <beauze.h at gmail.com> wrote:
>> On Tue, Sep 8, 2009 at 1:17 PM, Hugo Beauzee-Luyssen <beauze.h at gmail.com> wrote:
>>> On Sat, Sep 5, 2009 at 11:33 PM, Hugo Beauzee-Luyssen<beauze.h at gmail.com> wrote:
>>>> On Sat, Sep 5, 2009 at 11:08 AM, Laurent Aimar<fenrir at via.ecp.fr> wrote:
>>>>> Hi,
>>>>>
>>>>> On Fri, Sep 04, 2009, Hugo Beauzee-Luyssen wrote:
>>>>>> The mp4 demuxer's DEMUX_GET_FPS control query wasn't implemented,
>>>>>> which was preventing libvlc_media_player_get_fps to access the fps.
>>>>>> This patch corrects it.
>>>>>
>>>>>> From 4926a669a00f7bd6639086835655dc7bd3ca22ae Mon Sep 17 00:00:00 2001
>>>>>> From: Hugo Beauzee-Luyssen <beauze.h at gmail.com>
>>>>>> Date: Fri, 4 Sep 2009 00:41:36 +0200
>>>>>> Subject: [PATCH] Implementing MP4 DEMUX_GET_FPS control query
>>>>>>
>>>>>> ---
>>>>>> modules/demux/mp4/mp4.c | 8 ++++++--
>>>>>> 1 files changed, 6 insertions(+), 2 deletions(-)
>>>>>>
>>>>>> diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c
>>>>>> index 76aa37c..ebb6023 100644
>>>>>> --- a/modules/demux/mp4/mp4.c
>>>>>> +++ b/modules/demux/mp4/mp4.c
>>>>>> @@ -155,6 +155,7 @@ struct demux_sys_t
>>>>>> uint64_t i_duration; /* movie duration */
>>>>>> unsigned int i_tracks; /* number of tracks */
>>>>>> mp4_track_t *track; /* array of track */
>>>>>> + float f_fps; /* number of frame per seconds */
>>>>>>
>>>>>> /* */
>>>>>> MP4_Box_t *p_tref_chap;
>>>>>> @@ -837,8 +838,9 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
>>>>>> return VLC_SUCCESS;
>>>>>>
>>>>>> case DEMUX_GET_FPS:
>>>>>> - msg_Warn( p_demux, "DEMUX_GET_FPS unimplemented !!" );
>>>>>> - return VLC_EGENERIC;
>>>>>> + pf = (double*)va_arg( args, double* );
>>>>>> + *pf = (double)p_sys->f_fps;
>>>>>> + return VLC_SUCCESS;
>>>>>>
>>>>>> case DEMUX_GET_META:
>>>>>> {
>>>>>> @@ -1518,6 +1520,8 @@ static int TrackCreateES( demux_t *p_demux, mp4_track_t *p_track,
>>>>>> p_track->fmt.video.i_frame_rate_base =
>>>>>> p_box->data.p_stts->i_sample_delta[0];
>>>>>> }
>>>>>> + p_demux->p_sys->f_fps = (float)p_track->i_timescale /
>>>>>> + (float)p_track->fmt.video.i_frame_rate_base;
>>>>> It would be more coherent to use p_track->fmt.video.i_frame_rate instead
>>>>> of p_track->i_timescale.
>>>>>
>>>>> Now, I highly doubt it work well on a lot of files, i_timescale is not bound to
>>>>> represent the frame rate at all.
>>>>> I think the most reliable way would be to count the number of frames and the total
>>>>> duration to estimate the frame rate. I think that the last message in
>>>>> TrackCreateSamplesIndex use the needed informations (but I am not sure).
>>>>>
>>>>> Regards,
>>>>>
>>>>
>>
>> Since this is how FPS are computed in this demux, I can't see any
>> other way of doing this.
>> Any hints ??
>>
>> Regards,
>>
>>
>
> Hi,
>
> I apologize for replying this thread 4 times in a row, but this is a
> feature we really need in VLMC.
> Could you give us any instructions on how to make it ready to apply ?
>
> Best regards,
>
This should fix the mistake you were pointing out monday night on IRC.
Best regards,
--
Hugo Beauzée-Luyssen
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Implementing-MP4-DEMUX_GET_FPS-control-query.patch
Type: application/octet-stream
Size: 1601 bytes
Desc: not available
URL: <http://mailman.videolan.org/pipermail/vlc-devel/attachments/20090923/f764e4d3/attachment.obj>
More information about the vlc-devel
mailing list