Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-07 Thread Michael Niedermayer
On Fri, Dec 07, 2018 at 01:43:37PM +0100, Hendrik Leppkes wrote:
> On Fri, Dec 7, 2018 at 1:15 PM Paul B Mahol  wrote:
> >
> > On 12/7/18, Michael Niedermayer  wrote:
> > > On Fri, Dec 07, 2018 at 11:21:57AM +0100, Paul B Mahol wrote:
> > >> On 12/7/18, Michael Niedermayer  wrote:
> > >> > On Fri, Dec 07, 2018 at 10:28:09AM +0100, Paul B Mahol wrote:
> > >> >> On 12/7/18, Michael Niedermayer  wrote:
> > >> >> > On Wed, Dec 05, 2018 at 09:22:48PM +0100, Paul B Mahol wrote:
> > >> >> >> Signed-off-by: Paul B Mahol 
> > >> >> >> ---
> > >> >> >>  libavcodec/proresdec2.c | 51
> > >> >> >> ++---
> > >> >> >>  1 file changed, 27 insertions(+), 24 deletions(-)
> > >> >> >>
> > >> >> >> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
> > >> >> >> index 8581d797fb..80a76bbba1 100644
> > >> >> >> --- a/libavcodec/proresdec2.c
> > >> >> >> +++ b/libavcodec/proresdec2.c
> > >> >> >> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext
> > >> >> >> *avctx)
> > >> >> >>@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext
> > >> >> >> *avctx)
> > >> >> >>
> > >> >> >> avctx->bits_per_raw_sample = 10;
> > >> >> >>
> > >> >> >>+if (avctx->profile == FF_PROFILE_UNKNOWN) {
> > >> >> >> switch (avctx->codec_tag) {
> > >> >> >> case MKTAG('a','p','c','o'):
> > >> >> >> avctx->profile = FF_PROFILE_PRORES_PROXY;
> > >> >> >>@@ -155,16 +156,18 @@ static av_cold int decode_init(AVCodecContext
> > >> >> >> *avctx)
> > >> >> >> break;
> > >> >> >> case MKTAG('a','p','4','h'):
> > >> >> >> avctx->profile = FF_PROFILE_PRORES_;
> > >> >> >>-avctx->bits_per_raw_sample = 12;
> > >> >> >> break;
> > >> >> >> case MKTAG('a','p','4','x'):
> > >> >> >> avctx->profile = FF_PROFILE_PRORES_XQ;
> > >> >> >>-avctx->bits_per_raw_sample = 12;
> > >> >> >> break;
> > >> >> >> default:
> > >> >> >>-avctx->profile = FF_PROFILE_UNKNOWN;
> > >> >> >> av_log(avctx, AV_LOG_WARNING, "Unknown prores profile
> > >> >> >> %d\n",
> > >> >> >> avctx->codec_tag);
> > >> >> >> }
> > >> >> >>+}
> > >> >> >>+
> > >> >> >>+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
> > >> >> >>+avctx->profile == FF_PROFILE_PRORES_)
> > >> >> >>+avctx->bits_per_raw_sample = 12;
> > >> >> >
> > >> >> > with this it would be possible to have 12bit output while the
> > >> >> > profile
> > >> >> > is set to one having 10bits and vice versa ?
> > >> >>
> > >> >> No, and neither with previous code.
> > >> >>
> > >> >> > maybe the profile should only be left if it is compatible with the
> > >> >> > decoder output
> > >> >>
> > >> >> I do not follow.
> > >> >
> > >> > I may have misunderstood the intend of the patch
> > >> > please document what this fixes in the commit message.
> > >> >
> > >> > AVCodecContext.profile is for decoding set by the decoder.
> > >> > (thats how its documented in avcodec.h)
> > >> >
> > >> > So the obvious thought that this is about not overriding a profile
> > >> > set by the user(app) or demuxer might have been flawed on my side
> > >> > as that seems not possible in the API as it is documented
> > >>
> > >> You missed fact that profile is set via codecpar (which is than copied
> > >> to codec context), never in codec context directly.
> > >>
> > >> Once again, what you want to change?
> > >
> > > As i said, please document in the commit message what this fixes.
> > >
> > > About codecpar, The documentation of the codec context did not allow
> > > code outside the decoder to set profile and it now is set from outside
> > > the decoder. That broadening of the interpretation is at least a source
> > > for potential bugs.
> > >
> > > So, if i guess correctly, the issue this is about is that
> > > codecpar has a profile set and that is given to
> > > the decoder which then previously did override it and after the patch does
> > > sometimes not.
> > > So my original concern was that the value set in codecpar can be 
> > > incorrect,
> > > this value could come from the user application, demuxer or other source.
> > >
> > > As a specific example, the profile might be set to FF_PROFILE_PRORES_PROXY
> > > That IIUC corresponds to "Apple ProRes 422 Proxy" in apples documents
> > > and now the decoder could output 12bit 444 without correcting the profile.
> > > IIUC this would be inconsistent
> > >
> > > This is not a major issue, its just metadata thats contradictionary
> > >
> > > Another minor issue is that this behavior is undocumented, or incorrectly
> > > documented
> > >
> > > For example for width and height we document in avcodec.h:
> > >  * - decoding: May be set by the user before opening the decoder if
> > > known e.g.
> > >  * from the container. Some decoders will require the
> > > dimensions
> > >  * to be set by the caller. During decoding, the 

Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-07 Thread Hendrik Leppkes
On Fri, Dec 7, 2018 at 1:15 PM Paul B Mahol  wrote:
>
> On 12/7/18, Michael Niedermayer  wrote:
> > On Fri, Dec 07, 2018 at 11:21:57AM +0100, Paul B Mahol wrote:
> >> On 12/7/18, Michael Niedermayer  wrote:
> >> > On Fri, Dec 07, 2018 at 10:28:09AM +0100, Paul B Mahol wrote:
> >> >> On 12/7/18, Michael Niedermayer  wrote:
> >> >> > On Wed, Dec 05, 2018 at 09:22:48PM +0100, Paul B Mahol wrote:
> >> >> >> Signed-off-by: Paul B Mahol 
> >> >> >> ---
> >> >> >>  libavcodec/proresdec2.c | 51
> >> >> >> ++---
> >> >> >>  1 file changed, 27 insertions(+), 24 deletions(-)
> >> >> >>
> >> >> >> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
> >> >> >> index 8581d797fb..80a76bbba1 100644
> >> >> >> --- a/libavcodec/proresdec2.c
> >> >> >> +++ b/libavcodec/proresdec2.c
> >> >> >> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext
> >> >> >> *avctx)
> >> >> >>@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext
> >> >> >> *avctx)
> >> >> >>
> >> >> >> avctx->bits_per_raw_sample = 10;
> >> >> >>
> >> >> >>+if (avctx->profile == FF_PROFILE_UNKNOWN) {
> >> >> >> switch (avctx->codec_tag) {
> >> >> >> case MKTAG('a','p','c','o'):
> >> >> >> avctx->profile = FF_PROFILE_PRORES_PROXY;
> >> >> >>@@ -155,16 +156,18 @@ static av_cold int decode_init(AVCodecContext
> >> >> >> *avctx)
> >> >> >> break;
> >> >> >> case MKTAG('a','p','4','h'):
> >> >> >> avctx->profile = FF_PROFILE_PRORES_;
> >> >> >>-avctx->bits_per_raw_sample = 12;
> >> >> >> break;
> >> >> >> case MKTAG('a','p','4','x'):
> >> >> >> avctx->profile = FF_PROFILE_PRORES_XQ;
> >> >> >>-avctx->bits_per_raw_sample = 12;
> >> >> >> break;
> >> >> >> default:
> >> >> >>-avctx->profile = FF_PROFILE_UNKNOWN;
> >> >> >> av_log(avctx, AV_LOG_WARNING, "Unknown prores profile
> >> >> >> %d\n",
> >> >> >> avctx->codec_tag);
> >> >> >> }
> >> >> >>+}
> >> >> >>+
> >> >> >>+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
> >> >> >>+avctx->profile == FF_PROFILE_PRORES_)
> >> >> >>+avctx->bits_per_raw_sample = 12;
> >> >> >
> >> >> > with this it would be possible to have 12bit output while the
> >> >> > profile
> >> >> > is set to one having 10bits and vice versa ?
> >> >>
> >> >> No, and neither with previous code.
> >> >>
> >> >> > maybe the profile should only be left if it is compatible with the
> >> >> > decoder output
> >> >>
> >> >> I do not follow.
> >> >
> >> > I may have misunderstood the intend of the patch
> >> > please document what this fixes in the commit message.
> >> >
> >> > AVCodecContext.profile is for decoding set by the decoder.
> >> > (thats how its documented in avcodec.h)
> >> >
> >> > So the obvious thought that this is about not overriding a profile
> >> > set by the user(app) or demuxer might have been flawed on my side
> >> > as that seems not possible in the API as it is documented
> >>
> >> You missed fact that profile is set via codecpar (which is than copied
> >> to codec context), never in codec context directly.
> >>
> >> Once again, what you want to change?
> >
> > As i said, please document in the commit message what this fixes.
> >
> > About codecpar, The documentation of the codec context did not allow
> > code outside the decoder to set profile and it now is set from outside
> > the decoder. That broadening of the interpretation is at least a source
> > for potential bugs.
> >
> > So, if i guess correctly, the issue this is about is that
> > codecpar has a profile set and that is given to
> > the decoder which then previously did override it and after the patch does
> > sometimes not.
> > So my original concern was that the value set in codecpar can be incorrect,
> > this value could come from the user application, demuxer or other source.
> >
> > As a specific example, the profile might be set to FF_PROFILE_PRORES_PROXY
> > That IIUC corresponds to "Apple ProRes 422 Proxy" in apples documents
> > and now the decoder could output 12bit 444 without correcting the profile.
> > IIUC this would be inconsistent
> >
> > This is not a major issue, its just metadata thats contradictionary
> >
> > Another minor issue is that this behavior is undocumented, or incorrectly
> > documented
> >
> > For example for width and height we document in avcodec.h:
> >  * - decoding: May be set by the user before opening the decoder if
> > known e.g.
> >  * from the container. Some decoders will require the
> > dimensions
> >  * to be set by the caller. During decoding, the decoder
> > may
> >  * overwrite those values as required while parsing the
> > data.
> >  */
> > int width, height;
> >
> > That says clearly that the user can set them and that they will be overriden
> > but
> > with profile we have:
> >
> >  * - decoding: 

Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-07 Thread Paul B Mahol
On 12/7/18, Michael Niedermayer  wrote:
> On Fri, Dec 07, 2018 at 11:21:57AM +0100, Paul B Mahol wrote:
>> On 12/7/18, Michael Niedermayer  wrote:
>> > On Fri, Dec 07, 2018 at 10:28:09AM +0100, Paul B Mahol wrote:
>> >> On 12/7/18, Michael Niedermayer  wrote:
>> >> > On Wed, Dec 05, 2018 at 09:22:48PM +0100, Paul B Mahol wrote:
>> >> >> Signed-off-by: Paul B Mahol 
>> >> >> ---
>> >> >>  libavcodec/proresdec2.c | 51
>> >> >> ++---
>> >> >>  1 file changed, 27 insertions(+), 24 deletions(-)
>> >> >>
>> >> >> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
>> >> >> index 8581d797fb..80a76bbba1 100644
>> >> >> --- a/libavcodec/proresdec2.c
>> >> >> +++ b/libavcodec/proresdec2.c
>> >> >> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext
>> >> >> *avctx)
>> >> >>@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext
>> >> >> *avctx)
>> >> >>
>> >> >> avctx->bits_per_raw_sample = 10;
>> >> >>
>> >> >>+if (avctx->profile == FF_PROFILE_UNKNOWN) {
>> >> >> switch (avctx->codec_tag) {
>> >> >> case MKTAG('a','p','c','o'):
>> >> >> avctx->profile = FF_PROFILE_PRORES_PROXY;
>> >> >>@@ -155,16 +156,18 @@ static av_cold int decode_init(AVCodecContext
>> >> >> *avctx)
>> >> >> break;
>> >> >> case MKTAG('a','p','4','h'):
>> >> >> avctx->profile = FF_PROFILE_PRORES_;
>> >> >>-avctx->bits_per_raw_sample = 12;
>> >> >> break;
>> >> >> case MKTAG('a','p','4','x'):
>> >> >> avctx->profile = FF_PROFILE_PRORES_XQ;
>> >> >>-avctx->bits_per_raw_sample = 12;
>> >> >> break;
>> >> >> default:
>> >> >>-avctx->profile = FF_PROFILE_UNKNOWN;
>> >> >> av_log(avctx, AV_LOG_WARNING, "Unknown prores profile
>> >> >> %d\n",
>> >> >> avctx->codec_tag);
>> >> >> }
>> >> >>+}
>> >> >>+
>> >> >>+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
>> >> >>+avctx->profile == FF_PROFILE_PRORES_)
>> >> >>+avctx->bits_per_raw_sample = 12;
>> >> >
>> >> > with this it would be possible to have 12bit output while the
>> >> > profile
>> >> > is set to one having 10bits and vice versa ?
>> >>
>> >> No, and neither with previous code.
>> >>
>> >> > maybe the profile should only be left if it is compatible with the
>> >> > decoder output
>> >>
>> >> I do not follow.
>> >
>> > I may have misunderstood the intend of the patch
>> > please document what this fixes in the commit message.
>> >
>> > AVCodecContext.profile is for decoding set by the decoder.
>> > (thats how its documented in avcodec.h)
>> >
>> > So the obvious thought that this is about not overriding a profile
>> > set by the user(app) or demuxer might have been flawed on my side
>> > as that seems not possible in the API as it is documented
>>
>> You missed fact that profile is set via codecpar (which is than copied
>> to codec context), never in codec context directly.
>>
>> Once again, what you want to change?
>
> As i said, please document in the commit message what this fixes.
>
> About codecpar, The documentation of the codec context did not allow
> code outside the decoder to set profile and it now is set from outside
> the decoder. That broadening of the interpretation is at least a source
> for potential bugs.
>
> So, if i guess correctly, the issue this is about is that
> codecpar has a profile set and that is given to
> the decoder which then previously did override it and after the patch does
> sometimes not.
> So my original concern was that the value set in codecpar can be incorrect,
> this value could come from the user application, demuxer or other source.
>
> As a specific example, the profile might be set to FF_PROFILE_PRORES_PROXY
> That IIUC corresponds to "Apple ProRes 422 Proxy" in apples documents
> and now the decoder could output 12bit 444 without correcting the profile.
> IIUC this would be inconsistent
>
> This is not a major issue, its just metadata thats contradictionary
>
> Another minor issue is that this behavior is undocumented, or incorrectly
> documented
>
> For example for width and height we document in avcodec.h:
>  * - decoding: May be set by the user before opening the decoder if
> known e.g.
>  * from the container. Some decoders will require the
> dimensions
>  * to be set by the caller. During decoding, the decoder
> may
>  * overwrite those values as required while parsing the
> data.
>  */
> int width, height;
>
> That says clearly that the user can set them and that they will be overriden
> but
> with profile we have:
>
>  * - decoding: Set by libavcodec.
>  */
>  int profile;
>
> Before this patch this was correct for prores, after the patch this
> API documentation is at least misleading or incomplete
> The decoder not just sometimes leaves the field but it sometimes also reads
> the
> field and uses it for the 

Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-07 Thread Michael Niedermayer
On Fri, Dec 07, 2018 at 11:21:57AM +0100, Paul B Mahol wrote:
> On 12/7/18, Michael Niedermayer  wrote:
> > On Fri, Dec 07, 2018 at 10:28:09AM +0100, Paul B Mahol wrote:
> >> On 12/7/18, Michael Niedermayer  wrote:
> >> > On Wed, Dec 05, 2018 at 09:22:48PM +0100, Paul B Mahol wrote:
> >> >> Signed-off-by: Paul B Mahol 
> >> >> ---
> >> >>  libavcodec/proresdec2.c | 51
> >> >> ++---
> >> >>  1 file changed, 27 insertions(+), 24 deletions(-)
> >> >>
> >> >> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
> >> >> index 8581d797fb..80a76bbba1 100644
> >> >> --- a/libavcodec/proresdec2.c
> >> >> +++ b/libavcodec/proresdec2.c
> >> >> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext
> >> >> *avctx)
> >> >>@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext
> >> >> *avctx)
> >> >>
> >> >> avctx->bits_per_raw_sample = 10;
> >> >>
> >> >>+if (avctx->profile == FF_PROFILE_UNKNOWN) {
> >> >> switch (avctx->codec_tag) {
> >> >> case MKTAG('a','p','c','o'):
> >> >> avctx->profile = FF_PROFILE_PRORES_PROXY;
> >> >>@@ -155,16 +156,18 @@ static av_cold int decode_init(AVCodecContext
> >> >> *avctx)
> >> >> break;
> >> >> case MKTAG('a','p','4','h'):
> >> >> avctx->profile = FF_PROFILE_PRORES_;
> >> >>-avctx->bits_per_raw_sample = 12;
> >> >> break;
> >> >> case MKTAG('a','p','4','x'):
> >> >> avctx->profile = FF_PROFILE_PRORES_XQ;
> >> >>-avctx->bits_per_raw_sample = 12;
> >> >> break;
> >> >> default:
> >> >>-avctx->profile = FF_PROFILE_UNKNOWN;
> >> >> av_log(avctx, AV_LOG_WARNING, "Unknown prores profile
> >> >> %d\n",
> >> >> avctx->codec_tag);
> >> >> }
> >> >>+}
> >> >>+
> >> >>+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
> >> >>+avctx->profile == FF_PROFILE_PRORES_)
> >> >>+avctx->bits_per_raw_sample = 12;
> >> >
> >> > with this it would be possible to have 12bit output while the profile
> >> > is set to one having 10bits and vice versa ?
> >>
> >> No, and neither with previous code.
> >>
> >> > maybe the profile should only be left if it is compatible with the
> >> > decoder output
> >>
> >> I do not follow.
> >
> > I may have misunderstood the intend of the patch
> > please document what this fixes in the commit message.
> >
> > AVCodecContext.profile is for decoding set by the decoder.
> > (thats how its documented in avcodec.h)
> >
> > So the obvious thought that this is about not overriding a profile
> > set by the user(app) or demuxer might have been flawed on my side
> > as that seems not possible in the API as it is documented
> 
> You missed fact that profile is set via codecpar (which is than copied
> to codec context), never in codec context directly.
> 
> Once again, what you want to change?

