Setting codec_data in h264 caps for qtmux
coezbek
coezbek at scopis.com
Wed Apr 4 06:58:29 PDT 2012
Thanks Mohammed and Stefan!
With the link from Mohammend I came up with the following (C++ albeit) to
construct a AVCDecoderConfigurationRecord for use as a codec_data for qtmux.
I am not sure whether lengthSizeMinusOne will always indicate 4bytes.
GstBuffer* BitstreamMuxer::createCodecData(GstBuffer* sps, GstBuffer* pps)
{
unsigned int offset = 0;
GstBuffer* codec_data_buffer = gst_buffer_new_and_alloc(sps->size +
pps->size + 11);
guint8* codec_data = codec_data_buffer->data;
codec_data[offset++] = 0x01; // Configuration Version
codec_data[offset++] = sps->data[1]; // AVCProfileIndication
codec_data[offset++] = sps->data[2]; // profile_compatibility
codec_data[offset++] = sps->data[3]; // AVCLevelIndication
codec_data[offset++] = 0xff; // lengthSizeMinusOne == 3 -> length == 4
byte
// SPS
codec_data[offset++] = 0xe1; // numOfSequenceParameterSets | b11100000 ->
numSPS == 1
assert(sps->size <= 0xffff);
codec_data[offset++] = (sps->size >> 8) & 0xff; //
numOfSequenceParameterSets high 8bit
codec_data[offset++] = sps->size & 0xff; // numOfSequenceParameterSets low
8bit
memcpy(codec_data + offset, sps->data, sps->size);
offset += sps->size;
// PPS
codec_data[offset++] = 0x1; // numOfPictureParameterSets == 1
assert(pps->size <= 0xffff);
codec_data[offset++] = (pps->size >> 8) & 0xff;
codec_data[offset++] = pps->size & 0xff;
memcpy(codec_data + offset, pps->data, pps->size);
offset += pps->size;
assert(offset == codec_data_buffer->size);
return codec_data_buffer;
}
--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/Setting-codec-data-in-h264-caps-for-qtmux-tp4525597p4531940.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.
More information about the gstreamer-devel
mailing list