[Ffmpeg-devel] [PATCH] Auto-resize ffplay video

Steven Sheehy steven.sheehy
Sat Dec 30 02:53:27 CET 2006


Michael Niedermayer wrote:
> Hi
> 
> On Fri, Dec 29, 2006 at 05:07:14PM -0600, Steven Sheehy wrote:
>> Michael Niedermayer wrote:
>>> Hi
>>>
>>> On Tue, Dec 26, 2006 at 03:12:38PM -0600, Steven Sheehy wrote:
>>>> On Sat, Dec 23, 2006 at 15:20:36 CET 2006, Michael Niedermayer wrote:
>>>>> seperate issue seperate patch please
>>>> I could've characterized this patch more generically by saying it 
>>>> resolves the improper resizing of the video window, if you prefer. In 
>>>> addition, if I were to make them separate they would still depend on each 
>>>> other since the patch to auto-resize the output modifies text before the 
>>>> exiting from full screen bug. Nevertheless, here's the patch for just 
>>>> this issue:
>>>>
>>> [mangled unuseable patch]
>>>
>>>>> screen_width / screen_height should either be set to the dimensions of
>>>>> the video or should be at 0 by default and then be overridden by
>>>>> the video w/h if they are 0 where used
>>>> I've tried this, but I've found that if you pass a width and height of 0 
>>>> to the initial SDL_SetVideoMode(), it causes the video window to be 
>>>> maximized and future SDL_SetVideoMode()'s to be ignored (SDL bug?). 
>>>> screen_width / screen_height cannot be set to the video dimensions at 
>>>> declaration time or in main() since they can only be determined at a much 
>>>> later point in the program when alloc_picture() is called. If have any 
>>>> suggestions to overcome these issues, I'd be grateful.
>>> what about calling SDL_SetVideoMode() after av_find_stream_info() ?
>>>
>> I followed your advice and basically moved the initial call to 
>> SDL_SetVideoMode() from main() to decode_thread() after 
>> av_find_stream_info(). This works perfectly for me, but I'm not sure if 
>> this is how you want it. Let me know if I need to tweak it more.
> 
> hmm, maybe putting the code into stream_component_open() would be better
> sample_rate for audio is also set there, so w/h seems to fit pretty well
> also stream_cycle_channel() calls stream_component_open() and if the
> w/h changes should update the window size
> 
> of course the code could also be put into its own function which would
> then be called by stream_component_open() ...

stream_component_open() is called for each stream in the file. We don't want to 
set screen using SDL_SetVideoMode() for the audio and video streams if the file 
contains both, for example. Especially since audio seems to be set first and it 
has a w/h of 0. But we can't only set it for video streams since if a music file 
is played then it will output a visualization. For some reason, if you call 
SDL_SetVideoMode() twice really close together it chooses to ignore the second 
call. Thus, the initial call to SDL_SetVideoMode() must be called only once.

There also might be an issue calling SDL_SetVideoMode() from decode_thread 
instead of the main thread, but I am not sure about this. All the other 
SDL_SetVideoMode() seems to be called from the main event_loop thread, at least.

I've made another patch which reverts to changing the size in alloc_picture() as 
the original patch but addresses your initial concerns.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: resize.diff
Type: text/x-patch
Size: 2044 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20061229/a5a772bb/attachment.bin>



More information about the ffmpeg-devel mailing list