As i said, please document in the commit message what this fixes.

About codecpar, The documentation of the codec context did not allow
code outside the decoder to set profile and it now is set from outside
the decoder. That broadening of the interpretation is at least a source
for potential bugs.

So, if i guess correctly, the issue this is about is that
codecpar has a profile set and that is given to
the decoder which then previously did override it and after the patch does
sometimes not. 
So my original concern was that the value set in codecpar can be incorrect,
this value could come from the user application, demuxer or other source.

As a specific example, the profile might be set to FF_PROFILE_PRORES_PROXY
That IIUC corresponds to "Apple ProRes 422 Proxy" in apples documents
and now the decoder could output 12bit 444 without correcting the profile.
IIUC this would be inconsistent

This is not a major issue, its just metadata thats contradictionary

Another minor issue is that this behavior is undocumented, or incorrectly
documented

For example for width and height we document in avcodec.h:
 * - decoding: May be set by the user before opening the decoder if known 
e.g.
 * from the container. Some decoders will require the dimensions
 * to be set by the caller. During decoding, the decoder may
 * overwrite those values as required while parsing the data.
 */
int width, height;

That says clearly that the user can set them and that they will be overriden but
with profile we have:

 * - decoding: Set by libavcodec.
 */
 int profile;

Before this patch this was correct for prores, after the patch this 
API documentation is at least misleading or incomplete
The decoder not just sometimes leaves the field but it sometimes also reads the
field and uses it for the bits_per_raw_sample setting.

