Re: [FFmpeg-devel] [PATCH] Notify user when encode a CBR mp3 file without "-write_xing false". This may result in mp3 file duration incorect on ios safari browser and webview. I try to fix it but it c

2017-04-22 Thread sharp bai
ios safari browser support the xing header, and the duration of the
mp3 file with xing header is correct. But with "Info" replaced "Xing"
in xing header in CBR mode, ios safari browser does not skip the first
frame and using the first frame header(the bitrate in header has
changed to enlarge frame size as xing frame needs at least 177 bytes)
to calculate duration.

2017-04-23 0:29 GMT+08:00 Michael Niedermayer :
> On Fri, Apr 21, 2017 at 10:59:41PM +0800, sharp...@gmail.com wrote:
>> From: sharpbai 
>>
>> Bug example:
>>
>> ffmpeg -i a.mp3 -c:a mp3 -ab 32k -ar 44100 -ac 1 b.mp3
>>
>> The duration of the generated file b.mp3 is wrong on ios safari browser from 
>> ios7 to ios10.
>> ---
>>  libavformat/mp3enc.c | 7 ++-
>>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> ios safari browser doesnt support the xing header ?
>
> [...]
>
> --
> Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
>
> Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
>
> ___
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>



-- 
Regards,

Sharpbai
Focus on web programming.

Blog - http://blog.tbai.me/
Weibo - http://weibo.com/iambaitian
Renren - http://renren.com/sharpbai
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH] [PATCH] avdevice/avfoundation: add scaleFactor attribute for avfoundation

2017-08-18 Thread sharp bai
Thank you for your patient. I will follow your direction.

Question 1: Your patch misses to cover the scale factor in case of a
device name string given by the user.

The problem in mac os the screen to be catpured in avfoundation not
have a real name. Only video device in avfoundation has a name. The
screen name "Capture screen [n]" you have seen through "-list_devices"
is given by ffmpeg developer for convinent. So there is a possibility
that someone may build a capture device which name is the same as
"Capture screen 0" which may result in capturing wrong device. So
using "-list_devices" to find out the screen index then assign it
should be the only right way.

Question 2: Although Apple's reference says it works for scale_factor
> 1.0, it should be documented (at least in the code) that it seems
not to actually do anything for scale_factor > 1.0.

This is a tough problem. I spent 5 days to prepare an available test
environment which is almost done yesterday. My test environment covers
the following operating systems:

- Mac OS X 10.7.5
- Mac OS X 10.8.5
- Mac OS X 10.8.5
- Mac OS X 10.10.5
- Mac OS X 10.11.5
- mac OS 10.12.6

I have confirmed that on 10.7 and 10.8 the value of scale_factor can
be larger than 1.0(scale_factor = 10.0 works. scale_factor = 20.0, the
ffmpeg using 2.4GB memory and freezing), the maximum value is unknown
but i think is infinate :)

I have compared the images which scale_factor range from 1.0 to 4.0
captured in 10.8, the images which scale_factor greater than 1.0 are
not clearer than 1.0. They are simply scaled larger.

From 10.9 and later, the value of scale_factor is limited to maximum
1.0. I think Apple had recognized that the value larger than 1.0 is
not useful.

So I think the scale_factor range should be 0.0 to 1.0. The value
greater than 1.0 can be done through ffmpeg scale filter or any other
way.

