passing cc_subtitle in src/avc_functions.c

This commit is contained in:
Anshul Maheshwari 2014-07-12 11:09:59 +05:30
parent 4d11a727d9
commit da8d4a290c

View File

@ -12,7 +12,7 @@ static void sei_rbsp (unsigned char *seibuf, unsigned char *seiend);
static unsigned char *sei_message (unsigned char *seibuf, unsigned char *seiend);
static void user_data_registered_itu_t_t35 (unsigned char *userbuf, unsigned char *userend);
static void seq_parameter_set_rbsp (unsigned char *seqbuf, unsigned char *seqend);
static void slice_header (unsigned char *heabuf, unsigned char *heaend, int nal_unit_type);
static void slice_header (unsigned char *heabuf, unsigned char *heaend, int nal_unit_type, struct cc_subtitle *sub);
static unsigned char cc_count;
// buffer to hold cc data
@ -44,7 +44,7 @@ void init_avc(void)
cc_data = (unsigned char*)malloc(1024);
}
void do_NAL (unsigned char *NALstart, LLONG NAL_length)
void do_NAL (unsigned char *NALstart, LLONG NAL_length, struct cc_subtitle *sub)
{
unsigned char *NALstop;
unsigned nal_unit_type = *NALstart & 0x1F;
@ -76,7 +76,7 @@ void do_NAL (unsigned char *NALstart, LLONG NAL_length)
// Found coded slice of a non-IDR picture
// We only need the slice header data, no need to implement
// slice_layer_without_partitioning_rbsp( );
slice_header(NALstart+1, NALstop, nal_unit_type);
slice_header(NALstart+1, NALstop, nal_unit_type, sub);
}
else if ( got_seq_para && nal_unit_type == CCX_NAL_TYPE_SEI )
{
@ -99,7 +99,7 @@ void do_NAL (unsigned char *NALstart, LLONG NAL_length)
// Process inbuf bytes in buffer holding and AVC (H.264) video stream.
// The number of processed bytes is returned.
LLONG process_avc (unsigned char *avcbuf, LLONG avcbuflen)
LLONG process_avc (unsigned char *avcbuf, LLONG avcbuflen ,struct cc_subtitle *sub)
{
unsigned char *bpos = avcbuf;
unsigned char *NALstart;
@ -203,7 +203,7 @@ LLONG process_avc (unsigned char *avcbuf, LLONG avcbuflen)
dvprint("BEGIN NAL unit type: %d length %d zeros: %d ref_idc: %d - Buffered captions before: %d\n",
nal_unit_type, NALstop-NALstart-1, zeropad, nal_ref_idc, !cc_buffer_saved);
do_NAL (NALstart, NALstop-NALstart);
do_NAL (NALstart, NALstop-NALstart, sub);
dvprint("END NAL unit type: %d length %d zeros: %d ref_idc: %d - Buffered captions after: %d\n",
nal_unit_type, NALstop-NALstart-1, zeropad, nal_ref_idc, !cc_buffer_saved);
@ -745,7 +745,7 @@ void seq_parameter_set_rbsp (unsigned char *seqbuf, unsigned char *seqend)
// Process slice header in AVC data.
void slice_header (unsigned char *heabuf, unsigned char *heaend, int nal_unit_type)
void slice_header (unsigned char *heabuf, unsigned char *heaend, int nal_unit_type, struct cc_subtitle *sub)
{
LLONG tmp;
struct bitstream q1;
@ -910,7 +910,7 @@ void slice_header (unsigned char *heabuf, unsigned char *heaend, int nal_unit_ty
// Flush buffered cc blocks before doing the housekeeping
if (has_ccdata_buffered)
{
process_hdcc();
process_hdcc(sub);
}
last_gop_length = frames_since_last_gop;
frames_since_last_gop=0;
@ -1042,11 +1042,9 @@ void slice_header (unsigned char *heabuf, unsigned char *heaend, int nal_unit_ty
total_frames_count++;
frames_since_last_gop++;
store_hdcc(cc_data, cc_count, curridx, fts_now);
store_hdcc(cc_data, cc_count, curridx, fts_now, sub);
cc_buffer_saved=1; // CFS: store_hdcc supposedly saves the CC buffer to a sequence buffer
cc_count=0;
//exit(1);
}
// max_dec_frame_buffering .. Max frames in buffer