What i want is to keep this all consistent and have documentation match
implementation. And things being documented well enough to use them based
on just the documentation


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-07 Thread Paul B Mahol
On 12/7/18, Michael Niedermayer  wrote:
> On Fri, Dec 07, 2018 at 10:28:09AM +0100, Paul B Mahol wrote:
>> On 12/7/18, Michael Niedermayer  wrote:
>> > On Wed, Dec 05, 2018 at 09:22:48PM +0100, Paul B Mahol wrote:
>> >> Signed-off-by: Paul B Mahol 
>> >> ---
>> >>  libavcodec/proresdec2.c | 51
>> >> ++---
>> >>  1 file changed, 27 insertions(+), 24 deletions(-)
>> >>
>> >> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
>> >> index 8581d797fb..80a76bbba1 100644
>> >> --- a/libavcodec/proresdec2.c
>> >> +++ b/libavcodec/proresdec2.c
>> >> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext
>> >> *avctx)
>> >>@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext
>> >> *avctx)
>> >>
>> >> avctx->bits_per_raw_sample = 10;
>> >>
>> >>+if (avctx->profile == FF_PROFILE_UNKNOWN) {
>> >> switch (avctx->codec_tag) {
>> >> case MKTAG('a','p','c','o'):
>> >> avctx->profile = FF_PROFILE_PRORES_PROXY;
>> >>@@ -155,16 +156,18 @@ static av_cold int decode_init(AVCodecContext
>> >> *avctx)
>> >> break;
>> >> case MKTAG('a','p','4','h'):
>> >> avctx->profile = FF_PROFILE_PRORES_;
>> >>-avctx->bits_per_raw_sample = 12;
>> >> break;
>> >> case MKTAG('a','p','4','x'):
>> >> avctx->profile = FF_PROFILE_PRORES_XQ;
>> >>-avctx->bits_per_raw_sample = 12;
>> >> break;
>> >> default:
>> >>-avctx->profile = FF_PROFILE_UNKNOWN;
>> >> av_log(avctx, AV_LOG_WARNING, "Unknown prores profile
>> >> %d\n",
>> >> avctx->codec_tag);
>> >> }
>> >>+}
>> >>+
>> >>+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
>> >>+avctx->profile == FF_PROFILE_PRORES_)
>> >>+avctx->bits_per_raw_sample = 12;
>> >
>> > with this it would be possible to have 12bit output while the profile
>> > is set to one having 10bits and vice versa ?
>>
>> No, and neither with previous code.
>>
>> > maybe the profile should only be left if it is compatible with the
>> > decoder output
>>
>> I do not follow.
>
> I may have misunderstood the intend of the patch
> please document what this fixes in the commit message.
>
> AVCodecContext.profile is for decoding set by the decoder.
> (thats how its documented in avcodec.h)
>
> So the obvious thought that this is about not overriding a profile
> set by the user(app) or demuxer might have been flawed on my side
> as that seems not possible in the API as it is documented