2017-08-07 23:22 GMT+08:00 Thilo Borgmann :
> Am 07.08.17 um 01:31 schrieb sharpbai:
>> From: sharpbai 
>>
>> feature: add scaleFactor attribute for avfoundation
>> added by: siyuan.w...@duobei.com
>> added by: yiren...@duobei.com
>> ---
>>  doc/indevs.texi| 22 ++
>>  libavdevice/avfoundation.m |  6 ++
>>  2 files changed, 28 insertions(+)
>>
>> diff --git a/doc/indevs.texi b/doc/indevs.texi
>> index 09e3321..1ba71d7 100644
>> --- a/doc/indevs.texi
>> +++ b/doc/indevs.texi
>> @@ -139,6 +139,13 @@ Capture the mouse pointer. Default is 0.
>>  @item -capture_mouse_clicks
>>  Capture the screen mouse clicks. Default is 0.
>>
>> +@item -scale_factor
>> +Scale factor for capture the screen. Set this property to scale the buffers
> "Scale factor during screen capturing. Set this property to scale the screens 
> by a given factor."
>
>
>> +by a given factor. For example capturing a retina screen which resolution 
>> 2880x1800
> Trailing whitespace.
>
>
>> +with a scale_factor of 0.5 (or 0.05) produces video buffers at 1440x900 (or 
>> 144x90).
> The example part should cover that so this can be removed.
>
>
>> +This is useful for reducing captured file size and increasing performance
>> +in capturing screen.
> Can also be removed.
>
>
>> Default is 1.0 (no scaling).
>> +
>>  @end table
>>
>>  @subsection Examples
>> @@ -169,6 +176,21 @@ Record video from the system default video device using 
>> the pixel format bgr0 an
>>  $ ffmpeg -f avfoundation -pixel_format bgr0 -i "default:none" out.avi
>>  @end example
>>
>> +@item
>> +Capture video from the first screen using the pixel format bgr0 and scaling 
>> in half size into out.avi.
>> +First command use the avfoundation device command to enumerate all the 
>> available input devices including
>> +screens ready to be captured:
>> +@example
>> +$ ffmpeg -f avfoundation -list_devices true -i ""
>> +@end example
>> +Once you've figured out the device index corresponding to the screen to be 
>> captured use, run the second
>> +command with the correct screen device index to execute screen capture.
> The documentation already covers the block above so this should be removed.
>
>
>> For example on my mac the index
>> +of "Screen Capture 0" is "1", I should replace @code{-i 
>> ""} with @code{-i "1"} in the second command.
>> +@example
>> +$ ffmpeg -f avfoundation -pixel_format bgr0 -scale_factor 0.5 -i 
>> "" out.avi
>> +@end example
>> +
>> +
> Remove things like "on my mac" and "I should...".
> See the other examples for reference.
>
>
>>  @end itemize
>>
>>  @section bktr
>> diff --git a/libavdevice/avfoundation.m b/libavdevice/avfoundation.m
>> index e2ddf47..1196cf3 100644
>> --- a/libavdevice/avfoundation.m
>> +++ b/libavdevice/avfoundation.m
>> @@ -96,6 +96,7 @@ typedef struct
>>
>>  int capture_cursor;
>>  int capture_mouse_clicks;
>> +float   scale_factor;
>>
>>  int list_devices;
>>  int video_device_index;
>> @@ -735,6 +736,10 @@ static int avf_read_header(AVFormatContext 

Re: [FFmpeg-devel] [PATCH] avcodec/videotoolboxenc: fix encoding frame crash on iOS 11

2019-09-04 Thread sharp bai
We have tested on iOS 12 and other version. Only on iOS 11 this crash occurs,
regardless using which device such as iPhone 8, iPhone X or iPhone 7.

Aman Gupta  于2019年9月4日周三 上午7:48写道:
>
>
>
> On Mon, Aug 12, 2019 at 11:50 PM sharpbai  wrote:
>>
>> On iOS 11, encoding a frame may return error with log
>> "Error encoding frame 0", which means vtenc_output_callback
>> is called with status=0 and sample_buffer=NULL. Then the
>> encoding session will be crashed on next callback wether or not
>> closing the codec context.
>>
>> Let us look through the link below introducing VTCompressionOutputCallback,
>>
>> https://developer.apple.com/documentation/videotoolbox/vtcompressionoutputcallback?language=objc
>>
>> "status=0" (noErr) means compression was successful.
>> "sampleBuffer=NULL" means the frame was dropped when compression
>> was successful (status=0) or compression was not successful (status!=0).
>>
>> So we should not set AVERROR_EXTERNAL on "status=0" and "sample_buffer=NULL"
>> as it is not a error.
>>
>> The fix is that we only set AVERROR_EXTERNAL with status value non zero.
>> When sample_buffer is NULL and status value is zero, we simply return
>> with no other operation.
>>
>> This crash often occurs on iOS 11 for example encoding 720p@25fps.
>
>
> Is it fixed in iOS 12, or untested there?
>
>>
>>
>> Signed-off-by: sharpbai 
>> ---
>>  libavcodec/videotoolboxenc.c | 6 +-
>>  1 file changed, 5 insertions(+), 1 deletion(-)
>>
>> diff --git a/libavcodec/videotoolboxenc.c b/libavcodec/videotoolboxenc.c
>> index d76bb7f646..8afdd125d2 100644
>> --- a/libavcodec/videotoolboxenc.c
>> +++ b/libavcodec/videotoolboxenc.c
>> @@ -569,12 +569,16 @@ static void vtenc_output_callback(
>>  return;
>>  }
>>
>> -if (status || !sample_buffer) {
>> +if (status) {
>>  av_log(avctx, AV_LOG_ERROR, "Error encoding frame: %d\n", 
>> (int)status);
>>  set_async_error(vtctx, AVERROR_EXTERNAL);
>>  return;
>>  }
>>
>> +if (!sample_buffer) {
>> +return;
>> +}
>> +
>>  if (!avctx->extradata && (avctx->flags & AV_CODEC_FLAG_GLOBAL_HEADER)) {
>>  int set_status = set_extradata(avctx, sample_buffer);
>>  if (set_status) {
>> --
>> 2.21.0
>>
>> ___
>> ffmpeg-devel mailing list
>> ffmpeg-devel@ffmpeg.org
>> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>>
>> To unsubscribe, visit link above, or email
>> ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".



-- 
Regards,

Sharpbai
Focus on web programming.

Blog - https://blog.sharpbai.com/
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".