mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-28 19:20:35 +00:00
applemedia: replace private function with its public variant
FigVideoFormatDescriptionCreateWithSampleDescriptionExtensionAtom is an un-documented private function which might change its signature as it already did in the past. Replace it with CMVideoFormatDescriptionCreate and the also un-documented Extensions dictionary.
This commit is contained in:
parent
9b168e6b4d
commit
c69f41d299
3 changed files with 76 additions and 10 deletions
|
@ -54,11 +54,6 @@ static gboolean gst_vtdec_sink_event (GstPad * pad, GstObject * parent,
|
|||
static CMSampleBufferRef gst_vtdec_sample_buffer_from (GstVTDec * self,
|
||||
GstBuffer * buf);
|
||||
|
||||
extern OSStatus FigVideoFormatDescriptionCreateWithSampleDescriptionExtensionAtom
|
||||
(CFAllocatorRef allocator, UInt32 formatId, UInt32 width, UInt32 height,
|
||||
UInt32 atomId, const UInt8 * data, CFIndex len, void *unk1,
|
||||
CMFormatDescriptionRef * formatDesc);
|
||||
|
||||
static void
|
||||
gst_vtdec_base_init (GstVTDecClass * klass)
|
||||
{
|
||||
|
@ -359,15 +354,41 @@ gst_vtdec_create_format_description_from_codec_data (GstVTDec * self,
|
|||
GstBuffer * codec_data)
|
||||
{
|
||||
CMFormatDescriptionRef fmt_desc;
|
||||
OSStatus status;
|
||||
CFMutableDictionaryRef extensions, par, atoms;
|
||||
GstMapInfo map;
|
||||
OSStatus status;
|
||||
|
||||
gst_buffer_map (codec_data, &map, GST_MAP_READ);
|
||||
|
||||
status =
|
||||
FigVideoFormatDescriptionCreateWithSampleDescriptionExtensionAtom (NULL,
|
||||
self->details->format_id, self->vinfo.width, self->vinfo.height, 'avcC',
|
||||
map.data, map.size, NULL, &fmt_desc);
|
||||
/* CVPixelAspectRatio dict */
|
||||
par = CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks,
|
||||
&kCFTypeDictionaryValueCallBacks);
|
||||
gst_vtutil_dict_set_i32 (par, CFSTR ("HorizontalSpacing"),
|
||||
self->vinfo.par_n);
|
||||
gst_vtutil_dict_set_i32 (par, CFSTR ("VerticalSpacing"),
|
||||
self->vinfo.par_d);
|
||||
|
||||
/* SampleDescriptionExtensionAtoms dict */
|
||||
atoms = CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks,
|
||||
&kCFTypeDictionaryValueCallBacks);
|
||||
gst_vtutil_dict_set_data (atoms, CFSTR ("avcC"), map.data, map.size);
|
||||
|
||||
/* Extensions dict */
|
||||
extensions = CFDictionaryCreateMutable (NULL, 0, &kCFTypeDictionaryKeyCallBacks,
|
||||
&kCFTypeDictionaryValueCallBacks);
|
||||
gst_vtutil_dict_set_string (extensions,
|
||||
CFSTR ("CVImageBufferChromaLocationBottomField"), "left");
|
||||
gst_vtutil_dict_set_string (extensions,
|
||||
CFSTR ("CVImageBufferChromaLocationTopField"), "left");
|
||||
gst_vtutil_dict_set_boolean (extensions, CFSTR("FullRangeVideo"), FALSE);
|
||||
gst_vtutil_dict_set_object (extensions, CFSTR ("CVPixelAspectRatio"),
|
||||
(CFTypeRef *) par);
|
||||
gst_vtutil_dict_set_object (extensions,
|
||||
CFSTR ("SampleDescriptionExtensionAtoms"), (CFTypeRef *) atoms);
|
||||
|
||||
status = CMVideoFormatDescriptionCreate (NULL,
|
||||
self->details->format_id, self->vinfo.width, self->vinfo.height,
|
||||
extensions, &fmt_desc);
|
||||
|
||||
gst_buffer_unmap (codec_data, &map);
|
||||
|
||||
|
|
|
@ -59,3 +59,40 @@ gst_vtutil_dict_set_i32 (CFMutableDictionaryRef dict, CFStringRef key,
|
|||
CFDictionarySetValue (dict, key, number);
|
||||
CFRelease (number);
|
||||
}
|
||||
|
||||
void
|
||||
gst_vtutil_dict_set_string (CFMutableDictionaryRef dict, CFStringRef key,
|
||||
const gchar * value)
|
||||
{
|
||||
CFStringRef string;
|
||||
|
||||
string = CFStringCreateWithCString (NULL, value, kCFStringEncodingASCII);
|
||||
CFDictionarySetValue (dict, key, string);
|
||||
CFRelease (string);
|
||||
}
|
||||
|
||||
void
|
||||
gst_vtutil_dict_set_boolean (CFMutableDictionaryRef dict, CFStringRef key,
|
||||
gboolean value)
|
||||
{
|
||||
CFDictionarySetValue (dict, key, value ? kCFBooleanTrue: kCFBooleanFalse);
|
||||
}
|
||||
|
||||
void
|
||||
gst_vtutil_dict_set_data (CFMutableDictionaryRef dict, CFStringRef key,
|
||||
guint8 * value, guint64 length)
|
||||
{
|
||||
CFDataRef data;
|
||||
|
||||
data = CFDataCreate (NULL, value, length);
|
||||
CFDictionarySetValue (dict, key, data);
|
||||
CFRelease (data);
|
||||
}
|
||||
|
||||
void
|
||||
gst_vtutil_dict_set_object (CFMutableDictionaryRef dict, CFStringRef key,
|
||||
CFTypeRef *value)
|
||||
{
|
||||
CFDictionarySetValue (dict, key, value);
|
||||
CFRelease (value);
|
||||
}
|
||||
|
|
|
@ -29,6 +29,14 @@ gchar * gst_vtutil_object_to_string (CFTypeRef obj);
|
|||
gchar * gst_vtutil_string_to_utf8 (CFStringRef s);
|
||||
void gst_vtutil_dict_set_i32 (CFMutableDictionaryRef dict,
|
||||
CFStringRef key, gint32 value);
|
||||
void gst_vtutil_dict_set_string (CFMutableDictionaryRef dict,
|
||||
CFStringRef key, const gchar * value);
|
||||
void gst_vtutil_dict_set_boolean (CFMutableDictionaryRef dict,
|
||||
CFStringRef key, gboolean value);
|
||||
void gst_vtutil_dict_set_data (CFMutableDictionaryRef dict,
|
||||
CFStringRef key, guint8 * value, guint64 length);
|
||||
void gst_vtutil_dict_set_object (CFMutableDictionaryRef dict,
|
||||
CFStringRef key, CFTypeRef * value);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
|
|
Loading…
Reference in a new issue