You missed fact that profile is set via codecpar (which is than copied
to codec context), never in codec context directly.

Once again, what you want to change?
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-07 Thread Michael Niedermayer
On Fri, Dec 07, 2018 at 10:28:09AM +0100, Paul B Mahol wrote:
> On 12/7/18, Michael Niedermayer  wrote:
> > On Wed, Dec 05, 2018 at 09:22:48PM +0100, Paul B Mahol wrote:
> >> Signed-off-by: Paul B Mahol 
> >> ---
> >>  libavcodec/proresdec2.c | 51 ++---
> >>  1 file changed, 27 insertions(+), 24 deletions(-)
> >>
> >> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
> >> index 8581d797fb..80a76bbba1 100644
> >> --- a/libavcodec/proresdec2.c
> >> +++ b/libavcodec/proresdec2.c
> >> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext
> >> *avctx)
> >>@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> >>
> >> avctx->bits_per_raw_sample = 10;
> >>
> >>+if (avctx->profile == FF_PROFILE_UNKNOWN) {
> >> switch (avctx->codec_tag) {
> >> case MKTAG('a','p','c','o'):
> >> avctx->profile = FF_PROFILE_PRORES_PROXY;
> >>@@ -155,16 +156,18 @@ static av_cold int decode_init(AVCodecContext
> >> *avctx)
> >> break;
> >> case MKTAG('a','p','4','h'):
> >> avctx->profile = FF_PROFILE_PRORES_;
> >>-avctx->bits_per_raw_sample = 12;
> >> break;
> >> case MKTAG('a','p','4','x'):
> >> avctx->profile = FF_PROFILE_PRORES_XQ;
> >>-avctx->bits_per_raw_sample = 12;
> >> break;
> >> default:
> >>-avctx->profile = FF_PROFILE_UNKNOWN;
> >> av_log(avctx, AV_LOG_WARNING, "Unknown prores profile %d\n",
> >> avctx->codec_tag);
> >> }
> >>+}
> >>+
> >>+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
> >>+avctx->profile == FF_PROFILE_PRORES_)
> >>+avctx->bits_per_raw_sample = 12;
> >
> > with this it would be possible to have 12bit output while the profile
> > is set to one having 10bits and vice versa ?
> 
> No, and neither with previous code.
> 
> > maybe the profile should only be left if it is compatible with the
> > decoder output
> 
> I do not follow.

