diff mbox

[FFmpeg-devel] movenc/isom: update vpcC box to the latest draft specification

Message ID 20170421232540.13604-1-h.leppkes@gmail.com
State Accepted
Commit 64ad44a3817a288168ba97f6c022160b940cd22e
Headers show

Commit Message

Hendrik Leppkes April 21, 2017, 11:25 p.m. UTC
This brings our generation of the vpcC box up to date to version 1.0
of the VP Codec ISO Media File Format Binding.

Specifically, color/transfer properties are now written with values
based on ISO/IEC 23001-8, which is the same reference specification the
AVColor* enumerations are based on.
---
 libavformat/movenc.c |  3 ++-
 libavformat/vpcc.c   | 55 +++++-----------------------------------------------
 2 files changed, 7 insertions(+), 51 deletions(-)

Comments

Hendrik Leppkes April 21, 2017, 11:49 p.m. UTC | #1
On Sat, Apr 22, 2017 at 1:25 AM, Hendrik Leppkes <h.leppkes@gmail.com> wrote:
> This brings our generation of the vpcC box up to date to version 1.0
> of the VP Codec ISO Media File Format Binding.
>
> Specifically, color/transfer properties are now written with values
> based on ISO/IEC 23001-8, which is the same reference specification the
> AVColor* enumerations are based on.
> ---
>  libavformat/movenc.c |  3 ++-
>  libavformat/vpcc.c   | 55 +++++-----------------------------------------------
>  2 files changed, 7 insertions(+), 51 deletions(-)
>

Actually I should probably update the main commit message to mention
that its v1.0 and not a draft any longer?
KongQun Yang April 24, 2017, 9:48 p.m. UTC | #2
-- KongQun Yang (KQ)

On Fri, Apr 21, 2017 at 4:49 PM, Hendrik Leppkes <h.leppkes@gmail.com>
wrote:

> On Sat, Apr 22, 2017 at 1:25 AM, Hendrik Leppkes <h.leppkes@gmail.com>
> wrote:
> > This brings our generation of the vpcC box up to date to version 1.0
> > of the VP Codec ISO Media File Format Binding.
> >
> > Specifically, color/transfer properties are now written with values
> > based on ISO/IEC 23001-8, which is the same reference specification the
> > AVColor* enumerations are based on.
> > ---
> >  libavformat/movenc.c |  3 ++-
> >  libavformat/vpcc.c   | 55 +++++-------------------------
> ----------------------
> >  2 files changed, 7 insertions(+), 51 deletions(-)
> >
>
> Actually I should probably update the main commit message to mention
> that its v1.0 and not a draft any longer?
>

SGTM. Should we remove the experimental check as well:
https://github.com/FFmpeg/FFmpeg/blob/b905ba5bc18c89c7fccd8621795755644442ef19/libavformat/movenc.c#L5989
?


> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
James Almer April 24, 2017, 9:59 p.m. UTC | #3
On 4/24/2017 6:48 PM, KongQun Yang wrote:
> -- KongQun Yang (KQ)
> 
> On Fri, Apr 21, 2017 at 4:49 PM, Hendrik Leppkes <h.leppkes@gmail.com>
> wrote:
> 
>> On Sat, Apr 22, 2017 at 1:25 AM, Hendrik Leppkes <h.leppkes@gmail.com>
>> wrote:
>>> This brings our generation of the vpcC box up to date to version 1.0
>>> of the VP Codec ISO Media File Format Binding.
>>>
>>> Specifically, color/transfer properties are now written with values
>>> based on ISO/IEC 23001-8, which is the same reference specification the
>>> AVColor* enumerations are based on.
>>> ---
>>>  libavformat/movenc.c |  3 ++-
>>>  libavformat/vpcc.c   | 55 +++++-------------------------
>> ----------------------
>>>  2 files changed, 7 insertions(+), 51 deletions(-)
>>>
>>
>> Actually I should probably update the main commit message to mention
>> that its v1.0 and not a draft any longer?
>>
> 
> SGTM. Should we remove the experimental check as well:
> https://github.com/FFmpeg/FFmpeg/blob/b905ba5bc18c89c7fccd8621795755644442ef19/libavformat/movenc.c#L5989
> ?

