diff --git a/dictionary.go b/dictionary.go index 08e4d1e..c8f10be 100644 --- a/dictionary.go +++ b/dictionary.go @@ -78,3 +78,8 @@ func (d *Dictionary) Unpack(b []byte) error { return newError(C.av_packet_unpack_dictionary(b, size, &d.c)) }) } + +// https://ffmpeg.org/doxygen/7.0/group__lavu__dict.html#ga59a6372b124b306e3a2233723c5cdc78 +func (d *Dictionary) Copy(dst *Dictionary, flags DictionaryFlags) error { + return newError(C.av_dict_copy(&dst.c, d.c, C.int(flags))) +} diff --git a/dictionary_test.go b/dictionary_test.go index 628a4e5..bc81cbf 100644 --- a/dictionary_test.go +++ b/dictionary_test.go @@ -7,36 +7,45 @@ import ( ) func TestDictionary(t *testing.T) { - d := NewDictionary() - defer d.Free() - err := d.ParseString("invalid,,", ":", ",", 0) + d1 := NewDictionary() + defer d1.Free() + err := d1.ParseString("invalid,,", ":", ",", 0) require.Error(t, err) - err = d.ParseString("k1=v1,k2=v2", "=", ",", 0) + err = d1.ParseString("k1=v1,k2=v2", "=", ",", 0) require.NoError(t, err) - err = d.Set("k3", "v3", 0) + err = d1.Set("k3", "v3", 0) require.NoError(t, err) - e := d.Get("k1", nil, 0) + e := d1.Get("k1", nil, 0) require.NotNil(t, e) require.Equal(t, "k1", e.Key()) require.Equal(t, "v1", e.Value()) - e = d.Get("k2", nil, 0) + e = d1.Get("k2", nil, 0) require.NotNil(t, e) require.Equal(t, "k2", e.Key()) require.Equal(t, "v2", e.Value()) - e = d.Get("k3", nil, 0) + e = d1.Get("k3", nil, 0) require.NotNil(t, e) require.Equal(t, "k3", e.Key()) require.Equal(t, "v3", e.Value()) - e = d.Get("k4", nil, 0) + e = d1.Get("k4", nil, 0) require.Nil(t, e) - b := d.Pack() + b := d1.Pack() require.Equal(t, "k1\x00v1\x00k2\x00v2\x00k3\x00v3\x00", string(b)) - err = d.Unpack([]byte("k4\x00v4\x00")) + err = d1.Unpack([]byte("k4\x00v4\x00")) require.NoError(t, err) - e = d.Get("k4", nil, 0) + e = d1.Get("k4", nil, 0) require.NotNil(t, e) require.Equal(t, "k4", e.Key()) require.Equal(t, "v4", e.Value()) + + d2 := NewDictionary() + defer d2.Free() + require.NoError(t, d1.Copy(d2, NewDictionaryFlags())) + e = d2.Get("k4", nil, 0) + require.NotNil(t, e) + require.Equal(t, "k4", e.Key()) + require.Equal(t, "v4", e.Value()) + }