I may have misunderstood the intend of the patch
please document what this fixes in the commit message.

AVCodecContext.profile is for decoding set by the decoder. 
(thats how its documented in avcodec.h)

So the obvious thought that this is about not overriding a profile
set by the user(app) or demuxer might have been flawed on my side
as that seems not possible in the API as it is documented

thx

-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Breaking DRM is a little like attempting to break through a door even
though the window is wide open and the only thing in the house is a bunch
of things you dont want and which you would get tomorrow for free anyway


signature.asc
Description: PGP signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-07 Thread Paul B Mahol
On 12/7/18, Michael Niedermayer  wrote:
> On Wed, Dec 05, 2018 at 09:22:48PM +0100, Paul B Mahol wrote:
>> Signed-off-by: Paul B Mahol 
>> ---
>>  libavcodec/proresdec2.c | 51 ++---
>>  1 file changed, 27 insertions(+), 24 deletions(-)
>>
>> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
>> index 8581d797fb..80a76bbba1 100644
>> --- a/libavcodec/proresdec2.c
>> +++ b/libavcodec/proresdec2.c
>> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext
>> *avctx)
>>@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
>>
>> avctx->bits_per_raw_sample = 10;
>>
>>+if (avctx->profile == FF_PROFILE_UNKNOWN) {
>> switch (avctx->codec_tag) {
>> case MKTAG('a','p','c','o'):
>> avctx->profile = FF_PROFILE_PRORES_PROXY;
>>@@ -155,16 +156,18 @@ static av_cold int decode_init(AVCodecContext
>> *avctx)
>> break;
>> case MKTAG('a','p','4','h'):
>> avctx->profile = FF_PROFILE_PRORES_;
>>-avctx->bits_per_raw_sample = 12;
>> break;
>> case MKTAG('a','p','4','x'):
>> avctx->profile = FF_PROFILE_PRORES_XQ;
>>-avctx->bits_per_raw_sample = 12;
>> break;
>> default:
>>-avctx->profile = FF_PROFILE_UNKNOWN;
>> av_log(avctx, AV_LOG_WARNING, "Unknown prores profile %d\n",
>> avctx->codec_tag);
>> }
>>+}
>>+
>>+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
>>+avctx->profile == FF_PROFILE_PRORES_)
>>+avctx->bits_per_raw_sample = 12;
>
> with this it would be possible to have 12bit output while the profile
> is set to one having 10bits and vice versa ?