IMO yes, assuming the vpcc boxes generated after this patch are 100%
v1.0 compliant.
Hendrik Leppkes April 25, 2017, 9:11 a.m. UTC | #4
On Mon, Apr 24, 2017 at 11:59 PM, James Almer <jamrial@gmail.com> wrote:
> On 4/24/2017 6:48 PM, KongQun Yang wrote:
>> -- KongQun Yang (KQ)
>>
>> On Fri, Apr 21, 2017 at 4:49 PM, Hendrik Leppkes <h.leppkes@gmail.com>
>> wrote:
>>
>>> On Sat, Apr 22, 2017 at 1:25 AM, Hendrik Leppkes <h.leppkes@gmail.com>
>>> wrote:
>>>> This brings our generation of the vpcC box up to date to version 1.0
>>>> of the VP Codec ISO Media File Format Binding.
>>>>
>>>> Specifically, color/transfer properties are now written with values
>>>> based on ISO/IEC 23001-8, which is the same reference specification the
>>>> AVColor* enumerations are based on.
>>>> ---
>>>>  libavformat/movenc.c |  3 ++-
>>>>  libavformat/vpcc.c   | 55 +++++-------------------------
>>> ----------------------
>>>>  2 files changed, 7 insertions(+), 51 deletions(-)
>>>>
>>>
>>> Actually I should probably update the main commit message to mention
>>> that its v1.0 and not a draft any longer?
>>>
>>
>> SGTM. Should we remove the experimental check as well:
>> https://github.com/FFmpeg/FFmpeg/blob/b905ba5bc18c89c7fccd8621795755644442ef19/libavformat/movenc.c#L5989
>> ?
>
> IMO yes, assuming the vpcc boxes generated after this patch are 100%
> v1.0 compliant.

The vpcC bos is compliant, but I have no idea if anything else in the
muxer is required to create fully compliant files. I randomy stumbled
upon the vpcC generation and figured I would update it, I'm not that
well versed in movenc otherwise.

- Hendrik
James Almer April 25, 2017, 2:01 p.m. UTC | #5
On 4/25/2017 6:11 AM, Hendrik Leppkes wrote:
> On Mon, Apr 24, 2017 at 11:59 PM, James Almer <jamrial@gmail.com> wrote:
>> On 4/24/2017 6:48 PM, KongQun Yang wrote:
>>> -- KongQun Yang (KQ)
>>>
>>> On Fri, Apr 21, 2017 at 4:49 PM, Hendrik Leppkes <h.leppkes@gmail.com>
>>> wrote:
>>>
>>>> On Sat, Apr 22, 2017 at 1:25 AM, Hendrik Leppkes <h.leppkes@gmail.com>
>>>> wrote:
>>>>> This brings our generation of the vpcC box up to date to version 1.0
>>>>> of the VP Codec ISO Media File Format Binding.
>>>>>
>>>>> Specifically, color/transfer properties are now written with values
>>>>> based on ISO/IEC 23001-8, which is the same reference specification the
>>>>> AVColor* enumerations are based on.
>>>>> ---
>>>>>  libavformat/movenc.c |  3 ++-
>>>>>  libavformat/vpcc.c   | 55 +++++-------------------------
>>>> ----------------------
>>>>>  2 files changed, 7 insertions(+), 51 deletions(-)
>>>>>
>>>>
>>>> Actually I should probably update the main commit message to mention
>>>> that its v1.0 and not a draft any longer?
>>>>
>>>
>>> SGTM. Should we remove the experimental check as well:
>>> https://github.com/FFmpeg/FFmpeg/blob/b905ba5bc18c89c7fccd8621795755644442ef19/libavformat/movenc.c#L5989
>>> ?
>>
>> IMO yes, assuming the vpcc boxes generated after this patch are 100%
>> v1.0 compliant.
> 
> The vpcC bos is compliant, but I have no idea if anything else in the
> muxer is required to create fully compliant files. I randomy stumbled
> upon the vpcC generation and figured I would update it, I'm not that
> well versed in movenc otherwise.

Don't think so. Should be good as is. You could set "VPC Coding" as
compressor name in find_compressor(), but it's optional.
Hendrik Leppkes May 16, 2017, 12:15 a.m. UTC | #6
On Tue, Apr 25, 2017 at 11:11 AM, Hendrik Leppkes <h.leppkes@gmail.com> wrote:
> On Mon, Apr 24, 2017 at 11:59 PM, James Almer <jamrial@gmail.com> wrote:
>> On 4/24/2017 6:48 PM, KongQun Yang wrote:
>>> -- KongQun Yang (KQ)
>>>
>>> On Fri, Apr 21, 2017 at 4:49 PM, Hendrik Leppkes <h.leppkes@gmail.com>
>>> wrote:
>>>
>>>> On Sat, Apr 22, 2017 at 1:25 AM, Hendrik Leppkes <h.leppkes@gmail.com>
>>>> wrote:
>>>>> This brings our generation of the vpcC box up to date to version 1.0
>>>>> of the VP Codec ISO Media File Format Binding.
>>>>>
>>>>> Specifically, color/transfer properties are now written with values
>>>>> based on ISO/IEC 23001-8, which is the same reference specification the
>>>>> AVColor* enumerations are based on.
>>>>> ---
>>>>>  libavformat/movenc.c |  3 ++-
>>>>>  libavformat/vpcc.c   | 55 +++++-------------------------
>>>> ----------------------
>>>>>  2 files changed, 7 insertions(+), 51 deletions(-)
>>>>>
>>>>
>>>> Actually I should probably update the main commit message to mention
>>>> that its v1.0 and not a draft any longer?
>>>>
>>>
>>> SGTM. Should we remove the experimental check as well:
>>> https://github.com/FFmpeg/FFmpeg/blob/b905ba5bc18c89c7fccd8621795755644442ef19/libavformat/movenc.c#L5989
>>> ?
>>
>> IMO yes, assuming the vpcc boxes generated after this patch are 100%
>> v1.0 compliant.
>
> The vpcC bos is compliant, but I have no idea if anything else in the
> muxer is required to create fully compliant files. I randomy stumbled
> upon the vpcC generation and figured I would update it, I'm not that
> well versed in movenc otherwise.
>

Pushed without the removal of experimental, that should be done in a
separate change anyway.

- Hendrik
diff mbox

Patch

diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index e6e2313c53..e2f57586e2 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -1112,7 +1112,8 @@  static int mov_write_vpcc_tag(AVFormatContext *s, AVIOContext *pb, MOVTrack *tra
 
     avio_wb32(pb, 0);
     ffio_wfourcc(pb, "vpcC");
-    avio_wb32(pb, 0); /* version & flags */
+    avio_w8(pb, 1); /* version */
+    avio_wb24(pb, 0); /* flags */
     ff_isom_write_vpcc(s, pb, track->par);
     return update_size(pb, pos);
 }
diff --git a/libavformat/vpcc.c b/libavformat/vpcc.c
index 2390e1711c..df08de59a6 100644
--- a/libavformat/vpcc.c
+++ b/libavformat/vpcc.c
@@ -23,44 +23,6 @@ 
 #include "libavutil/pixfmt.h"
 #include "vpcc.h"
 
-enum VpxColorSpace
-{
-    VPX_COLOR_SPACE_UNSPECIFIED = 0,
-    VPX_COLOR_SPACE_BT601 = 1,
-    VPX_COLOR_SPACE_BT709 = 2,
-    VPX_COLOR_SPACE_SMPTE_170 = 3,
-    VPX_COLOR_SPACE_SMPTE_240 = 4,
-    VPX_COLOR_SPACE_BT2020_NCL = 5,
-    VPX_COLOR_SPACE_BT2020_CL = 6,
-    VPX_COLOR_SPACE_RGB = 7,
-};
-
-static int get_vpx_color_space(AVFormatContext *s,
-                               enum AVColorSpace color_space)
-{
-    switch (color_space) {
-    case AVCOL_SPC_RGB:
-        return VPX_COLOR_SPACE_RGB;
-    case AVCOL_SPC_BT709:
-        return VPX_COLOR_SPACE_BT709;
-    case AVCOL_SPC_UNSPECIFIED:
-        return VPX_COLOR_SPACE_UNSPECIFIED;
-    case AVCOL_SPC_BT470BG:
-        return VPX_COLOR_SPACE_BT601;
-    case AVCOL_SPC_SMPTE170M:
-        return VPX_COLOR_SPACE_SMPTE_170;
-    case AVCOL_SPC_SMPTE240M:
-        return VPX_COLOR_SPACE_SMPTE_240;
-    case AVCOL_SPC_BT2020_NCL:
-        return VPX_COLOR_SPACE_BT2020_NCL;
-    case AVCOL_SPC_BT2020_CL:
-        return VPX_COLOR_SPACE_BT2020_CL;
-    default:
-        av_log(s, AV_LOG_ERROR, "Unsupported color space (%d)\n", color_space);
-        return -1;
-    }
-}
-
 enum VPX_CHROMA_SUBSAMPLING
 {
     VPX_SUBSAMPLING_420_VERTICAL = 0,
@@ -100,12 +62,6 @@  static int get_bit_depth(AVFormatContext *s, enum AVPixelFormat pixel_format)
     return desc->comp[0].depth;
 }
 
-static int get_vpx_transfer_function(
-    enum AVColorTransferCharacteristic transfer)
-{
-    return transfer == AVCOL_TRC_SMPTEST2084;
-}
-
 static int get_vpx_video_full_range_flag(enum AVColorRange color_range)
 {
     return color_range == AVCOL_RANGE_JPEG;
@@ -117,14 +73,12 @@  int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb,
     int profile = par->profile;
     int level = par->level == FF_LEVEL_UNKNOWN ? 0 : par->level;
     int bit_depth = get_bit_depth(s, par->format);
-    int vpx_color_space = get_vpx_color_space(s, par->color_space);
     int vpx_chroma_subsampling =
         get_vpx_chroma_subsampling(s, par->format, par->chroma_location);
-    int vpx_transfer_function = get_vpx_transfer_function(par->color_trc);
     int vpx_video_full_range_flag =
         get_vpx_video_full_range_flag(par->color_range);
 
-    if (bit_depth < 0 || vpx_color_space < 0 || vpx_chroma_subsampling < 0)
+    if (bit_depth < 0 || vpx_chroma_subsampling < 0)
         return AVERROR_INVALIDDATA;
 
     if (profile == FF_PROFILE_UNKNOWN) {
@@ -138,9 +92,10 @@  int ff_isom_write_vpcc(AVFormatContext *s, AVIOContext *pb,
 
     avio_w8(pb, profile);
     avio_w8(pb, level);
-    avio_w8(pb, (bit_depth << 4) | vpx_color_space);
-    avio_w8(pb, (vpx_chroma_subsampling << 4) | (vpx_transfer_function << 1) |
-                    vpx_video_full_range_flag);
+    avio_w8(pb, (bit_depth << 4) | (vpx_chroma_subsampling << 1) | vpx_video_full_range_flag);
+    avio_w8(pb, par->color_primaries);
+    avio_w8(pb, par->color_trc);
+    avio_w8(pb, par->color_space);
 
     // vp9 does not have codec initialization data.
     avio_wb16(pb, 0);