No, and neither with previous code.

> maybe the profile should only be left if it is compatible with the
> decoder output

I do not follow.
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-07 Thread Michael Niedermayer
On Wed, Dec 05, 2018 at 09:22:48PM +0100, Paul B Mahol wrote:
> Signed-off-by: Paul B Mahol 
> ---
>  libavcodec/proresdec2.c | 51 ++---
>  1 file changed, 27 insertions(+), 24 deletions(-)
> 
> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
> index 8581d797fb..80a76bbba1 100644
> --- a/libavcodec/proresdec2.c
> +++ b/libavcodec/proresdec2.c
> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext *avctx)
>@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
> 
> avctx->bits_per_raw_sample = 10;
> 
>+if (avctx->profile == FF_PROFILE_UNKNOWN) {
> switch (avctx->codec_tag) {
> case MKTAG('a','p','c','o'):
> avctx->profile = FF_PROFILE_PRORES_PROXY;
>@@ -155,16 +156,18 @@ static av_cold int decode_init(AVCodecContext *avctx)
> break;
> case MKTAG('a','p','4','h'):
> avctx->profile = FF_PROFILE_PRORES_;
>-avctx->bits_per_raw_sample = 12;
> break;
> case MKTAG('a','p','4','x'):
> avctx->profile = FF_PROFILE_PRORES_XQ;
>-avctx->bits_per_raw_sample = 12;
> break;
> default:
>-avctx->profile = FF_PROFILE_UNKNOWN;
> av_log(avctx, AV_LOG_WARNING, "Unknown prores profile %d\n", 
> avctx->codec_tag);
> }
>+}
>+
>+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
>+avctx->profile == FF_PROFILE_PRORES_)
>+avctx->bits_per_raw_sample = 12;

with this it would be possible to have 12bit output while the profile
is set to one having 10bits and vice versa ?

maybe the profile should only be left if it is compatible with the
decoder output

 
-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

During times of universal deceit, telling the truth becomes a
revolutionary act. -- George Orwell


signature.asc
Description: PGP signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-05 Thread Carl Eugen Hoyos
2018-12-05 19:00 GMT+01:00, Gregor Riepl :
> There seems to be an indentation issue here:

This is intended to allow an actual review.

Carl Eugen
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-05 Thread Carl Eugen Hoyos
2018-12-05 21:22 GMT+01:00, Paul B Mahol :
> Signed-off-by: Paul B Mahol 
> ---
>  libavcodec/proresdec2.c | 51 ++---
>  1 file changed, 27 insertions(+), 24 deletions(-)
>
> diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
> index 8581d797fb..80a76bbba1 100644
> --- a/libavcodec/proresdec2.c
> +++ b/libavcodec/proresdec2.c
> @@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext *avctx)
>
>  avctx->bits_per_raw_sample = 10;
>
> -switch (avctx->codec_tag) {

I beg you, please don't reindent.

Thank you, Carl Eugen
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-05 Thread Paul B Mahol
Signed-off-by: Paul B Mahol 
---
 libavcodec/proresdec2.c | 51 ++---
 1 file changed, 27 insertions(+), 24 deletions(-)

diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
index 8581d797fb..80a76bbba1 100644
--- a/libavcodec/proresdec2.c
+++ b/libavcodec/proresdec2.c
@@ -140,32 +140,35 @@ static av_cold int decode_init(AVCodecContext *avctx)
 
 avctx->bits_per_raw_sample = 10;
 
-switch (avctx->codec_tag) {
-case MKTAG('a','p','c','o'):
-avctx->profile = FF_PROFILE_PRORES_PROXY;
-break;
-case MKTAG('a','p','c','s'):
-avctx->profile = FF_PROFILE_PRORES_LT;
-break;
-case MKTAG('a','p','c','n'):
-avctx->profile = FF_PROFILE_PRORES_STANDARD;
-break;
-case MKTAG('a','p','c','h'):
-avctx->profile = FF_PROFILE_PRORES_HQ;
-break;
-case MKTAG('a','p','4','h'):
-avctx->profile = FF_PROFILE_PRORES_;
-avctx->bits_per_raw_sample = 12;
-break;
-case MKTAG('a','p','4','x'):
-avctx->profile = FF_PROFILE_PRORES_XQ;
-avctx->bits_per_raw_sample = 12;
-break;
-default:
-avctx->profile = FF_PROFILE_UNKNOWN;
-av_log(avctx, AV_LOG_WARNING, "Unknown prores profile %d\n", 
avctx->codec_tag);
+if (avctx->profile == FF_PROFILE_UNKNOWN) {
+switch (avctx->codec_tag) {
+case MKTAG('a','p','c','o'):
+avctx->profile = FF_PROFILE_PRORES_PROXY;
+break;
+case MKTAG('a','p','c','s'):
+avctx->profile = FF_PROFILE_PRORES_LT;
+break;
+case MKTAG('a','p','c','n'):
+avctx->profile = FF_PROFILE_PRORES_STANDARD;
+break;
+case MKTAG('a','p','c','h'):
+avctx->profile = FF_PROFILE_PRORES_HQ;
+break;
+case MKTAG('a','p','4','h'):
+avctx->profile = FF_PROFILE_PRORES_;
+break;
+case MKTAG('a','p','4','x'):
+avctx->profile = FF_PROFILE_PRORES_XQ;
+break;
+default:
+av_log(avctx, AV_LOG_WARNING, "Unknown prores profile %d\n", 
avctx->codec_tag);
+}
 }
 
+if (avctx->profile == FF_PROFILE_PRORES_XQ ||
+avctx->profile == FF_PROFILE_PRORES_)
+avctx->bits_per_raw_sample = 12;
+
 if (avctx->bits_per_raw_sample == 10) {
 av_log(avctx, AV_LOG_DEBUG, "Auto bitdepth precision. Use 10b decoding 
based on codec tag");
 } else { /* 12b */
-- 
2.17.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-05 Thread Michael Niedermayer
On Wed, Dec 05, 2018 at 06:52:06PM +0100, Paul B Mahol wrote:
> Signed-off-by: Paul B Mahol 
> ---
>  libavcodec/proresdec2.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)

breaks 
make fate-prores-alpha_skip
TESTprores-alpha_skip
--- ./tests/ref/fate/prores-alpha_skip  2018-12-04 23:28:22.177830519 +0100
+++ tests/data/fate/prores-alpha_skip   2018-12-05 20:27:52.523422579 +0100
@@ -3,5 +3,5 @@
 #codec_id 0: rawvideo
 #dimensions 0: 1920x1080
 #sar 0: 0/1
-0,  0,  0,1, 12441600, 0x65e009b8
-0,  1,  1,1, 12441600, 0x65e009b8
+0,  0,  0,1, 12441600, 0xf06f2ff5
+0,  1,  1,1, 12441600, 0xf06f2ff5
Test prores-alpha_skip failed. Look at tests/data/fate/prores-alpha_skip.err 
for details.
make: *** [fate-prores-alpha_skip] Error 1

[...]

-- 
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Its not that you shouldnt use gotos but rather that you should write
readable code and code with gotos often but not always is less readable


signature.asc
Description: PGP signature
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


Re: [FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-05 Thread Gregor Riepl
There seems to be an indentation issue here:

> +if (avctx->profile == FF_PROFILE_UNKNOWN) {
>  switch (avctx->codec_tag) {
>  case MKTAG('a','p','c','o'):

and here:

>  av_log(avctx, AV_LOG_WARNING, "Unknown prores profile %d\n", 
> avctx->codec_tag);
>  }
> +}
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 1/4] avcodec/proresdec2: change profile only if it is unknown

2018-12-05 Thread Paul B Mahol
Signed-off-by: Paul B Mahol 
---
 libavcodec/proresdec2.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libavcodec/proresdec2.c b/libavcodec/proresdec2.c
index 8581d797fb..f715b86aad 100644
--- a/libavcodec/proresdec2.c
+++ b/libavcodec/proresdec2.c
@@ -140,6 +140,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
 
 avctx->bits_per_raw_sample = 10;
 
+if (avctx->profile == FF_PROFILE_UNKNOWN) {
 switch (avctx->codec_tag) {
 case MKTAG('a','p','c','o'):
 avctx->profile = FF_PROFILE_PRORES_PROXY;
@@ -162,9 +163,9 @@ static av_cold int decode_init(AVCodecContext *avctx)
 avctx->bits_per_raw_sample = 12;
 break;
 default:
-avctx->profile = FF_PROFILE_UNKNOWN;
 av_log(avctx, AV_LOG_WARNING, "Unknown prores profile %d\n", 
avctx->codec_tag);
 }
+}
 
 if (avctx->bits_per_raw_sample == 10) {
 av_log(avctx, AV_LOG_DEBUG, "Auto bitdepth precision. Use 10b decoding 
based on codec tag");
-- 
2.17.1

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel